У меня есть 2 формы в папке лезвия laravel. Одним из идентификаторов формы является платеж, который является исходной формой, собирающей информацию о пользователе. Эту форму я пытаюсь проверить и отправить во внешний js-файл. Я предоставлю форму ниже.
форма оплаты в блейд-файле:
Код: Выделить всё
@if ($errors->any())
[list]
@foreach ($errors->all() as $error)
[*]{{ $error }}
@endforeach
[/list]
@endif
@csrf
{{$keywords["Serving Method"] ?? __('Serving Method') }}
#
{{$keywords["Method"] ?? __('Method') }}
@foreach ($smethods as $sm)
@if(!empty($packagePermissions) && in_array($sm->name, $packagePermissions))
first)
checked
@elseif(old('serving_method') == $sm->value)
checked
@endif
data-gateways="{{$sm->gateways}}">
@php
$smname = str_replace(' ','_',$sm->name);
@endphp
[b]{{ $keywords[$smname] ?? __($sm->name) }}[/b]
{{ __($sm->note) }}
@else
first)
checked
@elseif(old('serving_method') == $sm->value)
checked
@endif
data-gateways="{{$sm->gateways}}">
@endif
@endforeach
@error('serving_method')
{{ convertUtf8($message) }}
@enderror
@includeIf('user-front.qrmenu.partials.home_delivery_form')
@includeIf('user-front.qrmenu.partials.pick_up_form')
@includeIf('user-front.qrmenu.partials.on_table_form')
{{$keywords["Order Notes"] ?? __('Order Notes') }}
{{$keywords["Order Summary"] ?? __('Order Summary') }}
@if (!empty($cart))
{{$keywords["Product"] ?? __('Product') }}
{{$keywords["Product Title"] ?? __('Product Title') }}
{{$keywords["Quantity"] ?? __('Quantity') }}
{{$keywords["Total"] ?? __('Total') }}
@foreach ($cart as $key => $item)
@php
$id = $item["id"];
if(session()->has('user_lang')){
$lang = App\Models\User\Language::where('code',session()->get('user_lang'))->where('user_id',getUser()->id)->first();
}else{
$lang = App\Models\User\Language::where('is_default',1)->where('user_id',getUser()->id)->first();
}
$product = Product::query()
->join('product_informations', 'product_informations.product_id', 'products.id')
->where('product_informations.language_id', $lang->id)
->where('products.user_id', $user->id)
->where('products.id', $id)
->first();
@endphp
[url={{ route(]slug, $product->product_id]) }}"
target="_blank">
[/url]
[url={{ route(]slug, $product->product_id]) }}"
target="_blank">
{{ strlen($product->title) > 27 ? mb_substr($product->title, 0, 27, 'UTF-8') . '...' : $product->title }}
@if (!empty($item["variations"]))
@php
$variations = $item['variations'];
$prokeywords = json_decode($product->keywords, true);
$addonkeywords = json_decode($product->addon_keywords, true);
$sessionLang = session()->get('user_lang');
@endphp
[b]{{$keywords["Variation"] ?? __("Variation")}}
:[/b]
@php
$variations = $item["variations"];
@endphp
@foreach ($variations as $vKey => $variation)
@php
$vname = $userCurrentLang->code . '_' . str_replace('_', ' ', $vKey);
$voption = $userCurrentLang->code . '_' . $variation['name'];
$variationName = isset($prokeywords['variation_name'][$vname]) ? $prokeywords['variation_name'][$vname] : '';
$optionName = isset($prokeywords['option_name'][$voption]) ? $prokeywords['option_name'][$voption] : '';
@endphp
@if(!empty($variationName))
{{ $variationName }}:
{{ $optionName }}
@if (!$loop->last)
,
@endif
@endif
@endforeach
[/url]
@endif
@if (!empty($item['addons']))
[b]{{$keywords["Addons"] ?? __("Addons") }}
:[/b]
@php
$addons = $item["addons"];
@endphp
@foreach ($addons as $addon)
@php
$addonkeywords = json_decode($product->addon_keywords, true);
if (!empty($sessionLang)) {
$aname = $sessionLang . '_' . $addon['name'];
} else {
$aname = $userCurrentLang->code . '_' . $addon['name'];
}
@endphp
{{ $addonkeywords['addon_name'][$aname] }}
@if (!$loop->last)
,
@endif
@endforeach
@endif
{{ $item['qty'] }}
{{ $userBe->base_currency_symbol_position == 'left' ? $userBe->base_currency_symbol : '' }}
{{ $item['total'] }}
{{ $userBe->base_currency_symbol_position == 'right' ? $userBe->base_currency_symbol : '' }}
window.userBe = "{{ json_encode($userBe) }}";
@endforeach
@else
{{$keywords["Cart is empty"] ?? __('Cart is empty!') }}
@endif
[url={{ route(]{{$keywords["Return to Website"] ?? __('Return to Website') }}[/url]
@includeIf('user-front.qrmenu.partials.order_total')
Код: Выделить всё
$.ajax({
url: "http://localhost:4000/api/cloverPay/getapikey",
type: "GET",
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
'Authorization': 'Bearer JSON.parse(window.userBe.replace(/"/g,'"')).token
},
success: function (result) {
setupCloverIframe(result.pakms);
},
error:function(data)
{
console.log('error ', data);
}
});
function setupCloverIframe(pakms) {
const clover = new Clover(pakms.apiAccessKey, {
merchantId: pakms.merchantId
});
const elements = clover.elements();
const styles = {
body: {
fontFamily: 'Roboto, Open Sans, sans-serif',
fontSize: '16px',
},
input: {
fontSize: '16px',
width: '80%',
},
};
const cardNumber = elements.create('CARD_NUMBER', styles);
const cardDate = elements.create('CARD_DATE', styles);
const cardCvv = elements.create('CARD_CVV', styles);
const cardPostalCode = elements.create('CARD_POSTAL_CODE', styles);
cardNumber.mount('#card-number');
cardDate.mount('#card-date');
cardCvv.mount('#card-cvv');
cardPostalCode.mount('#card-postal-code');
const cardResponse = document.getElementById('card-response');
const displayCardNumberError = document.getElementById('card-number-errors');
const displayCardDateError = document.getElementById('card-date-errors');
const displayCardCvvError = document.getElementById('card-cvv-errors');
const displayCardPostalCodeError = document.getElementById('card-postal-code-errors');
// Handle real-time validation errors from the card Element.
cardNumber.addEventListener('change', function (event) {
console.log(`cardNumber changed ${JSON.stringify(event)}`);
});
cardNumber.addEventListener('blur', function (event) {
console.log(`cardNumber blur ${JSON.stringify(event)}`);
});
cardDate.addEventListener('change', function (event) {
console.log(`cardDate changed ${JSON.stringify(event)}`);
});
cardDate.addEventListener('blur', function (event) {
console.log(`cardDate blur ${JSON.stringify(event)}`);
});
cardCvv.addEventListener('change', function (event) {
console.log(`cardCvv changed ${JSON.stringify(event)}`);
});
cardCvv.addEventListener('blur', function (event) {
console.log(`cardCvv blur ${JSON.stringify(event)}`);
});
cardPostalCode.addEventListener('change', function (event) {
console.log(`cardPostalCode changed ${JSON.stringify(event)}`);
});
cardPostalCode.addEventListener('blur', function (event) {
console.log(`cardPostalCode blur ${JSON.stringify(event)}`);
});
// TODO: Register event handlers
const form = document.getElementById('payment-form');
form.addEventListener('submit', function (event) {
event.preventDefault();
clover.createToken()
.then(function (result) {
if (result.errors) {
Object.values(result.errors).forEach(function (value) {
console.log(value);
});
} else {
let un = window.location.pathname.split('/')[1];
$.post('/dinengo/processOrderAndPayment/' + result.token + '/' + un, function (response) {
// handle your response here
$('#payment')[0].submit();
alert("result.token");
});
}
}).catch(function (data) {
console.log(data);
});
});
const paymentReqData = {
country: 'US',
currency: 'usd',
total: {
label: 'Demo total',
amount: 1099,
},
requestPayerName: true,
requestPayerEmail: true,
};
const paymentRequest = clover.paymentRequest(paymentReqData);
const paymentRequestButton = elements.create('PAYMENT_REQUEST_BUTTON', {
paymentReqData
});
// Check the availability of the Payment Request API first.
paymentRequest.canMakePayment().then(function (result) {
if (result) {
paymentRequestButton.mount('#payment-request-button');
} else {
document.getElementById('payment-request-button').style.display = 'none';
}
});
paymentRequestButton.addEventListener('paymentMethod', function (ev) {
alert(JSON.stringify(ev));
})
// Submit the form with the token ID.
function cloverTokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'cloverToken');
hiddenInput.setAttribute('value', token);
form.appendChild(hiddenInput);
alert(token);
// Submit the form
// form.submit();
}
function processCloverIframPayment(event) {
event.preventDefault();
debugger;
console.log('in button click ', event);
clover.createToken()
.then(function (result) {
if (result.errors) {
Object.values(result.errors).forEach(function (value) {
console.log(value);
});
} else {
debugger;
let un = window.location.pathname.split('/')[1];
$.post('/dinengo/processOrderAndPayment/' + result.token + '/' + un, function (response) {
// handle your response here
//alert(result.token);
$('#payment').submit();
});
}
}).catch(function (data) {
console.log(data);
});
}
}
Хотя я могу щелкнуть форму оплаты из внешнего js, Мне нужен способ сначала проверить, что форма оплаты действительна, обработать платеж, а затем успешно отправить форму оплаты laravel.
Примечание: в настоящее время, когда $('#pay').submit (); вызывается, он возвращает и, как мне кажется, возникает ошибка из-за того, что у него больше нет контекста. Может ли кто-нибудь помочь мне решить эту проблему, а также понять причину и решение?
Кроме того, обработка ошибок должна быть без изменений. Если существует ошибка, необходимо установить эту ошибку, как это было ранее при отправке формы.
Подробнее здесь: https://stackoverflow.com/questions/791 ... cript-file