Android UPI支付 Intent 总是失败

标签 android deep-linking upi

这就是我想做的。我的应用程序有两种类型的用户 - 买家和卖家。卖家可以提供其 UPI ID,买家可以使用其设备上安装的任何 UPI 应用程序,通过提供的卖家 UPI ID 向卖家付款。

我正在构建一个 UPI 付款 URL,如下所示:

String upiPaymentUrl = upi://pay?pa=<<Seller VPA ID>>&pn=<<Payee name>>&tn=<<Txn description>>&cu=INR

然后,我使用以下代码显示手机上所有启用 UPI 的应用程序:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(upiPaymentUrl));
Intent chooser = Intent.createChooser(intent, getString(R.string.payment_title));
startActivityForResult(chooser, Constant.REQUEST_CODE_UPIPAYMENT, null);

所选的 UPI 应用程序已启动,并且我在 URI 中提供的所有数据均已正确填写。然后我发起付款,但付款总是失败。当我按原样使用 UPI 应用程序(无需从我的应用程序调用)并使用与构建 UPI URL 相同的值时,付款会顺利进行,不会出现任何错误。知道当我从我的应用程序调用 UPI 应用程序时,可能会导致付款失败的原因是什么吗?

任何帮助/建议将不胜感激!

最佳答案

这是我的用例。我有一个市场应用程序,买家和卖家都可以在其中自行注册。卖家列出他们的产品。买家提出购买产品。卖家提供 UPI 信息(UPI ID 或“一体化”二维码)。买方使用卖方通过应用提供的 UPI 信息发起付款。

实现此目的的一种方法是将自己注册为 NCPI (infinit.co.in) 的独立开发人员并申请使用 UPI。我还不知道完整的流程,因为我一直在请求访问 UPI(!)。我的假设是,一旦允许访问,您就可以向 UPI 基础设施注册您的私钥。要发起付款,请创建 UPI 深层链接 URL,如下所示。

upi://pay?pa=<>&pn=<>&tn=<>&cu=INR

使用您的应用附带的公钥对此进行签名。 @JensV 提到的 UPI 开发者文档中提供了要签署的规范。

现在,如果您不想执行上述任何操作,有哪些可用选项?我看到两种选择:一种要求卖家提供他们的 UPI ID,并在您的应用程序中允许买家将卖家 UPI ID 复制到剪贴板上,以便他们可以打开任何 UPI 支付应用程序(GPay、Paytm 等)并粘贴发起付款时的 UPI ID。另一种巧妙的方法是要求卖家获取“一体化”商家二维码。使用任何库(有很多)扫描 QR 码,您将获得一个“签名”的 UPI URL(大多数情况下)。现在您所要做的就是使用 Intent 使用此“签名”URL 启动 UPI 应用程序。通过这种方法,我可以使用除 GPay 之外的所有应用程序进行付款(!)。

更多信息 - 如果您无法获得签名的 UPI URL,您仍然可以使用上面提到的原始 UPI URL。只有通过发卡机构的UPI应用程序才能成功付款。即,如果您使用的 UPI ID 的发行人是 HDFC 银行,则使用“未签名”的 UPI URL,您可以调用 HDFC 移动银行应用程序并进行付款。总会成功的。

如果我能够以开发者身份向 UPI 注册并能够注册我的私钥,我将更新此线程来解释该过程。

关于Android UPI支付 Intent 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64605705/

相关文章:

android - 为什么 android 深度链接使我在 Whatsapp 上的链接在 Whatsapp 的应用程序中打开?

ios - 单击从 Web 应用程序共享的链接时,如何从 iOS 设备打开应用程序?

android - 如何解决来自 UPI sdk 的未定义响应?

security - 使用 UPI(特别是 GooglePay)验证付款是否实际完成

java - 新 POJO 对象的问题

android - ListView 只有一项

android - LoaderManager 与多个加载器 : how to get the right cursorloader

java - 在存储在 sqlite 数据库 android 中的 float 之前 5 分钟通知

Android 深层链接仅适用于某些网站

java - UPI交易ID是如何生成的