JSON POST-запрос на php

Добрый вечер
Нужна помощь спецов
Вопрос такой: Необходимо отправить 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:
  1. $array = array(
  2.     ‘field1’    => ‘value1’,
  3.     ‘field2’ => ‘value2’
  4. );      
  5.  
  6. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array, », ‘&’));

— Добавлено —

не болтайте ерундой… никаких сертификатов в форме нет
— Добавлено —
Вы должны понимать принцип работы веба… азы!

1) Форма передает данные куда-то …. в вашем случае пусть в какой то файл — который вы первым описали …пусть sender.php он будет
2) Cобираете там данные какие вам надо из формы… обращаясь с гл. супермассиву $_POST, например $_POST[‘sum’];
если там есть все что нужно то возможно так

PHP:
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST, », ‘&’));

3) Если банк в теле post запроса ждет json — то возможно так

PHP:
  1. curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Type:application/json’));
  2.  
  3. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($_POST));

и cURLом отправляете в банк,
так как вам сказано сто ответ тоже в json — декодируете

PHP:
  1. $response = curl_exec($ch);
  2. var_dump(json_decode($response));
 

сертификат не в форме, лежит на сервере, в том же каталоге с веб-страницей

 

У тебя форма на какой адрес данные отправляет?

 

на 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):
  1. curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Type:application/json’));
  2. 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));

?>

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *