Я действительно новичок в реализации Ajax в Laravel Интеграция лезвий и razorpay. Я отправил информацию о продукте из функции контроллера bill
по почте на страницу оплаты. После успешной оплаты я хочу отправить сведения о продукте в функцию dopayment
и сохранить детали заказа в бэкэнд. Когда я пытаюсь отправить детали, либо получаю ошибку $ products, я получаю, что htmlspecialchars () ожидает, что параметр 1 будет строка, массив, заданный, когда я положил $product
направленно в ajax данные или неверный аргумент для foreach в Laravel для json ответа, когда я кодирую $ product с помощью json_encode($product)
и отправляю его в данные ajax.
счет функции контроллера
public function bill(Request $request){
$input = $request->all();
return view('cart/checkout')->with('product' , $request->product)
->with('subtotal' , round($request->subtotal));
}
функция доплаты
public function dopayment(Request $request) {
//Input items of form
$input = $request->all();
$product = $request->product;
//if i use foreach here i get the error invalid argument suppy for foreach
print_r($product);
exit;
}
страница просмотра
@extends('app.app')
@section('content')
<div id="main-content">
<div class="container clear">
<div class="panel-body" style="border: 1px solid #ddd;">
<form id="rzp-footer-form" action="{!!route('dopayment')!!}" method="POST" style="width: 100%; text-align: center" >
@csrf
<a href="#">
<img src="{{asset('/img/amcor.JPG')}}" />
</a>
<br/>
<p><br/>Price: {{ $subtotal }} INR </p>
<input type="hidden" name="amount" id="amount" value="{{ $subtotal }}"/>
<div class="pay">
<button class="razorpay-payment-button btn filled small" id="paybtn" type="button">Pay with Razorpay</button>
</div>
</form>
<br/><br/>
<div id="paymentDetail" style="display: none">
<center>
@foreach($product as $input => $details)
<input type="text" id="name" name="name" value="{{ json_decode($details)->name}}">
@endforeach
<div>paymentID: <span id="paymentID" name="txn_id"></span></div>
<div>paymentDate: <span id="paymentDate" name="date"></span></div>
</center>
</div>
</div>
</div>
</div>
<script>
$('#rzp-footer-form').submit(function (e) {
var button = $(this).find('button');
var parent = $(this);
button.attr('disabled', 'true').html('Please Wait...');
$.ajax({
method: 'get',
url: this.action,
data: $(this).serialize(),
complete: function (r) {
console.log('complete');
console.log(r);
}
})
return false;
})
</script>
<script>
function padStart(str) {
return ('0' + str).slice(-2)
}
function demoSuccessHandler(transaction) {
// You can write success code here. If you want to store some data in database.
$("#paymentDetail").removeAttr('style');
$('#paymentID').text(transaction.razorpay_payment_id);
var paymentDate = new Date();
$('#paymentDate').text(
padStart(paymentDate.getDate()) + '.' + padStart(paymentDate.getMonth() + 1) + '.' + paymentDate.getFullYear() + ' ' + padStart(paymentDate.getHours()) + ':' + padStart(paymentDate.getMinutes())
);
$.ajax({
method: 'post',
url: "{!!route('dopayment')!!}",
dataType:"json",
data: {
"_token": "{{ csrf_token() }}",
"product": "{{ json_encode($productcode,JSON_FORCE_OBJECT) }}",
"Company": "{{ $company}}",
"Address": "{{$address}}",
"Contact": "{{$contact}}",
"razorpay_payment_id": transaction.razorpay_payment_id
},
complete: function (r) {
console.log('complete');
console.log(r);
}
})
}
</script>
<script>
var options = {
key: "{{ env('RAZORPAY_KEY') }}",
amount: '{{ $subtotal}}00',
name: 'AMCOR RAZORPAY',
description: 'AMCOR INTERNATIONAL',
image: 'https://i.imgur.com/n5tjHFD.png',
handler: demoSuccessHandler
}
</script>
<script>
window.r = new Razorpay(options);
document.getElementById('paybtn').onclick = function () {
r.open()
}
</script>
@endsection
функции маршрутов
Route::post('bill', 'RazorpayController@bill')->name('pay');
Route::post('dopayment', 'RazorpayController@dopayment')->name('dopayment');