@ART4

Method Post, нет отправки почему?

Подключаю к 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);
}
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы