我正在使用PayPal和NVP API(使用PHP)进行快速结账。我在将用户重定向到Paypal之前在数据库中创建发票记录。如果用户在处理后没有返回我的网站,我使用IPN确认购买,然后更新确认付款的发票记录。我仍然处于沙盒模式,并试图弄清楚如何将从NVP开始的事务与我通过IPN获得的确认联系起来。
我需要验证NVP中发送的“PAYMENTREQUEST_n_INVNUM”是否会在IPN帖子中作为“发票”返回。
看来我实际上无法测试这个,直到我上线,因为Sandbox IPN似乎没有激活NVP发起的沙盒交易 - 这是正确的吗?
感谢您的帮助。
答案 0 :(得分:6)
您可以在Sandbox中对此进行测试。但是,如果您使用的是“PayPal NVP”,我假设您正在使用PayPal Express Checkout并拨打SetExpressCheckout
和DoExpressCheckoutPayment
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,因此允许我使用电子邮件/发票编号对进行确认。