Подключаю к API Онлайн платежи по карте, столкнулся с проблемкой которую даже не знаю куда копать.
Суть в чём:Выбрали товар на сайте -> закинули в корзину -> выбрали в корзине способ оплаты "Банковская карта" -> Вас перекинуло для заполнения карты банковской к плательщику -> Вы заполнили все данные, нажали отправить, тут вдруг ошибка:
ERROR - FUNCTION - callback; MESSAGE - $_SERVER["REQUEST_METHOD"] !== "POST";
Как я понял, ругается что не запроса
POST
На шаге где "Выбрали способ оплаты" это кнопка уже подвязана на данные отправки.
Сам код где в Form стоит POST:
$button = '<form method="POST" action="'.$action.'">'
.'<input type="hidden" name="url" value="'.$url.'"/>'
.'<input type="hidden" name="token" value="'.$token.'"/>'
.'<input type="hidden" name="accountNo" value="'.$accountNo.'" />'
.'<input type="hidden" name="Expiration" value="" />'
.'<input type="hidden" name="amount" value="'.$amount.'" />'
.'<input type="hidden" name="currency" value="'.$currency.'" />'
.'<input type="hidden" name="info" value="'.$info.'"/>'
.'<input type="hidden" name="ReturnUrl" value="'.$return_url.'"/>'
.'<input type="hidden" name="FailUrl" value="'.$fail_url.'"/>'
.'<input type="hidden" name="Language" value="" />'
.'<input type="hidden" name="SessionTimeoutSecs" value="'.$sessionTimeoutSecs.'" />'
.'<input type="submit" class="checkout_button" name="submit_button" value="'.$button_text.'" />'
.'</form>';
При просмотре в логах видно что заполнилось:
<form method="POST" action="https://avtogalant.by/payment/ExpressPayCard/callback.php">
<input type="hidden" name="url" value="https://api.express-pay.by/v1/cardinvoices?token=dafe259fab52400f86c6e46073bea4c3"/>
<input type="hidden" name="token" value="dafe259fab52400f86c6e46073bea4c3"/><input type="hidden" name="accountNo" value="376" />
<input type="hidden" name="Expiration" value="" /><input type="hidden" name="amount" value="542,40" />
<input type="hidden" name="currency" value="933" />
<input type="hidden" name="info" value="Оплата заказа номер 376 в интернет-магазине https://avtogalant.by"/>
<input type="hidden" name="ReturnUrl" value="https://avtogalant.by/payment/ExpressPayCard/callback.php?result=success&accountno=376"/>
<input type="hidden" name="FailUrl" value="https://avtogalant.by/payment/ExpressPayCard/callback.php?result=fail&accountno=376"/>
<input type="hidden" name="Language" value="" />
<input type="hidden" name="SessionTimeoutSecs" value="700" />
<input type="submit" class="checkout_button" name="submit_button" value="Перейти к оплате" />
</form>;
При этом когда банковскую карту вводить на стороннем сайте по API нажать на кнопку Оплатить, тогда ошибка только..
Подскажите куда копать, уже устал, ругается на это:
else if($_SERVER['REQUEST_METHOD'] === 'POST')
{
$logs->log_info('callback','$_SERVER["REQUEST_METHOD"] === "POST"');
callbackPost($logs,$_POST);
}
else
{
$logs->log_error('callback','$_SERVER["REQUEST_METHOD"] !== "POST"');
fail();
}
Где fail();:
function fail($logs)
{
$logs->log_info('fail', 'starting fail function');
//Вывести данные пользователю
$message = '<div style="text-align:center;">
<div style="color:#D1001D; font-size:20px; font-weight:bold; padding-bottom:15px;">При выполнении запроса произошла непредвиденная ошибка. Пожалуйста, повторите запрос позже или обратитесь в службу технической поддержки магазина</div>
</div>';
$logs->log_info('fail','display result');
$expressPayView = new ExpressPayCardView();
$data['message'] = $message;
//Вывод сообщения в шаблон
$expressPayView->design->assign('data', $data);
print $expressPayView->fetch();
}
Где callbackPost:
function callbackPost($logs,$data)
{
$url = $data['url'];
$token = $data['token'];
$accountNo = $data['accountNo'];
$expiration = $data['Expiration'];
$amount = $data['amount'];
$currency = $data['currency'];
$info = $data['info'];
$return_url = $data['ReturnUrl'];
$fail_url = $data['FailUrl'];
$language = $data['Language'];
$sessionTimeoutSecs = $data['SessionTimeoutSecs'];
$expirationdate = '';
if(!isset($url) || $url == '' ){
$logs->log_error('callbackPost','$url is null');
return;
}
$logs->log_info('callbackPost','retrieving data from a POST request; url - '.$url.'; accountNo - '.$accountNo.'; expiration - '.$expiration.'; amount - '.$amount
.'; currency - '.$currency.'; info - '.$info.'; return_url - '.$return_url.' fail_url - '.$fail_url.'; language - '.$language
.'; sessionTimeoutSecs - '.$sessionTimeoutSecs.'; expirationdate - '.$expirationdate);
$response = addInvoice($url,$accountNo,$expiration,$amount,$currency,$info,$return_url,$fail_url,$language,
$sessionTimeoutSecs,$expirationdate);
print("<br/>");
$logs->log_info('callbackPost','Received response from the server; response - '.$response);
try {
$response = json_decode($response, true);//Преобразование ответа из json в array
$logs->log_info('callbackPost','converting data from json to array : RESPONSE - '.implode(',',$response));
} catch(Exception $e) {
$logs->log_error('callbackPost', "Fail to parse the server response; RESPONSE - " . $response);
$logs->notify_fail($response);
}
if(isset($response['ErrorCode'])){
$logs->log_error('callbackPost', 'error response; message - ' . $response->Error['Message']);
fail($logs);
return;
}
$Okay = new Okay();
$order = $Okay->orders->get_order(intval($accountNo));
$payment_method = $Okay->payment->get_payment_method($order->payment_method_id);
$settings = $Okay->payment->get_payment_settings($order->payment_method_id);
$form_url = (($settings['test_mode'])? $settings['url_sandbox_api'] : $settings['url_api'])
.'/v1/cardinvoices/'.$response['CardInvoiceNo'].'/payment?token='.$token;
$logs->log_info('callbackPost','getting url - '.$form_url);
$response = '';
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $form_url);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
} catch (Exception $e) {
$logs->log_error_exception('callbackPost', 'Get response; RESPONSE - ' . $response, $e);
fail($logs);
return;
}
$logs->log_info('callbackPost', 'Get response; RESPONSE - ' . $response);
try {
$response = json_decode($response, true);
} catch (Exception $e) {
$logs->log_error_exception('callbackPost', 'Get response; RESPONSE - ' . $response, $e);
}
if(isset($response['ErrorCode'])){
$logs->log_error('callbackPost', 'Error response; RESPONSE - ' . $response['ErrorMessage']);
fail($logs);
return ;
}
$returnUrl = str_replace("https://192.168.10.95","https://192.168.10.95:9090",$response['FormUrl']);
$message = '<script>window.location.replace("'.$returnUrl.'");</script>'
.'<p>Если вы не были перенаправлены нажмите <a href="'.$returnUrl.'">здесь</a></p>';
success($message, $logs);
}