Я наткнулся на очень своеобразное поведение PayPal. Когда я тестирую интеграцию PayPal с песочницей PayPal, используя localhost в URL-адресах, я получаю идентификатор транзакции обратно, но когда я заменяю localhost фактическим именем, переменные транзакции с именем сайта отсутствуют. В обоих случаях PayPal возвращается на мой сайт, но когда я не использую localhost, он не возвращает информацию о транзакции, что делает усилия наших тестировщиков бесполезными.
Пример:
http://localhost/paymentinfo.aspx?Product=DC - working
http://test1/paymentinfo.aspx?Product=DC - is not working
Просто чтобы прояснить:
- PDT на моей учетной записи в песочнице активирован.
- IPN в моей учетной записи песочницы активирован.
Вот код моей кнопки BuyNow PayPal:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick"/>
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----DFGHJ8yuFFTY-----END PKCS7-----"/>
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted"/>
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_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_US/i/scr/pixel.gif" width="1" height="1">
</form>
где = «зашифрованный» содержит зашифрованную строку следующего списка параметров:
cmd=_xclick
business=paypal_business_acc@companyname.com
cert_id=123456
charset=UTF-8
item_name=product name
item_number=123456
amount=11.97
currency_code=USD
return=http://localhost/Success.aspx
cancel_return=http://localhost/AppDownPay.aspx?Cancel=true
notify_url=http://ipnlstnr/PayPalIPNListenerInternal.ashx
custom=2bcad9cb-9429-4e99-8984-5d0532bfb718
no_shipping=1
on0=CustomItem1
on1=CustomItem2
os0=VM
os1=DC
Кто-нибудь знает, как заставить PayPal возвращать переменные перевода на URL, не связанные с локальным хостом?
ОБНОВЛЕНИЕ:
Оказалось, что песочница PayPal отправляет сообщения слушателю IPN, а не возвращается на наш сайт. Это довольно неожиданно. Поскольку Auto Return включен. Я пытался включить или отключить PDT, который не имел никакого значения. Также я пытался удалить notify_url из кода кнопки, и все же сообщение было перенаправлено нашему слушателю IPN, а не нашему сайту. Я попытался добавить переменную "rm" к коду кнопки со значением 2, и это не убедило песочницу перенаправить на наш сайт. Не могли бы вы помочь мне понять, что мне не хватает?
UPDATE2:
Проблема была решена. Проблема была вызвана невозможностью возврата PayPal в наше приложение из-за ограничений брандмауэра. Как только эти ограничения были сняты, приложение стало работать нормально.