在我正在处理的 Android 应用中,我们遇到了有关付款的问题。
当用户想要下订单时,我们会发出一个 API 请求,该请求将返回付款 URL 和付款 ID。 URL 是我们将打开用于付款的网页,ID 用于从我们的 API 检索付款状态。当我们从 API 请求付款状态时,它将返回“成功”、“已取消”或“待处理”。当付款完成或用户单击付款网页内的取消链接时,用户将被重定向到由应用程序处理的 URL。如果用户被重定向,我们将进入订单确认页面(付款成功时)或返回结账页面(通过点击网页中的取消链接取消付款时)。使用 Chrome 自定义选项卡打开付款网页。
当用户在完成或取消付款之前关闭浏览器,然后返回到我们的应用程序时,就会出现此问题。当用户在没有被浏览器重定向的情况下返回我们的应用程序时,应用程序将发出状态请求以检查我们是否应该进入订单确认页面。当浏览器关闭时,可能会发生以下情况之一:
- 用户已付款,但在重定向发生之前关闭了浏览器。状态请求将返回“成功”,我们可以进入订单确认屏幕。
- 用户尚未付款,在付款网页中点击了取消按钮,但在重定向发生之前关闭了浏览器。状态请求将返回“已取消”,我们可以将用户带回结帐屏幕。
- 用户已付款,但付款仍在处理中。用户关闭浏览器并返回到应用程序。状态请求将返回“待处理”
- 用户不想付款,只是关闭了浏览器,因为他想返回结账页面更改表单中的某些内容,状态请求将返回“待处理”,因为 API 不知道用户关闭了浏览器浏览器
场景 1 和 2 完全没问题,但场景 3 和 4 会出现问题。当状态请求返回“待处理”时,应用程序不知道是场景 3 还是场景 4。应用程序将在结账屏幕顶部显示一个对话框,显示“付款待处理”。问题是,当发生这种情况时,应用程序不知道 1) 付款是否仍在处理中并且会在未来某个时候成功,或者 2) 永远不会成功,因为用户从未付款。如果用户关闭这个对话框,仍有可能支付成功而用户不知道。我们收到了很多用户的投诉,他们关闭了此对话,然后尝试再次订购,导致意外的重复订单。
我们尝试了一些解决方法,让对话在至少 30 秒内不可关闭,以便给付款一些时间来处理,但这会给刚刚关闭对话返回结账屏幕的用户带来非常糟糕的用户体验(场景4).
我们是否缺少任何可以解决该问题的 Android 功能?还有其他解决办法吗?我们希望看到其他应用程序的方法。
最佳答案
这就是我的处理方式:
用户选择产品后,您应该为这些产品创建一个订单实体,并在此级别为订单提供一个 ID 用户无法更改应付款的订单或取消订单(或者更改它时您将取消订单更改后,您将为其创建一个新订单)将付款 ID 分配给订单,当用户想要支付订单时,检查订单的最后付款 ID 并指定订单的付款状态。 如果在用户支付订单之后和浏览器重定向到应用程序之前,用户有可能关闭浏览器,这不是问题,因为在用户返回到应用程序的订单 Activity 之后,我们已经存储了当前订单的最后一次付款 ID,并且我们可以检查付款状态并据此采取行动,如果订单处于待处理状态(假设付款服务需要 30 分钟来进行付款处理并指定付款成功或失败),我们可以告诉用户并为其提供取消付款的选项,如果资金已转换为取消的付款,我们应该退回资金(这种情况不应该发生,因为您已通过付款服务检查了付款状态,并且该状态处于待处理状态,并且您向付款服务表示:应该取消用户的待付款),我们也应该取消订单。
如果您有其他场景或此场景中的一些错误,请告诉我找到解决方案
关于android - 当用户关闭支付浏览器时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60039804/