Paypal NVP与IPN进行确认 - 将它们联系在一起

时间:2011-12-19 11:47:53

标签: paypal paypal-ipn confirmation nvp

我正在使用PayPal和NVP API(使用PHP)进行快速结账。我在将用户重定向到Paypal之前在数据库中创建发票记录。如果用户在处理后没有返回我的网站,我使用IPN确认购买,然后更新确认付款的发票记录。我仍然处于沙盒模式,并试图弄清楚如何将从NVP开始的事务与我通过IPN获得的确认联系起来。

我需要验证NVP中发送的“PAYMENTREQUEST_n_INVNUM”是否会在IPN帖子中作为“发票”返回。

看来我实际上无法测试这个,直到我上线,因为Sandbox IPN似乎没有激活NVP发起的沙盒交易 - 这是正确的吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

可以在Sandbox中对此进行测试。但是,如果您使用的是“PayPal NVP”,我假设您正在使用PayPal Express Checkout并拨打SetExpressCheckoutDoExpressCheckoutPayment API。 如果是这种情况,您实际上并不需要IPN,因为只有在您拨打DoExpressCheckoutPayment时才会完成交易。

换句话说,买家将始终重定向到您在SetExpressCheckout中指定的RETURNURL,并且当您在此呼叫DoExpressCheckoutPayment时,交易已完成(或不完成)返回页面。

要获取发票号码,您可以拨打GetExpressCheckoutDetails并提供您之前检索到的TOKEN(它也会附加到RETURNURL的GET)。

最后,检查PAYMENTSTATUS=Completed API响应中的DoExpressCheckoutPayment,看看交易是否已完成。

答案 1 :(得分:0)

感谢Robert对流程的清晰度 - 特别是useraction = commit。

我终于意识到我可以在Sandbox中为我的测试卖家打开IPN,并与IPN一起测试NVP。我能够验证PAYMENTREQUEST_0_INVNUM是否与IPN POST中的'INVOICE'参数匹配。

我将使用自定义字段从我的系统传递客户电子邮件,以防他们使用不同的电子邮件登录到PayPal,因此允许我使用电子邮件/发票编号对进行确认。