У меня есть скрипт магазина
В этом скрипте пользователи могут отправлять заказы с логином на мой сайт
Я хочу сделать страницу для отправки заказов без необходимости входа
Поэтому я скопировал файл контроллера и менял коды всякий раз, когда требуется логин пользователя на моем сайте.
И я создал адреса в routs / web.php
Я создал пользователя в моей системе, идентификатор пользователя 13
Я использую от этого пользователя всякий раз, когда мне нужно user_id
Но теперь, когда пользователь выбрал услугу (категорию) и хочет выбрать пакет (продукт), эта ошибка появится в разделе консоли, и пользователь не сможет получить список пакетов:
Не удалось загрузить ресурс: сервер ответил со статусом 401 ()
/ Услуги / Get-пакеты / "package_id"
При входе пользователя эта ошибка будет устранена.
Почему? Я правильно изменил свои коды, и я не вижу, где все еще нужен user_id, и я не исправил это!
Коды моего контроллера:
<?php
namespace App\Http\Controllers;
use Validator;
use App\Order;
use App\Package;
use App\Service;
use Carbon\Carbon;
use App\UserPackagePrice;
use App\Events\OrderPlaced;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Telegram\Bot\Laravel\Facades\Telegram;
use Verta;
class BuyController extends Controller
{
public function newOrder(Request $request)
{
mpc_m_c($request->server('SERVER_NAME'));
$services = Service::where(['status' => 'ACTIVE', 'is_subscription_allowed' => 0])->get();
$packages = Package::where(['status' => 'ACTIVE'])->get();
return view('buy.new', compact('packages', 'services'));
}
public function store(Request $request)
{
$this->validate($request, [
'package_id' => 'required',
'quantity' => 'required',
'link' => 'required',
]);
$package = Package::findOrfail($request->input('package_id'));
$quantity = str_replace ( ',' , '' , $request->input('quantity') );
$min = number_format($package->minimum_quantity,0,'',',');
$max = number_format($package->maximum_quantity,0,'',',');
// if quantity is less than minimum
if (filter_var($quantity, FILTER_VALIDATE_INT) === false) {
return redirect()
->back()
->withInput()
->withErrors(['quantity' => __('Err 1')]);
}
if ($quantity < $min ) {
return redirect()
->back()
->withInput()
->withErrors(['quantity' => __('Err 2')]);
}
if ($quantity > $max ) {
return redirect()
->back()
->withInput()
->withErrors(['quantity' => __('Err 3')]);
}
// if quantity is greater than maximum
// Custom comments count validation
if ($package->custom_comments) {
$commnets = $request->input('custom_comments');
if ($commnets != '') {
$commnets_arr = preg_split('/\n/', $commnets);
$total_comments = count($commnets_arr);
// If greator then quantity
if ($total_comments > $quantity) {
return redirect()
->back()
->withInput()
->withErrors(['quantity' => __('messages.comments_are_more_than_quantity')]);
}
// if less then quantity
if ($total_comments < $quantity) {
return redirect()
->back()
->withInput()
->withErrors(['quantity' => __('messages.comments_are_less_than_quantity')]);
}
}
}
// Calculate Price
$package_price = $package->price_per_item;
// Order price to .00 decimal points
$price = (float)$package_price * $quantity;
$price = number_format($price, 2, '.', '');
// check if user have enough funds to make an order
$order = Order::create([
'price' => $price,
'quantity' => $quantity,
'package_id' => $package->id,
'api_id' => $package->preferred_api_id,
'user_id' => 13,
'link' => $request->input('link'),
'custom_comments' => $request->input('custom_comments'),
]);
if(is_null($order->api_order_id)) {
$order->remains = $order->quantity;
$order->start_counter = '0';
$order->save();
$admin = User::where(['id' => '1000'])->firstOrFail();
}
// If preferred API is set then dispatch order to reseller panel
if (!is_null($package->preferred_api_id)) {
event(new OrderPlaced($order));
}
Session::flash('alert', __('messages.order_placed'));
Session::flash('alertClass', 'success');
return redirect('/new-order');
}
public function APIStoreOrder(Request $request)
{
$response = [
'errors' => ''
];
$validator = Validator::make($request->all(), [
'package_id' => 'required|numeric',
'quantity' => 'required|numeric',
'link' => 'required',
]);
if ($validator->fails()) {
$response['errors'] = $validator->errors()->all();
return response()->json($response);
}
$package = Package::findOrfail($request->input('package_id'));
$quantity = $request->input('quantity');
// if quantity is less than minimum
if ($quantity < $package->minimum_quantity) {
$response['errors'] = ['Please specify at least minimum quantity.'];
return response()->json($response);
}
// if quantity is greater than maximum
if ($quantity > $package->maximum_quantity) {
$response['errors'] = ['Please specify less than or equal to maximum quantity'];
return response()->json($response);
}
// Custom comments count validation
if ($package->custom_comments) {
$commnets = $request->input('comments');
if ($commnets != '') {
$commnets_arr = preg_split('/\n/', $commnets);
$total_comments = count($commnets_arr);
// If greator then quantity
if ($total_comments > $quantity) {
$response['errors'] = ['You have added more comments than required quantity'];
return response()->json($response);
}
// if less then quantity
if ($total_comments < $quantity) {
$response['errors'] = ['You have added less comments than required quantity'];
return response()->json($response);
}
}
}
// Calculate Price
// Calculate Price
$package_price = $package->price_per_item;
// Order price to .00 decimal points
$price = (float)$package_price * $quantity;
$price = number_format($price, 2, '.', '');
// check if user have enough funds to make an order
$custom_comments = '';
// if package have custom comments option
if ($package->custom_comments) {
$custom_comments = preg_replace("/\r\n|\r|\n/", PHP_EOL, $request->input('comments'));
}
$order = Order::create([
'price' => $price,
'quantity' => $quantity,
'package_id' => $package->id,
'user_id' => 13,
'api_id' => $package->preferred_api_id,
'link' => $request->input('link'),
'source' => 'API',
'custom_comments' => $custom_comments
]);
// delete errors key
unset($response['errors']);
$response['order'] = $order->id;
// Deduct user funds which he has used
if(is_null($order->api_order_id)) {
$order->remains = $order->quantity;
$order->start_counter = '0';
$order->save();
}
// If preferred API is set then dispatch order to reseller panel
if (!is_null($package->preferred_api_id)) {
event(new OrderPlaced($order));
}
return response()->json($response);
}
public function APIGetOrderStatus(Request $request)
{
$response = [
'errors' => ''
];
$order = Order::where(['id' => $request->input('order'), 'user_id' => 13])->first();
if (is_null($order)) {
$response['errors'] = ['Order Not found'];
return response()->json($response);
} else {
// delete errors key
unset($response['errors']);
$response['status'] = $order->status;
$response['start_counter'] = $order->start_counter;
$response['remains'] = $order->remains;
}
return response()->json($response);
}
public function getPackages($service_id)
{
$packages = Package::where(['service_id' => $service_id, 'status' => 'ACTIVE'])->get();
$userPackagePrices = UserPackagePrice::where(['user_id' => 13])->pluck('price_per_item', 'package_id')->toArray();
return view('buy.partial-packages', compact(
'packages',
'userPackagePrices'
));
}
}
Мои адреса в routs / web.php:
Route :: get ('/ order-new', 'BuyController @ newOrder');
Route :: get ('/ service / get-packages / {service_id}', 'BuyController @ getPackages');
Маршрут :: пост ( '/ заказ новый', 'BuyController @ магазин');
Коды моих страниц в папке views:
buy \ new.blade.php:
@extends('layouts.app')
@section('content')
<div class="row">
<!-- left column -->
<div class="col-md-3 pull-center"></div>
<div class="col-md-6 pull-center">
@if(Session::has('alert'))
<div>
<div class="alert alert-{{ Session::get('alertClass') }} alert-dismissible">
<button type="button" class="close pull-left" data-dismiss="alert" aria-hidden="true">×</button>
{{ Session::get('alert') }}
</div>
</div>
@endif
<!-- general form elements -->
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">ثبت سفارش جدید</h3>
</div>
<form
role="form"
method="POST"
action="{{ url('/order-new') }}">
{{ csrf_field() }}
<fieldset>
<div class="box-body">
<div class="form-group">
<label for="service_id" class="control-label">Service</label>
<select name="service_id"
id="service_id"
class="form-control"
style="direction:rtl; text-align:right;font-size:12px"
>
<option value="">
Select service
</option>
@if( ! $services->isEmpty() )
@foreach( $services as $service)
<option value="{{ $service->id }}"> {{ $service->name }}</option>
@endforeach
@endif
</select>
@if ($errors->has('service_id'))
<span style="color:red">
<strong>{{ $errors->first('service_id') }}</strong>
</span>
@endif
</div>
<div class="form-group">
<label for="package_id" class="control-label">Package</label>
<select name="package_id"
id="package_id"
class="form-control"
style="direction:rtl; text-align:right;font-size:12px" >
<option value="">Select the service fisrt</option>
</select>
@if ($errors->has('package_id'))
<span style="color:red">
<strong>Eror
</strong>
</span>
@endif
</div>
<div class="form-group">
<label for="description" class="control-label">@lang('forms.description')</label>
<textarea name="description"
id="description"
rows="5"
style="height: 150px; text-align:right; direction:rtl;font-size:12px"
class="form-control" readonly></textarea>
</div>
<div class="form-group">
<label for="link" class="control-label">@lang('forms.link')</label>
<input name="link"
id="link"
value="{{ old('link') }}"
type="text"
class="form-control"
placeholder=""
style="text-align:left; direction:ltr;font-size:12px"
>
@if ($errors->has('err.link'))
<span class="help-block">
<strong>Error
</strong>
</span>
@endif
</div>
<div class="form-group">
<label for="quantity" class="control-label">@lang('forms.quantity')</label>
<input name="quantity"
id="quantity"
type="text"
value="{{ old('quantity') }}"
class="form-control"
data-validation-allowing="range[1;100]"
style="text-align:left; direction:ltr;font-size:12px"
onkeyup="javascript:this.value=addComma(this.value);"/>
@if ($errors->has('quantity'))
<span style="color:red">
<strong>{{ Verta::persianNumbers($errors->first('quantity')) }}</strong>
</span>
@endif
<span class="help-block">
<span class="label label-default">@lang('forms.minimum_quantity') : <span id="min-q">0</span></span> <span class="label label-default">@lang('forms.maximum_quantity') : <span
id="max-q">0</span></span>
</span>
</div>
<div class="form-group">
<p>@lang('forms.price_total') <span id="order_total">0</span> $ </p>
<p id="not-enough-funds" style="display:none;color:red">@lang('forms.order_amount_exceed')</p>
</div>
<div class="form-group{{ $errors->has('description') ? ' has-error' : '' }}" id="custom-comments-div" style="display: none">
<label for="custom_comments" class="control-label">@lang('forms.custom_comments')</label>
<textarea
class="form-control"
id="custom_comments"
style="height: 150px; text-align:right; direction:rtl;font-size:12px"
name="custom_comments"
>{{old('custom_comments')}}</textarea>
@if ($errors->has('custom_comments'))
<span style="color:red">
<strong>{{ $errors->first('custom_comments') }}</strong>
</span>
@endif
</div>
<div class="form-group">
<button type="submit" id="btn-proceed" class="btn btn-primary">@lang('buttons.place_order')</button>
</div>
</div></fieldset>
</form>
</div>
</div>
</div>
@endsection
@push('scripts')
<script>
var userFunds = '1000000';
function number_3_3 (num, sep){
var number = typeof num === "number"? num.toString() : num,
separator = typeof sep === "undefined"? ',' : sep;
return number.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1"+separator);
}
function addComma(Num) {
Num += '';
Num = Num.replace(',', ''); Num = Num.replace(',', ''); Num = Num.replace(',', '');
Num = Num.replace(',', ''); Num = Num.replace(',', ''); Num = Num.replace(',', '');
x = Num.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1))
x1 = x1.replace(rgx, '$1' + ',' + '$2');
return x1 + x2;
}
$(function () {
$('#service_id').change(function () {
var service_id = $(this).val();
if (service_id !== '') {
resetValues();
$.ajax({
url: baseUrl + '/service/get-packages/' + service_id,
type: "GET",
success: function (packages) {
$('#package_id').html(packages);
}
});
}
});
// On select display minimum quantity of package
$('#package_id').change(function () {
var sel = $('#package_id option:selected');
if (sel.val() != '') {
$('#min-q').html(sel.data('min'));
$('#max-q').html(sel.data('max'));
$('#description').text(sel.data('description'));
Min = sel.data('min').replace(",", "");
Max = sel.data('max').replace(",", "");
$('#quantity').attr('data-validation-allowing', 'range[' + Min + ';' + Max + ']');
$('#link');
if (sel.data('comments') == 1) {
$('#custom-comments-div').show();
$('#quantity')
.val(0)
.attr('readonly', true);
} else {
$('#custom-comments-div').hide();
$('#quantity').removeAttr('readonly');
}
}
});
$('#custom_comments').on('keyup', function () {
var text = $(this).val();
var lines = text.split(/\r|\r\n|\n/);
var q = lines.length;
$('#quantity').val($.trim(q)).replace(".","");
var sel = $('#package_id option:selected');
var orderTotal = 0;
if (q > 0) {
var price_per_item = sel.data('peritem');
orderTotal = q * price_per_item;
}
$('#order_total').text(number_3_3(orderTotal.toFixed(2).replace(".", "{{ getOption('currency_separator') }}").replace(".00","")));
if (orderTotal > userFunds) {
$('#not-enough-funds').show();
} else {
$('#not-enough-funds').hide();
}
});
$('#quantity').on('keyup', function () {
var sel = $('#package_id option:selected');
var orderTotal = 0;
var q = $(this).val().replace(",","");
if (q > 0) {
var price_per_item = sel.data('peritem');
orderTotal = q * price_per_item;
}
$('#order_total').text(number_3_3(orderTotal.toFixed(2).replace(".", "{{ getOption('currency_separator') }}").replace(".00","")));
if (orderTotal > userFunds) {
$('#not-enough-funds').show();
} else {
$('#not-enough-funds').hide();
}
});
});
function resetValues() {
$('#order_total').text(0);
$('#description').text('');
$('#min-q').html(0);
$('#max-q').html(0);
}
</script>
@endpush
buy \partal-packages.blade.php:
@if( ! $packages->isEmpty() )
<option value="">Please select package</option>
@foreach( $packages as $package)
@php
$price = isset($userPackagePrices[$package->id]) ? $userPackagePrices[$package->id] : $package->price_per_item;
@endphp
<option value="{{ $package->id }}"
data-min="{{ number_format($package->minimum_quantity,0,'',',')}}"
data-max="{{ number_format($package->maximum_quantity,0,'',',') }}"
data-comments="{{ $package->custom_comments}}"
data-description="{{ Verta::persianNumbers($package->description)}}"
data-peritem="{{ $price }}">
{{ $package->name . ' ---' }} Price per 1000 items: {{ number_format($price * getOption('display_price_per'),0, getOption('currency_separator'), ',').' $') }}
</option>
@endforeach
@endif