Автоматическая отправка формы (cURL) - PullRequest
5 голосов
/ 07 апреля 2010

Я пишу форму для отправки данных в PayPal, и это прекрасно работает, я создаю форму со скрытыми полями и затем имею кнопку отправки, которая передает все в PayPal.

Однако, когда пользователь нажимает эту кнопку, я хочу сделать еще кое-что, например, изменить статус своей корзины в базе данных. Итак, я хочу иметь возможность выполнять некоторый код, когда они нажимают кнопку «Отправить», а затем публикуют данные в PayPal.

Я не хочу использовать для этого javascript.

Мой метод на данный момент использует cURL, форма отправляет обратно на текущую страницу, затем я проверяю данные $ _POST, выполняю другие мои команды, такие как обновление статуса корзины, а затем создаю команду curl и отправляю данные формы для PayPal. Теперь он успешно опубликован, но браузер не переходит на PayPal.

Сначала я просто извлекал результат в строке, а затем выводил его, и я мог видеть, что публикация прошла успешно, затем я установил для CURLOPT_FOLLOWLOCATION значение 1, предполагая, что это позволит браузеру перейти на paypal, но это не так Похоже, это что-то, взятое из PayPal и поместившее его на моей странице.

Правильно ли использовать cURL для этого? и если да, то как мне обойти эту проблему? Я хочу держаться подальше от javascript, так как корзина обновляется только пользователям, у которых включен javascript.

Код, который я использую для curl, приведен ниже, post_data - это массив, который я создал, а затем считал пары ключ-значение в post_string.

//Set cURL Options
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT,
  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_connection, CURLOPT_MAXREDIRS, 20);

//Set Data to be Posted
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);

//Execute Request
curl_exec($curl_connection);

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Возможно, попробуйте объединить CURL с оператором заголовка

<?php
header ("Location: https://www.paypal.com/"); 

Это может работать в зависимости от того, требуется ли браузеру передавать информацию о состоянии (сеансе) в PayPal. Эта информация о сеансе собирается в вашем вызове CURL, но, к сожалению, нет способа передать это в браузер. Так что если вам нужно поддерживать состояние, то это не сработает.

Curl работает на стороне сервера. Это не повлияет на ваш браузер. CURLOPT_FOLLOWLOCATION просто инструктирует CURL подчиняться, когда, например, PayPal отправляет ему заголовок, подобный указанному выше. Единственный способ проинструктировать браузер что-то сделать - это ответить HTTP-заголовком, как указано выше, или метатегом в своем HTML-ответе, например,

<META HTTP-EQUIV="refresh" CONTENT="10;URL=https://www.paypal.com/">

В качестве альтернативы, PayPal не предоставляет функцию перенаправления, которая, когда транзакция будет завершена, перенаправит обратно на ваш сервер. Если это так, то просто измените статус карты во время этого обратного вызова и пропустите весь процесс скручивания?

1 голос
/ 07 апреля 2010

После получения формы и выполнения того, что вам нужно сделать, вы должны предоставить другую форму, содержащую только кнопку (все остальные данные в скрытых полях), чтобы пользователь мог щелкнуть ее и, наконец, отправиться в PayPal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...