【发布时间】:2020-05-19 05:50:08
【问题描述】:
在我正在开发的 Android 应用中,我们遇到了付款问题。
当用户想要下订单时,我们会执行一个 API 请求,该请求将返回一个支付 URL 和一个支付 ID。 URL 是我们将为支付打开的网页,ID 用于从我们的 API 中检索支付状态。当我们从 API 请求付款状态时,它会返回“成功”、“已取消”或“待处理”。当支付完成或用户点击支付网页内的取消链接时,用户将被重定向到应用程序处理的 URL。如果用户被重定向,我们将进入订单确认页面(支付成功时)或返回结账页面(点击网页中的取消链接取消支付时)。付款网页使用 Chrome 自定义选项卡打开。
当用户在完成或取消支付之前关闭浏览器然后返回我们的应用程序时会出现此问题。当用户在没有被浏览器重定向的情况下返回我们的应用程序时,应用程序会发出一个状态请求来检查我们是否应该进入订单确认页面。当浏览器关闭时,可能会出现以下情况之一:
- 用户已付款但在重定向发生前关闭了浏览器。状态请求将返回“成功”,我们可以进入订单确认屏幕。
- 用户尚未支付,点击支付页面中的取消按钮,但在重定向发生前关闭了浏览器。状态请求将返回“已取消”,我们可以将用户返回到结帐屏幕。
- 用户已付款,但付款仍在处理中。用户关闭浏览器并返回应用程序。状态请求将返回“待处理”
- 用户不想付款,只是关闭了浏览器,因为他想返回结帐页面更改表单中的某些内容,状态请求将返回“待处理”,因为 API 不知道用户关闭了浏览器
场景 1 和 2 非常好,但 3 和 4 会导致问题。当状态请求返回“待处理”时,应用程序不知道是场景 3 还是 4。应用程序将在结帐屏幕顶部显示“付款待处理”的对话框。问题是,当这种情况发生时,应用程序不知道是否 1) 付款仍在处理中并且将来某个时间会成功,或者 2) 永远不会成功,因为用户从未付款。如果用户关闭这个对话框,仍然有可能支付成功,用户不知道。我们收到了很多用户投诉,他们关闭了此对话,然后再次尝试下单,导致意外重复下单。
我们尝试了一些解决方法,让对话在至少 30 秒内不可关闭,以便有一些时间来处理付款,但这会给刚刚关闭对话以返回结帐屏幕的用户带来非常糟糕的用户体验(场景4)。
我们是否缺少任何可以解决问题的 Android 功能?还有其他解决方案吗?我们希望看到其他应用程序的方法。
【问题讨论】:
-
支付提供商是否有任何 API 可以检查支付状态或确认您的支付?您能否分享有关您的支付提供商工作流程的更多详细信息?
-
我们的后端有一个端点,通过发送支付 ID 来检查支付状态。它可以返回成功、挂起或取消。
-
从支付提供商端完成支付状态需要多长时间?
-
您是 PSP 还是将用户重定向到您在其中拥有帐户的 PSP?换句话说,PSP还是PSP用户?
-
@MirMiladHosseiny 它可能需要 X 时间,通常是即时的,但并非适用于所有付款方式。
标签: android payment chrome-custom-tabs