2013-01-09 12 views
0

我使用贝宝与我的Grails 2.1.1版本。在PayPal成功处理付款后,显示成功页面配置了自动返回功能,并且还有一个手动返回按钮到同一个网址。如果用户没有点击返回按钮,那么一切都很好。但是如果用户点击返回按钮,那么同样的请求会出现两次到我的操作(自动返回也发送相同的请求)。 是否有可能过滤这个重复的请求对控制器的操作不做任何事情,因为它已经在为手动返回点击请求而进行,或者如果用户单击手动返回按钮,请设置贝宝不发送该付款的自动返回请求。 或者更好的方法来处理这个问题。贝宝自动返回与手动返回按钮导致应用程序中的错误

回答

0

您可以启用付款数据传输来获取交易ID。

从文档在:https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/howto_html_paymentdatatransfer

当客户支付你,贝宝通过附加事务ID您在您的帐户配置文件中指定的URL发送支付给您的交易ID。此信息通过HTTP GET作为此名称/值对发送:tx = transactionID

然后您可以检查是否已处理transactionID。

此外,您可以通过将这些参数发送回paypal完成支付验证,如上面链接中所述。

+0

谢谢。我已经实施了它。我的问题是另一个。在成功页面上,我有一个返回按钮以及带返回URL的自动返回启用。如果用户等待自动返回,那么一切正常(我根据返回trnxID验证付款并基于成功更新付款为完成)。但是,如果用户单击“手动返回”按钮,则同样的请求会在几秒钟内到达服务器两次。如果用户点击返回按钮,我该如何停止自动返回? –

+0

贝宝似乎无法处理重复的情况。从paypal文档:“客户可能刷新页面,因此如果您将记录插入数据库,则必须检查重复项”。因此,您可以在第一次请求中将记录插入到数据库中,并且如果您获得具有相同txId和付款状态的更多请求(您应该在db中检查,如果该txId已经处理或没有处理),您可以忽略进一步处理/显示回用户。 – user1509437