paypal - 如何通过 IPN 使用 Paypal 自适应支付?

标签 paypal paypal-ipn paypal-adaptive-payments

我正在使用 Paypal 的自适应支付系统。使用沙盒帐户,我能够发出 PayRequest 并转发到 Paypal 进行付款。 它看起来像:

请求=

2012 年 4 月 24 日晚上 10:35:46 com.paypal.adaptive.api.requests.PayRequest 执行 信息:发送 PayRequest 时:requestEnvelope.errorLanguage=en_US&actionType=PAY&receiverList.receiver(0).email=seller_1334320690_biz%40email.org&< strong>receiverList.receiver(0).amount=5.0&currencyCode=EUR&feesPayer=SENDER&cancelUrl=https%3A% 2F%2Flocalhost%3A8443&returnUrl=http%3A%2F%2Flocalhost%2F&ipnNotificationUrl=http%3A%2F%2Flocalhostu%2Ffinishdeposit&

响应=

2012 年 4 月 24 日晚上 10:35:48 com.paypal.adaptive.api.requests.PayPalBaseRequest makeRequest 信息:收到响应:responseEnvelope.timestamp=2012-04-24T13%3A35%3A48.587-07%3A00&responseEnvelope.ack=Success&responseEnvelope.correlationId=c8dee8023cca6&responseEnvelope.build=2756816&payKey=AP-1UF57245CJ360523K&paymentExecStatus=CREATED

我现在想知道如何检查付款是否已成功完成。 所以我尝试实现 ipn 系统,它使用沙箱工具工作。 但是,我不知道如何将两者连接在一起。即当付款时,我假设我需要在数据库中创建一个记录,该用户已经付款,可能是待处理/已创建? 然后等ipn返回通知我支付完成,更新数据库表说完成? 我如何将 PayRequest 与 IPN-Notification 相关联,我将从 paypal 获得? Paypal 仅通过 IPN 通知发送一些信息,例如:

  • item_number=AK-1234
  • residence_country=美国
  • verify_sign=ArcmaOINNZx08uC3iQY0zhEQN3IZAz70ynRk93Or8ixRi23bb4rGNIrd
  • address_country=美国
  • address_city=圣何塞
  • address_status=未确认
  • payment_status=已完成
  • business=seller@paypalsandbox.com
  • payer_id=TESTBUYERID01
  • 名字=约翰
  • 运费=3.04
  • payer_email=buyer@paypalsandbox.com
  • mc_fee=0.44
  • txn_id=484221854
  • 数量=1
  • receiver_email=seller@paypalsandbox.com
  • notify_version=2.1
  • txn_type=web_accept
  • test_ipn=1
  • payer_status=已验证
  • mc_currency=美元
  • mc_gross=12.34
  • 自定义=xyz123
  • mc_gross_1=9.34
  • payment_date=太平洋夏令时间 2012 年 4 月 22 日 11:54:48
  • 字符集=windows-1252
  • address_country_code=美国
  • address_zip=95131
  • address_state=CA
  • 税=2.02
  • item_name=something
  • address_name=约翰·史密斯
  • last_name=Smith
  • payment_type=instant
  • address_street=123,任何街道
  • receiver_id=TESTSELLERID1

我在那个 IPN-Notifcation 中找不到有用的东西。最好的情况是,如果我可以通过付费响应获得与 IPN 通知相同的相关 ID。所以我可以将 response-correlation-id 保存在我的数据库中,然后检查它是否收到具有相同 correlation-id 的 IPN 通知。

最佳答案

他们在沙盒中给你的测试 IPN 很糟糕。看看一个真实的触发你的实际回调(甚至是一个测试),你会看到它定义了 payKey ;这就是您用来查找它的内容。

请注意,他们需要端口 80 来进行 IPN 回调(尽管在任何地方都没有记录)。

这是一个真实的 IPN 通知(已翻译成 JSON,已编辑特定于我的应用程序的信息):

{"payment_request_date":"Sun Jun 24 06:12:20 PDT 2012",
"return_url":"http://redacted/paypal/transactions/3?status=completed",
"fees_payer":"EACHRECEIVER",
"ipn_notification_url":"http://redacted/paypal/notifications",
"sender_email":"redacted",
"verify_sign":"AFcWxVredacted",
"test_ipn":"1",
"transaction[0].id_for_sender_txn":"redacted",
"transaction[0].receiver":"redacted",
"cancel_url":"http://redacted/paypal/transactions/3?status=canceled",
"transaction[0].is_primary_receiver":"false",
"pay_key":"AP-redacted",
"action_type":"PAY",
"transaction[0].id":"redacted",
"transaction[0].status":"Completed",
"transaction[0].paymentType":"SERVICE",
"transaction[0].status_for_sender_txn":"Completed",
"transaction[0].pending_reason":"NONE",
"transaction_type":"Adaptive Payment PAY",
"transaction[0].amount":"USD 1.00",
"status":"COMPLETED",
"log_default_shipping_address_in_transaction":"false",
"charset":"windows-1252",
"notify_version":"UNVERSIONED",
"reverse_all_parallel_payments_on_error":"true"}

请注意,您必须在 PAY 请求中手动设置 reverse_all_parallel_payments_on_error。尽管他们建议这样做(并且它可能会让您免于焦虑),但默认情况下它是错误的。

此外,如果您错过了 IPN,您可以使用 PaymentDetails 直接获取所有相同的信息。

我不知道 @swade1987 在看什么,但我的 IPN 不包含任何有关费用金额的信息。 (这实际上就是我找到这篇文章的方式;试图找出原因。PP API 文档很糟糕。)

可在此处找到其他文档 https://developer.paypal.com/docs/classic/adaptive-payments/integration-guide/APIPN/

关于paypal - 如何通过 IPN 使用 Paypal 自适应支付?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305942/

相关文章:

ios - 付款 - IAP 或第三方

c# - Paypal 教程缺少引用资料?

php - Paypal 账户限制会影响支付网关吗?

ruby-on-rails - Paypal IPN 没有告诉我我的订单信息

paypal - 我如何在 Paypal 沙箱中获取身份 token ?

paypal - PayPal IPN机制如何调用连续的多个URL?

android - 支付宝验证

paypal - 如何获取 PayPal 自适应支付授权表的移动浏览器 View

paypal - 如何创建 Paypal 运输标签

ios - 隐藏 PayPal MPL 的 UiAlert