Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PayPal PDT付款后刷新浏览器会导致物品被购买两次_Paypal_Eclipse Pdt - Fatal编程技术网

PayPal PDT付款后刷新浏览器会导致物品被购买两次

PayPal PDT付款后刷新浏览器会导致物品被购买两次,paypal,eclipse-pdt,Paypal,Eclipse Pdt,我使用PDT实现了PayPal支付。我意识到建议结合使用PDT和IPN,但就我而言,PDT已经足够了 我能够直接用户到贝宝,收取付款,然后在用户返回我的网站时,在数据库中为用户执行更新帐户信用的操作。URL显示的地址如下所示: http://www.domain.com/process_pdt?tx=45138128VH922173V&st=Completed&amt=1.99&cc=USD&cm=&item_number= 到目前为止还不错。我遇到的问

我使用PDT实现了PayPal支付。我意识到建议结合使用PDT和IPN,但就我而言,PDT已经足够了

我能够直接用户到贝宝,收取付款,然后在用户返回我的网站时,在数据库中为用户执行更新帐户信用的操作。URL显示的地址如下所示:

http://www.domain.com/process_pdt?tx=45138128VH922173V&st=Completed&amt=1.99&cc=USD&cm=&item_number=
到目前为止还不错。我遇到的问题是,使用此URL刷新浏览器会导致用户的帐户再次被贷记,而不会将用户重定向到PayPal以再次收取付款


我已经读到,我应该将上面URL中的事务id tx添加到用户表中,并检查以确保尚未使用此tx id。如果有,我应该显示一条错误消息。这是实现这一点的唯一方法吗?即,将每个tx id存储在用户表中,然后每次用户合法或欺诈地调用上面的进程pdt URL时检查id是否存在?

啊,是的:这确实是唯一的方法。作为一个简单的健全性检查,您可能希望从流程页面重定向到一个不包含txn_id的URL,这样临时刷新不会导致问题,但如果他们使用后退按钮,仍然会发生这种情况,但您必须验证txn_id仅由您自己使用一次。

;使用IPN代替。PDT将取决于买家是否返回您的网站。这对于确认消息来说很好,但对于任何事务性更改(例如添加/删除信用)绝对不建议这样做。有了IPN,您一开始就不会有这个问题,尽管仍然建议您构建一个傻瓜式的IPN脚本,优雅地处理多篇文章。