Я пишу форму для отправки данных в paypal, и это отлично работает, я создаю форму со скрытыми полями, а затем добавляю кнопку отправки, которая отправляет все на paypal.
Однако, когда пользователь нажимает на эту кнопку, есть еще что я хочу сделать, например, изменить статус своей корзины в базе данных. Таким образом, я хочу, чтобы иметь возможность выполнять некоторый код, когда они нажимают кнопку «Отправить», а затем публикуют данные в 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);
Возможно, попробуйте объединить 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 не предоставляет функцию перенаправления, которая, когда транзакция будет завершена, перенаправит обратно на ваш сервер. Если это так, просто измените статус карты во время этого обратного вызова и пропустите весь процесс завивки?
Получив форму и выполняя то, что вам нужно сделать, вы должны представить другую форму с помощью всего одной кнопки (все остальные данные в скрытых полях), чтобы пользователь мог щелкнуть и, наконец, отправиться в paypal.