Сообщить URL-адрес PayPal

PayPal успешно возвращает мне обратный URL-адрес, который я указываю при создании кнопки «Купить сейчас». Но теперь я в замешательстве. Как мне получить сведения о транзакции, проведенной в PayPal? Я также хочу установить некоторые значения базы данных для возвращаемого URL. Но я боюсь, что если мой пользователь перейдет по этому URL-адресу без оплаты, он, тем не менее, станет премиум-участником. Как этого избежать?


person TCM    schedule 19.05.2010    source источник


Ответы (1)


PayPal возвращает данные обратно на ваш сайт через то, что они называют IPN. На самом деле это просто обратный вызов для указанного вами URL-адреса. Вы можете установить этот URL-адрес с помощью переменной notify_url, которую вы можете отправить в PayPal.

Пример:

<input name="notify_url" value="http://yourdomain.com/notify_url.php" type="hidden">

Notify_url.php в приведенном выше примере получает некоторые переменные POST от PayPal после завершения платежа, даже если клиент никогда не вернется на ваш сайт.

Возвращены некоторые важные переменные. через PayPal это:

  • mc_gross
  • счет
  • расчет_сумма
  • Protection_eligibility
  • address_status
  • идентификатор_плательщика
  • налог
  • адрес улицы
  • payment_date
  • статус платежа
  • кодировка
  • address_zip
  • mc_shipping
  • mc_handling
  • имя
  • mc_fee
  • адрес_код_страны
  • курс обмена
  • адрес
  • уведомить_версия
  • рассчитаться_валюта
  • обычай
  • плательщик_статус
  • бизнес
  • адрес_страна
  • Адрес Город
  • verify_sign
  • payer_email
  • txn_id
  • способ оплаты

счет-фактура возвращается, если вы установили его. Его можно использовать как собственный идентификатор заказа/транзакции.

txn_id генерируется PayPal и является их собственным идентификатором транзакции.

Если вы добавляете товары самостоятельно, PayPal также возвращает num_cart_items, item_name1 (item_name2, item_name3), количество1 (количество2, количество3) и тому подобное.

Дополнительные сведения см. на странице https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables

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

Что я делаю, так это сохраняю временный «заказ», прежде чем отправить клиента в PayPal с идентификатором счета-фактуры, тем же идентификатором, который я отправляю в PayPal в качестве счета-фактуры. Таким образом, моя страница notify_url.php может проверить мою базу данных на наличие идентификатора счета и сравнить заказ/оплату.

person jamietelin    schedule 25.05.2010
comment
Привет Джаметелин. Спасибо за ваш ценный ответ. Я уже разобрался с этим сам. Я хотел бы добавить, что вместо того, чтобы хранить временный заказ в базе данных, Paypal уже дал однажды хороший пример, где мы извлекаем все имена параметров запроса и их значения и отправляем их обратно в Paypal (для проверки) с нашего URL-адреса уведомления, а затем Paypal возвращает строка VERIFIED или INVALID, на основе которой вы можете выполнять некоторые операции с базой данных. - person TCM; 25.05.2010
comment
Ну, временная БД в основном нужна, если нам нужно как-то подключить ее к пользователю в нашей собственной пользовательской БД. Мне это нужно. Но это зависит от того, какой сервис вы строите, я думаю :) - person jamietelin; 25.05.2010
comment
@ jamietelin Я пробовал, но не удалось, см. stackoverflow.com/questions/8570539/ - person PHP Ferrari; 07.01.2012
comment
Как вы можете убедиться, что опубликованные данные верны и действительно поступают из PayPal? Изменить: нашел: cms.paypal.com/ uk/cgi-bin/ - person quano; 04.05.2012
comment
У меня были похожие проблемы. PayPal не очень хорошо документирует, как работает IPN и какую информацию вы можете получить для обработки. Лучший способ — создать заказ перед отправкой пользователя в PayPal и добавить UID к Item_Number. Таким образом, у нас есть что использовать для обновления статуса заказа. Отличный вопрос и фантастический ответ от @jamietelin, спасибо, ребята. - person Nick Green; 19.08.2013
comment
Представляют ли переменные, связанные с адресом, доставку или выставление счетов? - person Drazen Bjelovuk; 04.11.2014
comment
Не уверен на 100%, как это работает сейчас, это было некоторое время назад, когда я опубликовал свой awnser. Но я думаю, что это биллинг и доставка. Пользователь может получить возможность добавить внешний адрес доставки через сайт Paypal позже в процессе, или вы можете контролировать это на своей стороне, прежде чем отправлять пользователей в Paypal. Я думаю, вы можете контролировать это через переменную no_shipping. - person jamietelin; 04.11.2014
comment
Мне нужен pay_key в ответе IPN, а не все эти вещи, как я могу это сделать? - person Piyush Dholariya; 18.04.2017
comment
Я думал, что @TCM использует html-переменную return для возврата на свой сайт, и в этом случае лучшим первым выбором будет использование PDT, которое возвращает те же значения, что и IPN, но в присутствии клиента, поэтому сайт может немедленно сообщить им об успешном выполнении. Конечно, используйте IPN в качестве резерва, так как клиент может не вернуться, но нужно убедиться, что он не удвоит предложение. - person Patanjali; 25.01.2018
comment
Пожалуйста, никогда не ссылайтесь на документацию Paypal, они обычно 404, и я нахожу несколько ссылок на их собственном веб-сайте, которые были перемещены и перенаправляют на домашнюю страницу. - person PJ Brunet; 30.01.2018
comment
@PJBrunet Этому ответу 8 лет. Ссылки есть ссылки. Конечно, я должен дать ссылку на дополнительную информацию. Это больше проблема Paypal в том, что они плохо обрабатывают свои ссылки, чем я, ссылающийся на них. Но все документы в Интернете зависят от времени, поэтому ссылки могут быть мертвы. - person jamietelin; 12.02.2018
comment
@jamietelin Я полностью согласен, это проблема Paypal - это то, что я имел в виду, и я не критиковал вас, на самом деле просто проголосовал за ваш ответ. Я специально искал item_number и не смог найти много информации от Paypal. Для такой крупной компании, как вы, возможно, заметили, IMO они плохо справляются с поддержкой своего веб-сайта, поскольку они изменили свой текущий мобильный дизайн. Что касается item_number, я обнаружил, что если у вас есть только один элемент, item_number не нумеруется как item_number1, item_number2... это просто item_number. - person PJ Brunet; 14.02.2018