2010-04-07 2 views
5

Я пишу форму для отправки данных в paypal, и это отлично работает, я создаю форму со скрытыми полями, а затем получаю кнопку отправки, которая отправляет все на paypal.Авто Отправка формы (cURL)

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

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

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

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

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

Код im, используемый для 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

Возможно попытаться объединить 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 не предоставляет функцию перенаправления, которая, когда сделка будет завершена, перенаправлять обратно на сервер. Если это так, просто измените статус карты во время этого обратного вызова и пропустите весь процесс завивки?

+0

спасибо, я надеялся, что мне не придется делать это в обратном вызове от paypal, я хотел установить статус корзины, поскольку он уходит на paypal, а другой, когда он возвращается, так что можно точно отслеживать прогресс и помогать с исправлением любых ошибок, попробуйте установить некоторые заголовки http и посмотреть, но мне просто нужно сделать это в обратном вызове. Я просто предположил, что автоматическое распознавание формы и последующее действие будут проще. – cast01

+0

Я думаю, вы все равно можете сделать и для тех пользователей, у которых включен javascript.Для тех, у кого не включен javascript, используется только обратный вызов, но для тех (большинство), у которых включен javascript, вы можете установить флаг «going-to-paypal» в вызове ajax и установить «полный», флаг в обратном вызове. –

1

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

+0

спасибо за ответ, однако это победит цель того, что я пытаюсь сделать. Я хочу установить корзину, как, скажем, «ушел на paypal», когда пользователь щелкает деньги. Если, щелкнув «платить», я затем задаю статус корзины и покажу им другую форму, которую они должны отправить, тогда они могут выбрать не отправлять ее, а затем статус моей корзины будет неправильным. – cast01

+0

Тогда вам понадобится одна строка javascript для автоматической отправки формы. В противном случае ваш сервер не сможет перенаправить и отправить форму на paypal самостоятельно. – zaf