Я работаю над приложением Laravel, в котором я вызываю платежный шлюз, чтобы получить статус платежа от пользователя. Согласно документации шлюза, если я получу ответ 500, я должен продолжить использовать API максимум 5 раз, если ответ не изменится на 200, чтобы остановить транзакцию.
Я написал PHP-функцию curl, которая используется для доступа к шлюзу и получения ответа вместе со статусом (500 или 200). Я также написал код AJAX для отправки данных на внутренний контроллер
Как написать логику JS в коде AJAX, чтобы продолжать работать с API, если статус 500 максимум 6 раз?
AJAX-код, отправляющий данные на контроллер
<script type="text/javascript">
$('.mpesa').on('click', function () {
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,
};
$.ajax({
type:"POST",
url:"checkStat",
data:JSON.stringify(type),
contentType: "application/json",
cache:false,
success: function(data)
{
alert(data)
}
error: function error(data) {
alert('Error');
}
});
});
</script>
Файл маршрутов
Route::any( '/checkStat', 'B2CController@checkStat')->name('b2c.checkStat');
Контроллер
public function checkStat(Request $request){
//dd($request->all);
//convert to JSON string
$data =(object)$request->all();
//dd($data);
$ref = $data->payment_reference;
$type = $data->payment_type;
$data = array(
'payment_reference' => $ref,
'payment_type' => $type,
);
//dd($data);
//Set maximum execution time
ini_set('max_execution_time ', 75);
set_time_limit(75);
//Loop through the code 3 times
for($try=1; $try<=3; $try++) {
sleep(10);
$payStat = $this->global_Curl_payStat($data, 'api/payment/status')->data;
}
var_dump($payStat);
dd($payStat);
}
Функция Curl для вызова API, который вызывается в контроллере выше
public function global_Curl_payStat($data, $url, $try = 1)
{
//dd($_ENV['API_ENDPOINT_NGINX_IP'] . '/' . $url);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, ($_ENV['API_ENDPOINT_NGINX_IP'] . '/' . $url));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Prevents URL cache
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
//Fetch response
$response = curl_exec($ch);
//Get HTTP header status code
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//dd($statusCode, $response);
curl_close($ch);
return $response;
}