我正在使用带有TEMPLATE = TEMPLATEC的PayPal Payments Advanced。我已经想出了如何创建IFRAME并从PayPal接收确认/取消/ silent_post响应。但我发现无法验证我的确认/取消/ silent_post页面接收的参数。有没有办法确保这些参数来自PayPal,而不仅仅是由任意用户发送?
答案 0 :(得分:4)
关于最佳选择,您需要针对安全令牌运行查询交易(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。
答案 1 :(得分:1)
您还可以在无声帖子网址中添加一个长而独特的“令牌”参数。像
这样的东西“http:// www.my-web-site.com/confirm-payment?token=2348349u21034ms39n899”
并将其与服务器端脚本所期望的相同令牌进行匹配。由于无声帖子URL存储在您的PayPal经理帐户中,因此该令牌是保密的,甚至整个URL都是保密的。此外,交易信息也会传递到此静默帖子URL,以便您在结帐时将信息与您保存在数据库中的交易进行匹配。这是一种确保正确付款的安全方法。这个无声的帖子适用于支付高级iframe(a.k.a.托管结账页面)的“pay with paypal”和“直接信用卡支付”方法。此外,您还可以再多检查一次,看看PayPal是否为$_SERVER['HTTP_REFERER'];(当然这不能单独信任)。