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

移动端UPI应用支付链接如何获取交易状态及回调响应

UPI支付状态追踪方案

你用的这种普通UPI Deep Link(upi://pay?xxx)本身是前端跳转唤起支付,没有内置的回调机制,所以没法直接拿到交易状态。要实现成功/失败的追踪,得根据你的开发场景(原生APP/H5)选择对应的方案:

1. 原生APP场景(安卓/iOS)

UPI规范支持通过系统Intent的返回结果传递交易状态,以安卓为例:

  • 使用registerForActivityResult启动UPI支付Intent,支付完成后,UPI应用会返回包含交易状态的响应数据。
  • 核心代码示例:
val upiIntent = Intent(Intent.ACTION_VIEW).apply {
    data = Uri.parse("upi://pay?pa=upiaddress@okhdfcbank&pn=JohnDoe&cu=INR&tn=ORDER12345")
}

val activityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val response = result.data?.getStringExtra("response")
        // 解析response字段,格式类似:SUCCESS|txnId=12345&... 或 FAILURE|reason=...
        when {
            response?.startsWith("SUCCESS") == true -> {
                // 处理支付成功逻辑
            }
            response?.startsWith("FAILURE") == true -> {
                // 处理支付失败逻辑
            }
            else -> {
                // 交易待定,需要后续后端确认
            }
        }
    }
}

activityResultLauncher.launch(upiIntent)

iOS端同理,通过UIApplication.shared.open(_:options:completionHandler:)的completion回调,结合UPI应用返回的URL Scheme参数来解析状态。

2. H5/Web场景

纯静态H5无法直接监听UPI应用的返回结果,必须依赖后端配合:

  • 后端轮询方案:
    1. 支付链接中添加唯一订单号参数:tn=ORDER12345,确保UPI交易和你的订单关联。
    2. 用户点击支付后,前端跳转到UPI应用,同时后端开始定时调用NPCI的UPI交易查询API(需商家提前接入NPCI商户平台,获取API权限),查询依据为订单号或UPI返回的txnId。
    3. 前端每隔几秒轮询你的后端接口,获取最新的交易状态。
  • 第三方支付网关Webhook:
    如果接入了PhonePe、Paytm等第三方支付网关的商户服务,它们会提供Webhook机制——支付状态变更时,网关会主动向你的后端接口推送状态通知,前端再从后端同步结果。

关键注意事项

  • 必须在支付链接中加入tn参数(唯一订单号),这是关联UPI交易和业务订单的核心标识。
  • 纯前端方案无法实现可靠的状态追踪,因为交易查询需要商户身份验证,这些敏感逻辑必须放在后端。

内容的提问来源于stack exchange,提问作者Siddhartha Panda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:27:28