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

RazorPay Android集成问题:使用callback_url时卡在支付成功页

解决RazorPay Android SDK测试模式下支付成功后卡在页面的问题

我来帮你梳理下这个问题的原因和解决方案,你遇到的测试模式下支付成功后停留在RazorPay页面、无法触发APP内回调的情况,核心问题是你的callback_url返回的响应格式不符合RazorPay的要求,和你启动支付的代码逻辑关系不大。

为什么会卡住?

RazorPay的Webview在测试模式下,并不会直接识别你返回的JSON响应,它需要从callback_url获取一段带有自动跳转逻辑的HTML内容。如果返回纯JSON,Webview无法执行关闭/跳转操作,就会一直停留在成功页面,同时因为栈里多了一个回调页面,按返回键会出现两个选项。

具体修正步骤

  1. 修改回调接口的返回格式
    把你的${ApiConstant.BASE_URL}orders/payment接口返回的内容,从JSON{"payment": "success"}改成以下HTML代码:

    <html>
      <body>
        <script type="text/javascript">
          // 关闭RazorPay的Webview并触发APP内成功回调
          window.close();
          window.location.href = 'razorpay://payment/success';
        </script>
      </body>
    </html>
    

    这段脚本会自动关闭Webview,并通过深度链接通知APP支付成功,触发你APP内的回调逻辑。

  2. 确保APP内的回调逻辑正确实现
    你需要在对应的Activity/Fragment中实现RazorpayPaymentResultListener接口,来接收支付结果:

    class YourPaymentActivity : AppCompatActivity(), RazorpayPaymentResultListener {
        
        // ... 你的startPayment方法保持不变 ...
    
        override fun onPaymentSuccess(paymentId: String) {
            // 这里处理支付成功后的逻辑,比如更新订单状态、跳转页面等
            Toast.makeText(this, "支付成功!支付ID: $paymentId", Toast.LENGTH_LONG).show()
        }
    
        override fun onPaymentError(errorCode: Int, response: String?) {
            // 处理支付失败的逻辑
            Toast.makeText(this, "支付失败: $response", Toast.LENGTH_LONG).show()
        }
    }
    

    另外,如果你使用的是新版SDK,记得在初始化Checkout时绑定这个监听:

    co.setRazorpayPaymentResultListener(this)
    

额外说明

当你修改完回调接口的返回格式后,测试模式下支付成功后,Webview会自动关闭并回到你的APP,同时触发onPaymentSuccess方法,也就不会再出现返回键的两个选项了。

内容的提问来源于stack exchange,提问作者Aanal Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:32:53