Android UPI支付意图总是失败
这是我想做的。我的应用程序有两种类型的用户-买家和卖家。卖方可以提供其UPI ID,买方可以使用安装在其设备上的任何UPI应用程序,使用提供的卖方UPI ID向卖方付款 我正在构建一个UPI支付URL,如下所示:Android UPI支付意图总是失败,android,deep-linking,upi,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>>&
String upiPaymentUrl = upi://pay?pa=<<Seller VPA ID>>&pn=<<Payee name>>&tn=<<Txn description>>&cu=INR
启动所选的UPI应用程序,并正确填写我在URI中提供的所有数据。然后我开始付款,但付款总是失败。当我按原样使用UPI应用程序(未从我的应用程序调用)并使用与构建UPI URL相同的值时,付款将顺利进行,不会出现任何错误。当我从我的应用程序调用UPI应用程序时,知道是什么导致付款失败吗
如有任何帮助/建议,将不胜感激 通过意向启动支付时,您需要签署意向 请参阅本文档中的黄色标记部分: 最初的URL似乎已经死了,但被包括谷歌在内的多个来源引用 这将导致如下情况:
Uri uri =
new Uri.Builder()
.scheme("upi")
.authority("pay")
.appendQueryParameter("pa", "your-merchant-vpa@xxx")
.appendQueryParameter("pn", "your-merchant-name")
.appendQueryParameter("mc", "your-merchant-code")
.appendQueryParameter("tr", "your-transaction-ref-id")
.appendQueryParameter("tn", "your-transaction-note")
.appendQueryParameter("am", "your-order-amount")
.appendQueryParameter("cu", "INR")
.build();
// Sign the uri as specified
String signature = someSignatureFunction(uri);
uri.buildUpon()
.appendQueryParameter("sign", signature);
此外,参数mode
和orgid
对于意图创建的付款似乎是非可选的
我不太清楚你想完成什么。但是,因为我看到的API不是用来处理“用户对用户”付款的,所以我会验证您所做的是否确实是允许的/可能的。您可能无法签署不直接指向您的公司的交易,因此这是不可能的 进一步加强这一点,为了签署意图,您需要加密,加密通常(在此类系统中)发生在您控制的服务器上,以进行反向工程,从而伪造付款 免责声明:我对UPI没有过期性,因此这个答案主要是基于猜测而不是测试。我建议在发布之前在UPI上查找更多的资源
我还发现了一些其他资源:
- 单击npci主页上的“开发者”时,会链接Infinite.co.in
- -5.11解释签署意图概念及其一般工作原理
- -官方UPI产品页面,找不到太多有用的信息
如果我能够以开发者身份向UPI注册,并且能够注册我的私钥,我将更新此线程以解释此过程。根据NPCI的新规则,所有UPI应用程序都绑定最小交易量 如果接收方upi id注册为非业务upiid,则无法成功付款
因此,解决方案是创建新的业务UPI id。可能会检查结果
Uri
对象包含的内容。如果您的url参数中有一些奇怪的字符,则可能是解析错误。只是一个猜测,我们也尝试了简单的ASCII输入。问题不在于链接。UPI应用程序正在打开并显示URL中存在的正确值。当我开始支付时,它就失败了
Uri uri =
new Uri.Builder()
.scheme("upi")
.authority("pay")
.appendQueryParameter("pa", "your-merchant-vpa@xxx")
.appendQueryParameter("pn", "your-merchant-name")
.appendQueryParameter("mc", "your-merchant-code")
.appendQueryParameter("tr", "your-transaction-ref-id")
.appendQueryParameter("tn", "your-transaction-note")
.appendQueryParameter("am", "your-order-amount")
.appendQueryParameter("cu", "INR")
.build();
// Sign the uri as specified
String signature = someSignatureFunction(uri);
uri.buildUpon()
.appendQueryParameter("sign", signature);