UPI App使用Intent深度链接 - 不一致和错误的行为

时间:2017-07-08 11:52:38

标签: android android-intent upi

我使用intent深度链接了我的Android原生应用中的UPI应用。我用各种UPI应用程序测试了这个,如BHIM,PhonePe,AXIS,UnionBank,Pockets等。

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

" UPI://支付PA = XXXXX @ UPI&安培; PN =收款人&安培; AM = 5.00&安培; TN = Test_Transaction"

  1. 大多数应用在响应意图时都会响应。他们上线了。
  2. 很少有应用正确显示付款页面金额。 Rest应用程序根本不显示页面。 PhonePe,Axis显示。 BHIM没有显示付款页面
  3. 付款已成功完成,仅限PhonePay和Axis
  4. UPI付款成功完成后,UPI应用程序关闭,控件又回到我的应用程序。但是响应数据始终为NULL。付款成功时,该应用程序没有提供响应数据
  5. 如果付款失败或我在UPI应用程序中取消付款,或者我没有输入正确的PIN并关闭UPI应用程序,则大多数应用程序都不会返回响应数据。
  6. 只有AXISPay返回了响应数据: 意图{(有额外的)}
  7. 任何人 - 任何评论?为什么这种不一致的行为?

    令人惊讶的是没有与BHIM应用程序合作的深层链接。

    如果有人想要尝试,我可以分享Android代码。

4 个答案:

答案 0 :(得分:6)

它也适用于BHIM应用程序。使用此代码,它就像每个支持PSP的应用程序的魅力一样。

  

注意:而不是使用"%"更好地使用" +"从URL中替换空格。这更好。

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);
            }

答案 1 :(得分:0)

要正确显示付款页面,您必须setAction(Intent.ACTION_VIEW)了解您的意图。

我只通过在Intent数据上使用getStringsExtra("response")从BHIM app获得回复。

答案 2 :(得分:0)

PATH

答案 3 :(得分:-1)

这是我为Redmi Note 5 Pro和其他MI手机解决的方法:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(UPI));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
} else {
    Toast.makeText(this, "No application available to handle this request!", Toast.LENGTH_SHORT).show();
}