UPI App Deep linking using Intent - inconsistent and buggy behavior

前端 未结 4 945
轮回少年
轮回少年 2020-12-08 08:29

I have deeplinked UPI apps from my android native app using intent. I have tested this with various UPI apps like BHIM, PhonePe, AXIS, UnionBank, Pockets etc.

I crea

相关标签:
4条回答
  • 2020-12-08 09:02

    For displaying payment page correctly, you have to setAction(Intent.ACTION_VIEW) on your intent.

    I am getting response only from BHIM app by using getStringsExtra("response") on Intent data.

    0 讨论(0)
  • 2020-12-08 09:14

    It really works for the BHIM application also. Use this Code it works like a charm for every PSP enabled applications.

    Note: Instead of using the "%" better to use "+" to replace the white space from the URL. That works better.

    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(" ", "+");
    }
    

    Then pass the parameters in the method and pass the string to the Intent in this way:

    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);
                }
    
    0 讨论(0)
  • 2020-12-08 09:17

    Here is how I solved it for Redmi Note 5 Pro and other MI phones:

    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();
    }
    
    0 讨论(0)
  • 2020-12-08 09:26
    public void UPI()
        {
             Long tsLong = System.currentTimeMillis()/1000;
             String transaction_ref_id = tsLong.toString()+"UPI"; // This is your Transaction Ref id - Here we used as a timestamp -
    
             String sOrderId= tsLong +"UPI";// This is your order id - Here we used as a timestamp -
    
             Log.e("TR Reference ID==>",""+transaction_ref_id);
            Uri myAction = Uri.parse("upi://pay?pa="+sVPA+"&pn="+"Merchant%20Finance"+"&mc="+"&tid="+transaction_ref_id +"&tr="+transaction_ref_id +"&tn=Pay%20to%20Merchant%20Finance%20Assets&am="+"1.00"+"&mam=null&cu=INR&url=https://mystar.com/orderid="+sOrderId);
    
    
             PackageManager packageManager = getPackageManager();
             //Intent intent = packageManager.getLaunchIntentForPackage("com.mgs.induspsp"); // Comment line - if you want to open specific application then you can pass that package name For example if you want to open Bhim app then pass Bhim app package name - 
             Intent intent = new Intent();
    
             if (intent != null) {
                 intent.setAction(Intent.ACTION_VIEW);
                 intent.setData(myAction);
                // startActivity(intent);
                 Intent chooser = Intent.createChooser(intent, "Pay with...");
                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                     startActivityForResult(chooser, 1, null);
                 }
    
             }
        }
    
    
    // For onActivityResult -
    
    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
    
            try
            {
                Log.e("UPI RESULT REQUEST CODE-->",""+requestCode);
                Log.e("UPI RESULT RESULT CODE-->",""+resultCode);
                Log.e("UPI RESULT DATA-->",""+data);
    
    
    
                if(resultCode == -1)
                {
    
                    // 200 Success
    
                }
                else
                {
                    // 400 Failed
                }
    
    
                YourActivity.this.finish(); 
    
    
            }
            catch(Exception e)
            {
                Log.e("Error in UPI onActivityResult->",""+e.getMessage());
            }
        }
    
    0 讨论(0)
提交回复
热议问题