android - 带有服务器和数据库的移动应用程序中的 Paypal 支付流程

标签 android sql-server paypal azure-mobile-services payment-processing

我正在开发具有 Paypal 支付功能的 Android 应用程序。我对付款流程有疑问。

考虑以下两个示例:

  1. 客户点击 Android 应用中的订购按钮。 App 连接到 Azure App Service 并向其发送一些订单信息。应用服务 正在处理该信息并将信息写入 MS SQL 数据库表并将其发送回应用程序。 之后,应用程序拥有订单 ID、价格和一些其他值,并启动 Paypal 流程。付款完成后 成功后,Paypal 向 App 发送“PaymentConfirmation info”消息。该应用程序按顺序连接到我的应用程序服务 写 payment_status = "true"。现在我可以使用 Windows 应用程序(由我编写)从数据库中提取所有订单以进行进一步处理。为此,我搜索所有订单 payment_status =“真”。之后,我用“order_finished”=“true”标记它们,这样下次我从数据库中提取订单时,我只会获得 payment_status =“true”和 order_finished =“false”的新订单。

  2. 与上面完全一样,但是现在在 Paypal 向 App 发送“PaymentConfirmation info”消息后,互联网连接得到 中断(这可能在开车或坐火车时发生),因此该应用程序无法连接到我的 Azure 应用程序服务,因此无法连接到数据库以写入 payment_status =“true”。 这意味着我的客户为他们的订单付款,但我永远无法处理他们的订单……大问题。

问题:将特定订单(根据订单 ID)的付款确认信息输入我的数据库的最佳方式是什么?还有什么其他方法可以将 Paypal 确认信息输入数据库? 其他 Paypal 付款流程如何运作,或者您如何实现成功的 Paypal 付款流程?

问候,

亚当

编辑:(对 Adrian Hall 的回答)

考虑我的第二个例子,其中互联网连接丢失,!after!用户支付了他的订单。 将一些信息保存到离线表并不能 100% 解决我的问题。一旦连接丢失并且 我强制用户(客户)建立互联网连接,以便我的 android 应用程序能够将 payment_status = "true"(借助离线表)设置到我在 Azure Cloud 中的 SQL Server(借助我的应用程序(移动)服务), 客户可以中断该过程。否则,他可能无法在给定的时间内恢复互联网连接,因此他被迫关闭应用程序,并且可能再也不会启动我的应用程序,所以我永远不会得到 payment_status ="true". 这将导致这种情况,即他支付了他的订单,却从未从我这里收到他的 cargo 。

难道没有机会将“订单 ID”与 Paypal 付款关联起来吗?然后我可以扩展我的 Windows 应用程序并向 Paypal 服务器询问该“订单 ID”以及它是否已付款,然后进一步处理已付款的订单。

已编辑:

有一种叫做 Paypal IPN 的东西。 IPN 联系您服务器上的给定 URL 并发送一些信息来验证付款。也许我应该在我的服务器上实现一个 IPN Lister...但是我应该如何告诉 Paypal 将我生成的“订单 ID”连同 IPN 请求一起发送到我的服务器,以便我可以识别特定的订单。然后我可以在“订单 ID”的帮助下设置 payment_status =“true”。

知道如何实现吗?

最佳答案

使用 Azure 移动应用程序,您可以使数据库表“离线”。在这种情况下,您可以写入本地 SQLite 数据库,然后随时将更改推送到远程数据库。大多数时候,您会写入 SQLite 数据库,然后立即同步。如果失败,您可以重试计时器,等待 an event或者让用户按下按钮。届时,更改将被同步。

由于您始终在用户设备上拥有数据副本,因此您始终可以通过手机查询状态,即使在断开连接时也是如此。但是,在设备再次连接之前,远程数据库不会反射(reflect)更改。

Azure 文档中提供了更多信息:https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-android-get-started-offline-data/

关于android - 带有服务器和数据库的移动应用程序中的 Paypal 支付流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920438/

相关文章:

c# - con.Open() 失败异常 具有 IsolationLevel 快照的事务无法提升

android - 如何从 Phonegap 打开 Google Play 商店

SQL 查询错误 - 错误源 : .Net SqlClient 数据提供程序

c# - 对 SQL Server 2008 全文搜索的担忧

php - 如何在 Paypal 中分多个阶段处理付款?

asp-classic - msxml3.dll 错误 '80072f0c' 需要证书才能完成客户端身份验证

ruby-on-rails - Rails 中的语句类过时了吗?

Android JSON 数组返回 TRANSFORM_ERROR : 103

java - 如何从命令行重新编译jar文件

java - JMock jar 不适用于 Android 测试项目(项目未构建)