我正在做一个Laravel PHP项目,通过这个项目,我接触到一个支付API来检查用户是否支付了,并将用户重定向到一个支付确认页面。
默认情况下,支付网关的支付状态为0。当用户付款时,状态变为1。用户点击网站上的付款按钮后,我需要延迟PHP代码的执行(让用户有时间通过他/她的手机进行交易付款)。
15秒后,我联系支付网关检查状态是否更改为1,如果是,则将用户重定向到支付确认页面。
我试着睡觉,但它不起作用...我还测试了使用沙盒帐户,而支付,但它不是重定向后,预期的15秒。
根据支付状态从API获取的JSON对象示例
//When not paid
{
status: 0,
message: 'Not Paid',
amount: 20
}
//When paid
{
status: 1,
message: 'Paid',
amount: 20
}
//When cancelled
{
status: 2,
message: 'Cancelled',
amount: 20
}
AJAX代码用于将数据发送到控制器
<script type="text/javascript">
//Mpesa Payment code
$('.mpesa').on('click', function () {
//Gets the MPESA type
var type = $('.mpesa').prop('id');
var quote = $('#quote').val();
var phone = $('#phone').val();
//Converts to a JSON object
var type ={
'type': type,
'quote' : quote,
'phone' : phone,
};
console.log(type);
$.ajax({
//Contains controller of payment
type: 'POST',
url: 'paymentFinal',
data: JSON.stringify(type),
contentType: 'application/json',
dataType: "json",
success: function success(response) {
window.location.href="success" ;
},
error: function error(data) {
console.log(data);
}
});
});
//End Payment API
Laravel Controller am posting data to from above AJAX code
public
function payFinal(Request $request)
{
// dd($request->all());
//Convert to a JSON object the request
$data =(object)$request->all();
//Session get of some data fetched from another controller
$quote = $request->session()->get('quoteID');
//Store all the data in an array
$all = array(
'phone' => $data->phone,
'quote_id' => $quote,
'payment_type' => $data->type,
);
//Posts data to Payment Checkout using curl
$response = $this->global_Curl($all, 'api/payment/checkout');
//dd($response);
//Get checkoutresponseId from response
$checkID = $response->data->CheckoutRequestID;
//Payment type
$type = $data->type;
$data = array(
'payment_reference' => $checkID,
'payment_type' => $type
);
//1st call to the Payment API before sleep
$paySt = $this->global_Curl($data, 'api/payment/status')->data;
sleep(15);
//Second call to the API after sleep to check if status has changed
$payStat = $this->global_Curl($data, 'api/payment/status')->data;
if($payStat->status == '1'){
return 'true';
}
}
我正在使用新的AJAX代码
$('.mpesa').on('click', function () {
setInterval(function() {
alert('clicked');
//Gets the MPESA type
var type = $('.mpesa').prop('id');
var quote = $('#quote').val();
var phone = $('#phone').val();
//Converts to a JSON object
var type ={
'type': type,
'quote' : quote,
'phone' : phone,
};
console.log(type);
$.ajax({
//Contains controller of payment
type: 'POST',
url: 'paymentFinal',
data: JSON.stringify(type),
contentType: 'application/json',
dataType: "json",
success: function success(response) {
if(response) {
window.location.href="success";
}
},
error: function error(data) {
console.log(data);
}
});
}, 15000); // Execute every 15 seconds
});
2条答案
按热度按时间ddarikpa1#
好吧,让我们把你的问题分解一下。首先,你想延迟你的AJAX代码每15秒执行一次。为此,您将AJAX Package 在
setInterval()
JavaScript方法中。所以它最终应该看起来像这样:接下来,您需要根据代码返回的状态执行一些操作。为此,您需要将AJAX方法的成功案例更改为如下内容:
这就是JavaScript的一面。对于PHP端,你可以删除它,因为你现在在前端处理间隔:
并将返回类型从字符串更改为布尔值:
你想让它做什么就做什么。
现在,给你的代码一些建议:
6tdlim6h2#
使用此睡眠(5);在Laravel控制器中