Paypal IPN,将我的订单ID放在paypal sdk(android)中通过我的服务器验证付款?

时间:2016-08-16 19:46:50

标签: android paypal paypal-ipn paypal-rest-sdk

我将Paypal付款实施到我的Android应用程序(例如:http://androiddevelopmentanddiscussion.blogspot.de/2014/05/paypal-integration-in-android.html)。

首先,我联系我的服务器以获取我的Android设备的order_id。之后,用户可以使用Paypal(沙盒)付款,我可以看到付款成功,我的Android客户端从Paypal获得回复("从PayPal&#34收到的PaymentConfirmation信息;)以及paypal"确认"宾语。

然后我可以使用该确认对象将其发送回我的服务器并将付款标记为成功(为此我将使用order_id)。但有一个问题。

如果互联网连接中断,会发生什么?我无法将付款标记为成功进入我的服务器数据库。我知道,有可能从Paypal获取IPN消息到我的服务器,并可以使用它来标记付款成功。但是我怎么能将order_id传递给我的付款,以便在成功付款到我的服务器后由Paypal发送的IPN邮件包含order_id?

我需要order_id来识别我的客户和订单......我找不到有关该主题的任何有用信息。我不知道如何实现这一目标。我只能将以下信息传递给我的付款:

  if(pressed.getId() == R.id.button1){
   thingToBuy = new PayPalPayment(new BigDecimal("8"), "USD", "Painting 1", PayPalPayment.PAYMENT_INTENT_SALE);

非常感谢任何提示。 (对不起我的英语,我不是母语为英语的人)

2 个答案:

答案 0 :(得分:0)

PayPal的IPN服务将继续重新发送IPN,直到它从您的服务器获得200 OK响应。因此,一旦中断后你的互联网连接恢复良好,IPN就应该自拔。

您还可以在PayPal帐户的“IPN历史记录”页面中手动重新发送IPN。如果你正在谈论数百或数千可能不是一个选择,但是如果你没有那么多人可以追上来的话。

另一种选择是使用TransactionSearchGetTransactionDetails API来同步IPN错过的任何交易。这是有些人喜欢做的事情,只是为了确保IPN没有错过任何东西。

答案 1 :(得分:0)

有一种名为" invoiceNumber"在PaypalPayment类中设置发票号。

您可以使用它来设置发票号码,以便IPN可以将其重新发送回您的服务器。

String yourOrderNumber =" test&#34 ;; thingToBuy.invoiceNumber(yourOrderNumber);

顺便说一句,如果您将结果对象传回服务器,则可能需要验证付款。你可以考虑避免欺诈的事情(根据paypal文件)

  1. 付款证明是真实的吗?
  2. 我是付款的收件人吗?
  3. 金额和货币是否正确?
  4. 以前是否已使用过付款?
  5. 根据我的经验,我所做的是离开IPN做确认付款部分。

    希望它有所帮助。