Paypal IPN,在哪里将我的订单 ID 放在 paypal sdk (android) 中以通过我的服务器验证付款?
Posted
技术标签:
【中文标题】Paypal IPN,在哪里将我的订单 ID 放在 paypal sdk (android) 中以通过我的服务器验证付款?【英文标题】:Paypal IPN, where to put my order id in paypal sdk (android) to verify payment through my server? 【发布时间】:2016-12-23 07:44:19 【问题描述】:我向我的 android 应用程序实施了 Paypal 付款(如这里:http://androiddevelopmentanddiscussion.blogspot.de/2014/05/paypal-integration-in-android.html)。
首先,我联系我的服务器以获取我的 Android 设备的 order_id。之后,用户可以使用 Paypal(沙盒)进行付款,我可以看到付款成功,并且我的 Android 客户端从 Paypal(“PaymentConfirmation info received from PayPal”)和一个 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);
非常感谢任何提示。 (对不起我的英语,我不是以英语为母语的人)
【问题讨论】:
【参考方案1】:PaypalPayment 类中有一个名为“invoiceNumber”的方法来设置发票编号。
您可以使用它来设置发票编号,以便 IPN 可以将其发送回您的服务器。
即
String yourOrderNumber = "test"; thingToBuy.invoiceNumber(yourOrderNumber);
顺便说一句,如果您将结果对象传回服务器,您可能需要验证您的付款。您可以考虑避免欺诈的事情(根据贝宝文件)
-
付款证明是否真实?
我是收款人吗?
金额和币种是否正确?
以前是否使用过付款?
根据我的经验,我所做的是让 IPN 完成确认付款部分。
希望对你有帮助。
【讨论】:
【参考方案2】:PayPal 的 IPN 服务将继续重新发送 IPN,直到从您的服务器收到 200 OK 响应。因此,一旦您的互联网连接在中断后再次恢复良好,IPN 应该会赶上自己。
您还可以从 PayPal 帐户的 IPN 历史页面手动重新发送 IPN。如果您谈论的是数百或数千,那可能不是一个选择,但如果您没有那么多可以赶上的话。
另一种选择是使用TransactionSearch 和GetTransactionDetails API 来同步IPN 遗漏的任何事务。这是一些人无论如何都喜欢做的事情,只是为了确保 IPN 没有遗漏任何东西。
【讨论】:
对不起,买错了。我的意思是如果 Android 客户端的连接中断,而不是 Paypal (IPN) 和我的服务器(托管在云中)之间的连接。不知何故,我需要识别订单,对我来说唯一的可能性是从我的服务器发送到 Android 客户端的 order_id,之后我的客户可以使用 Paypal(Android) 付款。如何将我的 order_id 传递给 Paypal 付款,以便 Paypal 将其与 order_id 一起发回(作为 IPN)到我的服务器......我不知道其他方法来识别我的客户所下的订单。以上是关于Paypal IPN,在哪里将我的订单 ID 放在 paypal sdk (android) 中以通过我的服务器验证付款?的主要内容,如果未能解决你的问题,请参考以下文章