2017-02-12 4 views
0

Я пытаюсь отправить данные Passthrough в paypal кнопку paynow и вернуть paypal эти данные на мою страницу php, когда пользователь нажимает кнопку «вернуться к продавцу» после оплаты.объект возврата в paypal не работает

Для этого я использую средство «возврат» в кнопке paypal вместе с rm = 2, чтобы отправить все данные назад как сообщение. Однако я не могу заставить его работать. Вот мой PayPal кнопка HTML:

<form name="paypal2" action="https://www.paypal.com/cgi-bin/webscr"  method="post" target="_top"> 
<input type="hidden" name="cmd" value="_s-xclick"> 
<input type="hidden" name="hosted_button_id" value="xxx"> 
<input type="hidden" name="invoice" value="testinvoice_fromcode2"> 
<input type="hidden" name="custom" value="testcustom_fromcode1"> 
<input type="hidden" name="on0" value="yes"><!--agreetc--> 
<input type="hidden" name="os0" value="<?php echo $aid; ?>"> 
<input type="hidden" name="on1" value="<?php echo $id; ?>"> 
<input type="hidden" name="os1" value="<?php echo $agent; ?>"> 
<input type="hidden" name="return" value=http://www.example.com/Admin/conpanel/privat/phpvendorpaidad.php> 
<input type="hidden" name="rm" value="2"> 
<input id="submit" type="image" src="https://www.paypalobjects.com/en_GB/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online!"> 
<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1"> 
</form> 

В уведомлении IPN, PayPal предоставляет: os0 как option_selection1, OS1 как option_selection2, On0 как option_name1, on1 в option_name2,

Я знаю, что on0 и os0 предполагается использовать как пары значений имени, но еще в 2009 году, когда я впервые написал этот скрипт, допустимо только 2 набора, и поэтому я использовал все 4 для переноса значений, и тогда он работал.

Но по существу, я не могу понять, почему

<input type="hidden" name="return" value=http://www.example.com/Admin/conpanel/privat/phpvendorpaidad.php> 
<input type="hidden" name="rm" value="2"> 

не работает.

Я не могу подобрать эти значения в принимающий скрипт, phpvendorpaidad.php, либо как

$aid=$_REQUEST['option_selection1']; 

или

$aid=$_REQUEST['os0']; 

, например.

Может ли кто-нибудь увидеть, что я делаю неправильно? Очень признателен.

У меня также есть страница прослушивания IPN, которая работает нормально. Может ли другой способ построить это на странице прослушивателя IPN с помощью javascript для автоматической отправки данных формы на странице onload?

ответ

1

Действительно ли PayPal отправляет ваш сценарий возврата или использует GET? В последнем случае вы можете увидеть txn_id и некоторую другую информацию в строке запроса, но вы НЕ получите данные полной оплаты.

Если у вас установлен автоматический возврат в положение Вкл. (Это означает, что пользователь автоматически перенаправляется на ваш сайт, без необходимости нажатия кнопки), а затем paypal отправит запрос GET и будет содержать только несколько элементов.

var_dump ($ _ REQUEST) и var_dump ($ _ POST) в вашем скрипте, чтобы узнать, что вы получаете.

+0

большое спасибо за вашу помощь. Я пробовал все, с и без Auto Return и PDT. Как вы говорите, я получаю передачи GET (с цепочками запросов) с функцией Auto Return/PDT on и POST с отключенными. Я заметил URL-адреса и var_dump ($ _ REQUEST) во всех случаях, но Paypal ничего не отправляет моему сценарию возврата (т.е. Return to Merchant). Странно то, что все это работало, когда я впервые написал сценарии в 2009 году. Кнопки все еще с того времени. –

+0

Я потратил столько времени на это, что теперь, я думаю, я попытаюсь выполнить POSTing переменные из своего скрипта обработки/прослушивания IPN, используя форму javascript. Сценарий обработки IPN работает нормально, и платежи успешно выполняются (VERIFIED & COMPLETED), и все данные оплаты отправляются мне по электронной почте. –

+0

JBart, ВЫ БРИЛЛИАНТ! Я только что обнаружил, что я случайно оставил «rm = 0» в моем модифицированном сценарии кода (я делал это при тестировании по-разному). Возвращаясь к «rm-2», успешно отправил все детали оплаты, которые я смог увидеть благодаря вашему предложению re var_dump ($ _ REQUEST). Данные POSTed находятся внутри массива, поэтому мне нужно будет извлечь их из массива, чтобы добраться до тех, которые я хочу. МНОГО, МНОГО СПАСИБО СНОВА СНОВА !!! –

0

На самом деле проблема заключается в дефектной if/else логике в моем коде возврата, который был настроен в 2009 году для обработки переменных GET, которые Paypal отправлял в сценарий возврата в те дни. Эта логика должна была различать данные POSTED, полученные из предыдущей формы на моем сервере, и данные GET, полученные от Paypal. Paypal не по-видимому, поменявший с 2009 года и больше не отправляет GET данные в обратном сценарий, но данные POST через

<input type="hidden" name="return" value=http://www.example.com/Admin/conpanel/privat/phpvendorpaidad.php> 
<input type="hidden" name="rm" value="2"> 

После этого было исправлено программа работала.

Однако я смог обнаружить эту проблему только благодаря блестящему предложению JBart для var_dump ($ _ REQUEST) (или более легко прочитать print_r ($ _ REQUEST)). Без этого я все равно бы барахтался.Поэтому, приветствуя JBart, вы бы хотели купить вам напиток, если вы находитесь по соседству (NW London)!

И нет, мне не нужно было извлекать какие-либо переменные из полученного массива POSTed (см. Мой последний комментарий выше), просто нормальный '$ payment_status = $ _POST [' payment_status '];'. В этом я неверно истолковал другую тему по теме «How can I get posted data passed along when the user is first redirected through Paypal?»