Перенаправление с данными POST - PullRequest
3 голосов
/ 07 июля 2011

Я работаю над корзиной покупок с несколькими вариантами оплаты, используя разные API.

Я хочу, чтобы пользователь выбирал, какой вариант оплаты использовать, и отображается соответствующая форма.

При отправке формы поля, касающиеся адреса и т. Д., Должны быть сохранены в моей БД, а поля, касающиеся оплаты, отправляются с POST обработчику платежей api.

Важно, чтобы пользователь нажимал только один раз, чтобы сохранитьin-db нужно сжать между щелчком на кнопке отправки и отправкой данных на сервер платежей.

Я подумал о перенаправлении, куда все данные помещаются и они сохраняются вБД и перенаправление на платежный сервер, НО, как мне перенаправить вместе с данными POST (GET не работает, к сожалению).

Ответы [ 4 ]

3 голосов
/ 07 июля 2011

Нельзя отправить традиционный заголовок Location: клиенту HTTP, чтобы выполнить перенаправление и включить данные POST.Вместо этого вы можете сделать следующее:

  • использовать запрос AJAX для получения правильного целевого URL
  • обновить действие формы с этим URL через JavaScript (в функции обратного вызова AJAX)
  • отправить форму
2 голосов
/ 07 июля 2011

Самое простое, что нужно сделать - это обработчик отправки формы в коде JavaScript, который сделает запрос AJAX POST для сохранения информации, связанной с клиентом.

  • Действие платежной формы должно указывать на платежный шлюз
  • Прикрепить JavaScript к событию отправки к форме оплаты
  • В обработчике отправки соберите всю информацию о клиенте (имя, адрес и т. Д.) И создайте AJAX POST на вашем сервере.
  • Убедитесь, что обработчик отправки возвращает false, чтобы POST еще не отправлялся на платежный шлюз
  • После успешного завершения AJAX POST отправьте форму оплаты с помощью JavaScript.

Это также спасает вас, поскольку вы можете контролировать, какие параметры отправлять на ваш сервер (номера кредитных карт / CVV клиента не следует отправлять на ваш сервер, если вы не сертифицированы для их обработки).

0 голосов
/ 09 сентября 2011

Попробуйте это

        $context = stream_context_create(array(
        'http' => array(
          'method'  => 'POST',
          'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
          'content' => http_build_query($_POST)
        ),
      )); 

    echo file_get_contents($url, false, $context);
0 голосов
/ 07 июля 2011

Если у вас установлено расширение PECL http (оно будет отображаться в phpinfo () как pecl_http), вы можете создать HTTP-запрос POST и выложить результаты после следующего шаблона:

// your DB code above here
$pay_request = new HttpRequest($remote_url, HTTP_METH_POST);
$pay_request->addPostFields($_POST);
$pay_request->send()->send();

Последняя строка не является опечаткой - запрос возвращает ответ, а затем ответ сбрасывается в выходной буфер.

...