我的应用程序有两种用户类型-买家和卖家。卖家可以提供自己的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应用程序时,是什么原因导致付款失败吗?
任何帮助/建议将不胜感激!
4条答案
按热度按时间wfsdck301#
下面是我的使用案例。我有一个Marketplace应用程序,买家和卖家都可以在其中注册。卖家列出他们的产品。买家提出购买产品。卖家提供UPI信息(UPI ID或“一体式”QR码)。买家使用卖家通过应用程序提供的UPI信息启动付款。
一种方法是在NCPI(www.example.com)注册为独立开发人员infinit.co.in并申请使用UPI。我还不知道完整的流程,因为我一直在请求访问UPI(!)。我的假设是,一旦允许访问,您就可以在UPI基础设施中注册您的私钥。要启动付款,请创建UPI深层链接URL,如下所示。
upi://支付?pa=〈〉&pn=〈〉&tn=〈〉&cu=印度卢比
使用您的应用随附的公钥对其进行签名。要签名的规范可在@JensV提到的UPI开发人员文档中找到。
那么现在如果你不想做以上任何一个选项有什么可用?我看到两个选项:一个要求卖家提供他们的UPI ID,并在您的应用程序中允许买家复制剪贴板上的卖家UPI ID,以便他们可以打开任何UPI支付应用程序(GPay、Paytm等),并在开始付款时粘贴UPI ID。另一个简洁的方法是要求卖家获取“一体化”商家二维码。(有很多)扫描二维码,你会得到一个“签名”的UPI网址(大多数情况下)。现在你所要做的就是使用意图启动UPI应用程序使用这个“签名”的网址。有了这个方法,我能够执行支付与所有的应用程序,除了GPay(!)。
还有一个信息-如果您没有办法获得签名的UPI URL,您仍然可以使用上面提到的原始UPI URL。只有通过发卡行的UPI应用程序付款才能成功。也就是说,如果您使用的UPI ID的发卡行是HDFC银行,那么使用“未签名”的UPI URL,您可以调用HDFC移动的银行应用程序并进行付款。它总是会成功的。
如果我能够以开发者的身份在UPI注册,并且能够注册我的私钥,我将更新这个线程来解释这个过程。
gpnt7bae2#
根据NPCI的新规定,所有的UPI应用程序都与最小交易量绑定。
如果收款人upiid注册为非业务upiid,则无法成功付款。
因此解决方案是创建新的业务UPI ID。
fhg3lkii3#
通过Intent启动付款时,您需要签署Intent。
请参见本文档中的黄色标记部分:https://web.archive.org/web/20200921110005/https://www.npci.org.in/sites/default/files/UPI%20Linking%20Specs_ver%201.6.pdf
原来的网址似乎死了,但引用了多个来源,包括谷歌。
这将导致类似以下的结果:
此外,参数
mode
和orgid
对于Intent创建的付款似乎是非可选的。我不太清楚你想达到什么目的。但是,由于我看到的API不是设计用于处理“用户对用户”支付的,我会验证你所做的事情是否实际上是允许的/可能的。你可能无法签署不是指向你公司的交易,从而使这成为不可能。
进一步强调这一点,为了签署Intent,您需要加密,这通常(在此类系统中)发生在您控制的服务器上,以进行逆向工程,从而伪造付款。
我找到的一些其他资源:
n9vozmp44#
要进行基于UPI意向的支付,您需要一个与当前帐户关联的UPI ID,该ID可由您的银行提供。请注意,属于Paytm或Google Pay企业帐户的UPI ID可能无法用于此目的。请务必向您的银行请求一个与当前帐户关联的UPI ID。获得此ID后,您可以使用它通过各种应用程序和平台进行UPI支付