我正在使用Paypal的自适应支付系统 . 使用沙盒帐户,我能够进行PayRequest并转发到Paypal进行付款 . 它看起来像:
Request =
2012年4月24日10:35:46 com.paypal.adaptive.api.requests.PayRequest执行INFO:发送PayRequest: requestEnvelope.errorLanguage = en_US& actionType = PAY& receiverList.receiver(0).email = seller_1334320690_biz%40email.org& 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&
Response =
2012年4月24日10:35:48 com.paypal.adaptive.api.requests.PayPalBaseRequest makeRequest INFO:收到回复: responseEnvelope.timestamp = 2012-04-24T13%3A35%3A48.587-07%3A00& responseEnvelope.ack =成功& responseEnvelope.correlationId = c8dee8023cca6& responseEnvelope.build = 2756816& payKey = AP-1UF57245CJ360523K&paymentExecStatus = CREATED
我现在想弄清楚,我如何检查,付款已成功完成 . 所以我尝试使用沙箱工具实现ipn系统 . 但是,我不知道如何将2连接在一起 . 即,当付款时,我假设我需要在数据库中创建一个该用户已付款的记录,可能是待定/创建?然后等待ipn返回通知我已付款,并更新数据库表说完了?如何将PayRequest与IPN通知相关联,我将从paypal获得? Paypal只通过IPN-Notification发送一些信息,如:
-
item_number = AK-1234
-
residence_country =美国
-
verify_sign = ArcmaOINNZx08uC3iQY0zhEQN3IZAz70ynRk93Or8ixRi23bb4rGNIrd
-
address_country =美国
-
address_city =圣何塞
-
address_status =未经证实
-
payment_status =已完成
-
business=seller@paypalsandbox.com
-
payer_id = TESTBUYERID01
-
first_name =约翰
-
shipping = 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 = USD
-
mc_gross = 12.34
-
custom = xyz123
-
mc_gross_1 = 9.34
-
payment_date = 11:54:48 2012年4月22日PDT
-
charset = windows-1252
-
address_country_code = US
-
address_zip = 95131
-
address_state = CA.
-
tax = 2.02
-
item_name =某事
-
address_name =约翰史密斯
-
last_name =史密斯
-
payment_type =即时
-
address_street = 123,任何街道
-
receiver_id = TESTSELLERID1
我无法在IPN-Notifcation中找到可用的东西 . 最好的情况是,如果我能通过付费响应获得的IPN-Notification获得相同的相关性 . 所以我可以在我的数据库中保存response-correlation-id,然后在我收到具有相同correlation-id的IPN-Notification时检查它 .
3 回答
他们在沙盒中给你的测试IPN很糟糕 . 看看一个真实的触发你的实际回调(甚至测试),你会看到它定义了payKey;这是你用它来查找它 .
请注意,它们需要端口80用于IPN回调(尽管在任何地方都没有记录) .
这是一个真实的IPN通知(翻译为JSON,特定于我的应用程序编辑的信息):
请注意,您必须手动在PAY请求中设置reverse_all_parallel_payments_on_error . 即使他们建议这样做(并且它可能会让你感到焦虑),但默认情况下这是假的 .
此外,如果您错过了IPN,您可以使用PaymentDetails直接获取所有相同的信息 .
我不知道@ swade1987在看什么,但我的IPN不包含任何有关费用金额的信息 . (这实际上就是我发现这篇文章的方式;试图找出原因.PPP API文档很可怕 . )
其他文档可在此处找到https://developer.paypal.com/docs/classic/adaptive-payments/integration-guide/APIPN/
有点迟了但是对于谁从搜索引擎碰到这里...
我最近刚开始处理Paypal API . OP引用的IPN消息是在卖家简档中定义的IPN通知URL处传递的消息 . 相反,@ sai引用的IPN是Adapative Payments IPN,传递给Pay,ExecutePaypement或Preapproval API请求中定义的ipnNotificationUrl .
它们是两种不同类型的IPN消息,并且是documented,查找支付信息变量和支付/预批准消息变量 . 如果您同时选择这两种IPN,则可以获得这两种类型的IPN .
关于OP引用的IPN消息,您可以使用txn_id字段的值来获取transactionId的PaymentDetails . transationId与payKey一样好,可以引用已完成的付款 .
这应该可以帮助你 .