UPI 付款 href 链接在确认交易时导致错误

问题描述 投票:0回答:1

一些背景:

在我于 2020 年 6 月/7 月左右开发的一个 Web 应用程序中,我实现了一个 HTML 按钮,单击该按钮时会将用户(在智能手机上)引导至 UPI 应用程序,以便与预先填充的收件人和金额进行付款。它曾经按预期工作,但最近开始出现问题。

问题:

按钮链接是这样的:

<a href="upi://pay?pa=abc_user@xyz_bank&amp;mc=1234&amp;pn=abc_user%40xyz_bank&amp;tid=czzzxnkjcnkjdfdvjndkjfvn&amp;tr=4zzz894398cndhcd23&amp;tn=aaa&amp;am=500&amp;mam=null&amp;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)已开始拒绝外部发起的付款,但我尚未找到任何相关的官方信息。

android web payment google-pay upi
1个回答
0
投票

尝试使用商户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"}
© www.soinside.com 2019 - 2024. All rights reserved.