Добрый вечер Нужна помощь спецов Вопрос такой: Необходимо отправить 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: $array = array( 'field1' => 'value1', 'field2' => 'value2' ); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array, '', '&')); --- Добавлено --- не болтайте ерундой... никаких сертификатов в форме нет --- Добавлено --- Вы должны понимать принцип работы веба... азы! 1) Форма передает данные куда-то .... в вашем случае пусть в какой то файл - который вы первым описали ...пусть sender.php он будет 2) Cобираете там данные какие вам надо из формы... обращаясь с гл. супермассиву $_POST, например $_POST['sum']; если там есть все что нужно то возможно так PHP: curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST, '', '&')); 3) Если банк в теле post запроса ждет json - то возможно так PHP: curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($_POST)); и cURLом отправляете в банк, так как вам сказано сто ответ тоже в json - декодируете PHP: $response = curl_exec($ch); var_dump(json_decode($response));
вот теперь совсем не понял ((( у меня в форме указан апи <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)); ?>
чет где-то опять лажаю. Скрипт отрабатывает, но не выхватывает все значения из $POST эти значения подхватывает и передает 'AMOUNT' => $_POST['amount'], 'CURRENCY' => $_POST['currency'], а вот эти - нет 'MERCHANT_ORDER_ID' => $_POST['order'], 'DESCRIPTION' => $_POST['desc_order'] причем даже если я указываю принудительно, все равно не передает 'MERCHANT_ORDER_ID' => '123456789', 'DESCRIPTION' => 'какая-то фигня' --- Добавлено --- сорри, щас правила гляну )
Откуда у тебя скрипт берет значения $order $desc и другие? Где ты их определяешь? сделай print_r($_POST)
чудес не бывает - скрипт делает то что ему приказали, и получает то - что ему передали перед тем как послать курлом - посмотри что же ты передаешь curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($_POST)); зачем же готовить $array если передавать $_POST ?
amount - указывает пользователь currency - указывает пользователь order - по рандому - скрытое поле desc_order - в скрытом поле на форме --- Добавлено --- вот я уже хотел этот вопрос задать.... получается, что: Код (Text): curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($_POST)); должен выглядеть так: Код (Text): curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array)); правильно ?