一些背景:
在我于 2020 年 6 月/7 月左右开发的一个 Web 应用程序中,我实现了一个 HTML 按钮,单击该按钮时会将用户(在智能手机上)引导至 UPI 应用程序,以便与预先填充的收件人和金额进行付款。它曾经按预期工作,但最近开始出现问题。
问题:
按钮链接是这样的:
<a href="upi://pay?pa=abc_user@xyz_bank&mc=1234&pn=abc_user%40xyz_bank&tid=czzzxnkjcnkjdfdvjndkjfvn&tr=4zzz894398cndhcd23&tn=aaa&am=500&mam=null&cu=INR" class="btn btn-primary">Go</a>
现在,当单击此按钮时,会将用户发送到 UPI 应用程序,例如 Google Pay;但是当交易被确认时,它会显示这样的错误:
Payment failed
You've exceeded the transaction amount set by your bank.
此错误仅在通过网络应用程序中的链接进行付款时显示。当手动尝试相同的交易时,即通过进入 UPI 应用程序并在确认之前填写详细信息,它可以正常工作。
我想知道这种行为的原因是什么,特别是因为它不久前工作得很好。
附加信息:
我在某些帖子中读到,一些 UPI 应用程序(包括 Google Pay)已开始拒绝外部发起的付款,但我尚未找到任何相关的官方信息。
尝试使用商户VPA完成交易。当您使用 upi:// 深层链接发起交易时,您还可以回调,您只需要点击一个意图并在结果启动器或 onActivityResult 中写入捕获它的响应
val upiIntent= Intent(Intent.ACTION_VIEW, Uri.parse(link))
upiPaymentResult.launch(browserIntent)
回调:
private var upiPaymentResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data: Intent? = result.data
if (data != null) {
val extra = data.extras
if(extra!=null){
val keySet = extra.keySet()
val jsonObject = JSONObject()
keySet.forEach {
jsonObject.put(it, extra.get(it).toString())
}
Log.d("UPI RESPONSE", jsonObject.toString())
}
}
}
}
电话响应示例:
{"Status":"Failed","isExternalMerchant":"true","txnRef":"","response":"txnId=YBL8bc3&txnRef=644&Status=Failed&responseCode=01","bleTxId":"T2309064","txnId":"YB163914093a93649a9","responseCode":"01"}