Вход • Регистрация

Как обработать ответ на POST запрос?

  • 26 июня 2017 г. , редакция: 26 июня 2017 г.
  • Добрый день всем! Задача у меня следующая:
    на сайте создал форму с тремя полями (Номер заказа, Рубли, Копейки)... заполнив поля пользователь нажимает ОПЛАТИТЬ и далее должен перейти на страницу ввода реквизитов банковской карты, т.е. на страницу Эквайринга Сбербанка.

    Как это работает у Сбера:
    1. Нужно отправить POST запрос
    2. В ответ придет ОТВЕТ типа:
    Код
    {"orderId":"70906e55-7114-41d6-8332-4609dc6590f4","formUrl":"https://server/application_context/merchants/test/payment_ru.html?mdOrder=70906e55-7114-41d6-8332-4609dc6590f4"}


    Вот в этом ответе есть ссылка, по которой откроется нужная мне страница.


    Что сделано у меня:
    1. Добавлена форма обратной связи с соответствующими полями

    2. В файле feedback.action.php добавлен следующий код:
    Код

    if ($this->site_id == 48) {

    $customer_order = $this->diafan->filter($_POST, 'string', 'p34');
    $customer_price_rub = $this->diafan->filter($_POST, 'string', 'p35');
    $customer_price_kop = $this->diafan->filter($_POST, 'string', 'p36');

    $values = unserialize(DB::query_result("SELECT p.params FROM {payment} AS p WHERE p.id = 9"));

    $userName = $values["sber_login"];
    $password = $values["sber_password"];

    $customer_price_rub *= 100;
    $amount = $customer_price_rub + $customer_price_kop;

    $returnUrl = 'http://site/ok';
    $failUrl = 'http://site/fail';

    $orderNumber = $customer_order;

    // Http POST request
    $url = (!empty($values['sber_test']) ? 'https://3dsec.sberbank.ru/payment/rest/register.do' : 'https://securepayments.sberbank.ru/payment/rest/register.do');

    $params = array(
    'userName' => $userName ,
    'password' => $password ,
    'amount' => $amount ,
    'orderNumber' => $orderNumber ,
    'returnUrl' => $returnUrl ,
    'failUrl' => $failUrl,
    );

    // Param string
    $postdata = "";
    foreach ( $params as $key => $value ) $postdata .= "&".rawurlencode($key)."=".rawurlencode($value);

    // Do POST
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, 1 );
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $curl_result = curl_exec ($ch);
    curl_close($ch);

    $this->result["redirect"] = $curl_result;

    }


    3. В итоге по нажатию ОПЛАТИТЬ в форме отправляется POST запрос и в адресной строке появляется ответ:
    Код
    http://site.ru/%7B"orderId":"46cf9a22-5ded-4e93-ac8a-3b5ff18e6015","formUrl":"https://3dsec.sberbank.ru/payment/merchants/site/payment_ru.html?mdOrder=46cf9a22-5ded-4e93-ac8a-3b5ff18e6015"}


    ВОПРОС: как мне в итоге по нажатию ОПЛАТИТЬ не ответ такой в адресной строке видеть, а чтобы переход был на ссылку, которая в ответе приходит?

    P.S. Просьба подсказать конкретно, что нужно сделать, чтобы решить эту задачу, а не наводящие подсказки :)... либо готов оплатить данное решение задачи. Не пишу в Проекты, т.к. туда либо не смотрят, либо игнорят нестандартные задачи.
    • 26 июня 2017 г.
    • Вам нужно из ответа в json-формате узнать результирующий url.

      Примерно так
      $response = json_decode($curl_result)
      затем редирект на $response['formUrl']

Новости

  • 24 апреля, среда
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 
  • 15 декабря 2023 г.
  • Подводим итоги 2023 года. Выпустили новую сборку DIAFAN.CMS 7.1.1, вводим новые тарифы на аренду сайта и коммерческую поддержку и автообновления с января 2024 г., строим планы на будущий год.