You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非商家身份下Jetpack Compose应用UPI深度链接支付失败求助

UPI好友转账失败的问题解决

你遇到的支付失败是因为生成的UPI链接里包含了tid(交易ID)和tr(交易参考ID)这两个参数——这俩是给商家/收单机构专用的,个人好友转账场景下完全不需要,GPay和PhonePe会识别这类参数为商家交易请求,而你没有商家资质,所以触发了安全拦截。

修正后的UPI链接生成代码

移除tid和tr参数,同时用标准URL编码处理空格(替换为%20):

fun getUPIString(
    payeeAddress: String,
    payeeName: String,
    trxnNote: String,
    payeeAmount: String
): String {
    val encodedPayeeName = payeeName.replace(" ", "%20")
    val encodedTrxnNote = trxnNote.replace(" ", "%20")
    return "upi://pay?pa=$payeeAddress&pn=$encodedPayeeName&tn=$encodedTrxnNote&am=$payeeAmount&cu=INR"
}

Jetpack Compose中调用示例

用rememberLauncherForActivityResult处理支付Intent的结果:

@Composable
fun UPIPaymentButton() {
    val paymentLauncher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartActivityForResult()
    ) { result ->
        // 解析支付结果,UPI返回的response格式通常为"txnId=xxx;responseCode=00;..."
        val response = result.data?.getStringExtra("response")
        // 根据responseCode判断支付状态,比如00代表成功
    }

    Button(onClick = {
        val upiUrl = getUPIString(
            payeeAddress = "your_friend@upi",
            payeeName = "好友姓名",
            trxnNote = "聚餐分摊",
            payeeAmount = "50.00"
        )
        val intent = Intent(Intent.ACTION_VIEW).apply {
            data = Uri.parse(upiUrl)
            // 可指定支付应用,或者去掉让用户自行选择
            // setPackage("com.google.android.apps.nbu.paisa.user") // GPay
            // setPackage("com.phonepe.app") // PhonePe
        }
        paymentLauncher.launch(intent)
    }) {
        Text("发起UPI转账")
    }
}

官方规范参考

个人UPI转账遵循NPCI(国家支付公司)的UPI Deep Link规范,核心必填参数仅需:

  • pa:收款方UPI ID
  • pn:收款方名称
  • tn:交易备注
  • am:交易金额
  • cu:货币代码(默认INR)

Android端Intent调用规范可参考Android官方Intent文档,UPI深层链接的完整规范可查阅NPCI官方发布的《UPI Deep Link Specification》。

内容的提问来源于stack exchange,提问作者Abhigyan Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:05:12