我正在使用带有 TEMPLATE=TEMPLATEC 的 PayPal Payments Advanced。我已经想出了如何创建 IFRAME 并接收来自 PayPal 的确认/取消/silent_post 响应。但是我发现无法验证我的确认/取消/silent_post 页面收到的参数。有没有办法确保这些参数来自 PayPal 而不仅仅是由任意用户发送?
2 回答
关于您的最佳选择是TRXTYPE=I
在显示 iframe 之前针对您从 PayPal 收到的安全令牌和安全令牌 ID 运行查询交易 ( )。如果事务已运行,该调用将为您提供事务中的事务 ID (PNREF)。(根据您的情况,PNREF 可能就是您所需要的。)如果与买家发回给您的 PNREF 相匹配,那么其余数据很可能是真实的。
例如:
要求:
USER=****&VENDOR=****&PARTNER=****&PWD=****&TRXTYPE=I&SECURETOKEN=7tGDq6ILZeEmATCwTXrSRkwjz&SECURETOKENID=76ac5819ee01475daf15b2af038da977&VERBOSITY=HIGH
回复:
RESULT=0&PNREF=E79P4ABEC9DE&TRANSSTATE=8&ORIGRESULT=0&ORIGPNREF=E19P4BFB14B2&RESPMSG=Approved&AUTHCODE=111111&AVSADDR=Y&AVSZIP=Y&CVV2MATCH=Y&ORIGPPREF=1XR06058R58346646&CORRELATIONID=bdd79cb3c7fb6&PROCAVS=X&PROCCVV2=M&SETTLE_DATE=2013-04-23 07:22:06&TRANSTIME=2013-04-23 07:22:06&LASTNAME=NotProvided&AMT=24.99&ACCT=3698&EXPDATE=1214&CARDTYPE=0&IAVS=N
ORIGRESULT
是原始交易的结果(0
是成功的;其他的都是失败的。)
ORIGPNREF
是原始交易的 PNREF。
您还可以在您的静默帖子 URL 中放置一个长而独特的“令牌”参数。就像是
“http://www.my-web-site.com/confirm-payment?token=2348349u21034ms39n899”
并将其与服务器端脚本所期望的相同令牌匹配。由于静默帖子 URL 存储在您的 PayPal 经理帐户中,因此令牌是机密的,甚至整个 URL 也是机密的。此外,交易信息也会传递到此静默帖子 URL,允许您将信息与结帐时保存在数据库中的交易进行匹配。这是确认付款是否正确的一种很好的安全方法。无声帖子适用于付款高级 iframe(又名托管结帐页面)上的“使用贝宝付款”和“直接信用卡付款”方法。此外,您还可以再进行一次检查,以查看 PayPal 是否为$_SERVER['HTTP_REFERER']; (当然不能仅靠它自己信任)。