我已经使用 Intent 从我的Android native 应用程序中将UPI应用程序进行了深层链接。我已经使用各种UPI应用(例如BHIM,PhonePe,AXIS,UnionBank,Pockets等)对此进行了测试。

我创建了推送付款URI。我能够启动各种UPI应用程序。但是,行为是非常不一致的。

“upi://pay?pa=xxxxx@upi&pn=payee&am=5.00&tn=Test_Transaction”

  • 调用Intent时,大多数应用程序都在响应。他们被发射了。
  • 几个应用程序正确显示了带有金额的付款页面。其余应用程序根本不显示该页面。
    PhonePe,显示轴。 BHIM未显示付款页面
  • 仅通过PhonePay和Axis成功完成了付款
  • 成功完成UPI付款后,UPI应用程序已关闭,控制权返回到我的应用程序。但是,响应数据始终为NULL。付款成功后,应用程序无人提供响应数据
  • 如果付款失败,或者我在UPI应用程序中取消付款,或者我没有输入正确的PIN并关闭UPI应用程序,则大多数应用程序不会返回响应数据。
  • 仅AXISPay返回了响应数据:
    目的{

    任何人-有何评论?为什么会有如此不一致的行为?

    令人惊讶的是,深层链接无法与BHIM应用一起使用。

    如果有人想尝试,我可以共享android代码。

    最佳答案

    它确实也适用于BHIM应用程序。使用此代码,对于每个启用PSP的应用程序,它就像一个魅力。


    private String getUPIString(String payeeAddress, String payeeName, String payeeMCC, String trxnID, String trxnRefId,
                                String trxnNote, String payeeAmount, String currencyCode, String refUrl) {
        String UPI = "upi://pay?pa=" + payeeAddress + "&pn=" + payeeName
                + "&mc=" + payeeMCC + "&tid=" + trxnID + "&tr=" + trxnRefId
                + "&tn=" + trxnNote + "&am=" + payeeAmount + "&cu=" + currencyCode
                + "&refUrl=" + refUrl;
        return UPI.replace(" ", "+");
    }
    

    然后在方法中传递参数,并以这种方式将字符串传递给Intent:
    Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(UPI));
                Intent chooser = Intent.createChooser(intent, "Pay with...");
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    startActivityForResult(chooser, 1, null);
                }
    

  • 10-04 20:01