使用 UPI url 调用 PSP 应用程序

Invoke PSP app with UPI url

我正在尝试创建一个商家应用程序,它将根据 NPCI 的指南生成 url。此 url 将作为意图共享,PSP 应用程序(任何已注册的银行应用程序)应该能够收听该 url 并被调用。

我已经形成了这样的url:-

upi://pay?pa=icici/name&pn=USER_NAME&tid=422d97c1-f0fc-4bea-b24a-511ffa85e86f&am=442.87&tn=Test%transaction

现在我发送这样的意图:-

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, UPI);
sendIntent.setType("text/plain");
startActivity(sendIntent);

Icici 银行应用程序未显示在接收方应用程序中。我是否正确创建了 url?

UPI 刚发布不久,网上找不到好的资源

注意 - 在 url 中,tid(交易 ID)是在我的应用程序中生成的随机 uuid。

找到了正确的方法。 您需要按照问题中提到的正确方式构建 URL 。之后,这个 URL 必须转换为 URI 并作为数据发送给意图。

Intent intent = new Intent();
intent.setData(Uri.parse(UPI));
Intent chooser = Intent.createChooser(intent, "Pay with...");
startActivityForResult(chooser, 1, null);

之后,在您的 onActivityResult 中,检查 requestCode 和 id 收到的意图数据是否为空。 如果不是,则数据将包含一个 stringExtra 作为 response。 此响应将包含状态、交易参考、交易 ID 和响应代码。

此外,url 中的空格应替换为“+”而不是“%”。

要使应用程序显示为 UPI 意图接收器,它需要在其清单文件中注册此 UPI uri,以便它可以收听其他应用程序抛出的此类广播意图。 通过网络尝试了此操作,我能够调出 "Phone Pe" 应用程序来支付该特定应用程序的费用。我在我的 phone 中也安装了 Bhim 和 Icici,但它们没有出现并且 "Phone Pe" 是默认启动的,所以我假设他们没有向他们注册 UPI uri Intent。

编辑:Android App to App 我可以打开 Phone Pe 和 BHIM,我猜 ICICI 应用没有这个意图注册所以它没有显示。