Добрый вечер
Нужна помощь спецов
Вопрос такой: Необходимо отправить POST-запрос на платежную систему (Запросы и ответы в API передаются в формате JSON. — цитата из инструкции)
Написал такой скрипт:
$url=»https://sandboxapi«;
$ch=curl_init();
$ch_post= array(
CURLOPT_URL=>$url.’/ping’,
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER =>TRUE,
CURLOPT_TIMEOUT =>10,
CURLOPT_SSLCERT =>’umit_life.p12′,
CURLOPT_SSLCERTTYPE => ‘P12’,
CURLOPT_SSLCERTPASSWD =>’W111111′,
);
curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
curl_setopt($ch,CURLOPT_USERPWD,»umit_life:b1111111″);
curl_setopt_array($ch,$ch_post);
$response = curl_exec($ch);
var_dump($response);выдает ошибку:
{«failure_type»:»error»,»order_id»:null,»failure_message»:»Invalid JSON»}
при этом на самой странице, где вписан этот php-скрипт появляется подозрительная надпись — bool(false)
Кто подскажет, где я накосячил ?
Возможно везде…
Но для начала, всё же надо что-то то отсылать в теле запроса, где это у вас? Нету…
<form action=»https://sandboxapi» name=»pay_form» method=»POST»>
<input type=»hidden» name=»AMOUNT» value=»<?php echo $amount ?>»/>
<input type=»hidden» name=»CURRENCY» value=»<?php echo $currency ?>»/>
<input type=»hidden» name=»MERCHANT_ORDER_ID» value='<?php echo $order ?>’/>
<input type=»hidden» name=»DESCRIPTION» value='<?php echo $desc ?>’/>
<button type=»submit» >Оплатить <?php echo $amount; echo $currency?> </button>
</form>данные по идее должны из этой формы браться…
P.S. я в этой теме совсем чайник, потому хочу разобраться на будущее. А рядом спросить не у кого (
Может не стоит прям с платёжных форм начинать? Азы какие то освоить?
Форма это форма, как в вашем случае она связана с первым кодом..??
У тебя и форма и запрос в одном файле?
Они в одном файле. Форма и скрипт. Вот и не могу понять, как они должны между собой связаться. Т.е. к прошлому банку (условия фигня, поэтому в другой ушел) подключался, там проще было, просто пост-запрос делал и все. А этот банк хочет вот именно JSON.
— Добавлено —да, в одном
1. Читайте внимательно инструкцию от банка. Смотрите их примеры
2. Если что-то непонятно — идем п. 1 и повторяем до ясности
гениальный ответ. спасибо за помощь. таких «специалистов» я уже в банке наслушался
ну тут телепатов тоже нема…. чего вам там надо, куда отправлять, какие условия … у каждого банка свои требования
Если бы был вопрос по php — тут помогли бы
Вопрос и стоит — Как сформировать нормально запрос в json на php и отправить его в api банка.
в запросе 4 параметра и сертификат авторизации, которые берутся из формы в этом же файле (веб-странице).
что упустил ? какую инфу еще нужно знать?я так понял, что этот скрипт отправляет только сертификат и авторизуется на сервере. Как ему втолкнуть данные, из полей формы ?
ну а попробовать посмотреть в интернетах как с cURL работают и POSt запросы шлют — религия не позволяет?
первая же ссылка даст что-то типа такого:
PHP:
‘field1’ => ‘value1’, ‘field2’ => ‘value2’ );— Добавлено —
не болтайте ерундой… никаких сертификатов в форме нет
— Добавлено —
Вы должны понимать принцип работы веба… азы!1) Форма передает данные куда-то …. в вашем случае пусть в какой то файл — который вы первым описали …пусть sender.php он будет
2) Cобираете там данные какие вам надо из формы… обращаясь с гл. супермассиву $_POST, например $_POST[‘sum’];
если там есть все что нужно то возможно такPHP:
3) Если банк в теле post запроса ждет json — то возможно так
PHP:
и cURLом отправляете в банк,
так как вам сказано сто ответ тоже в json — декодируетеPHP:
сертификат не в форме, лежит на сервере, в том же каталоге с веб-страницей
У тебя форма на какой адрес данные отправляет?
на api банка
если на апи банка форма что-то отправляет — то ваш файл с курлом — вообще не задействован
вот теперь совсем не понял (((
у меня в форме указан апи
<form action=»https://sandboxapi» name=»pay_form» method=»POST»>
и в скрипте указан апи.
$url=»https://sandboxapi«;
Или вообще убери адрес из поля action формы или вынеси курл в отдельный файл. А в поле экшен пропиши его адрес. Тогда данные попадут в запрос.
т.е. вот так ?
<body>
<?php
$url=»https://sandboxapi«;
$ch=curl_init();
$ch_post= array(
CURLOPT_URL=>$url.’/ping’,
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER =>TRUE,
CURLOPT_TIMEOUT =>10,
CURLOPT_SSLCERT =>’umit_life.p12′,
CURLOPT_SSLCERTTYPE => ‘P12’,
CURLOPT_SSLCERTPASSWD =>’W11111′,
);
curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
curl_setopt($ch,CURLOPT_USERPWD,»umit_life:b1111111″);
curl_setopt_array($ch,$ch_post);
$response = curl_exec($ch);
var_dump($response);
?>
<form name=»pay_form» method=»POST»>
<div class=»row»>
<input type=»hidden» name=»AMOUNT» value=»<?php echo $amount ?>»/>
<input type=»hidden» name=»CURRENCY» value=»<?php echo $currency ?>»/>
<input type=»hidden» name=»MERCHANT_ORDER_ID» value='<?php echo $order ?>’/>
<input type=»hidden» name=»DESCRIPTION» value='<?php echo $desc ?>’/><button type=»submit» «>Оплатить <?php echo $amount; echo $currency?> </button>
</div>
</body>
Теперь в курл нужно добавить:
Код (Text):
curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Type:application/json’)); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($_POST));только перед curl_exec
т.е. теперь вот такой скрипт
<?php$url=»https://sandboxapi«;
$ch=curl_init();
$ch_post= array(
CURLOPT_URL=>$url.’/ping’,
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER =>TRUE,
CURLOPT_TIMEOUT =>10,
CURLOPT_SSLCERT =>’umit_life.p12′,
CURLOPT_SSLCERTTYPE => ‘P12’,
CURLOPT_SSLCERTPASSWD =>’W111111′,
);
$array = array(
‘AMOUNT’ => $_POST[‘amount’],
‘CURRENCY’ => $_POST[‘currency’],
‘MERCHANT_ORDER_ID’ => $_POST[‘order’],
‘DESCRIPTION’ => $_POST[‘desc_order’]
);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Type:application/json’));
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($_POST));
curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
curl_setopt($ch,CURLOPT_USERPWD,»umit_life:b1111111″);
curl_setopt_array($ch,$ch_post);
$response = curl_exec($ch);
var_dump(json_decode($response));?>