Создание ссылок на приложение UPI с использованием намерения - непоследовательное и ошибочное поведение

Я добавил ссылки на приложения UPI из моего собственного приложения для Android, используя намерение. Я тестировал это с различными приложениями UPI, такими как BHIM, PhonePe, AXIS, UnionBank, Pockets и т. Д.

Я создал URI принудительного платежа. Я могу запускать различные приложения UPI. Однако поведение довольно непоследовательное.

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

  1. Большинство приложений реагируют на вызов намерения. Они запускаются.
  2. некоторые приложения правильно отображали платежную страницу с суммой. Остальные приложения вообще не отображали страницу. PhonePe, отображается Axis. BHIM не отображал страницу оплаты
  3. Платеж успешно завершен ТОЛЬКО с помощью PhonePay и Axis
  4. После успешного завершения оплаты UPI приложение UPI закрывается, и управление возвращается моему приложению. Однако данные ответа всегда NULL. НИ ОДИН из приложений не предоставляет данные ответа при успешном платеже.
  5. Если платеж не проходит, или я отменяю платеж в приложении UPI, или я не ввожу правильный PIN-код и закрываю приложение UPI, большинство приложений не возвращают данные ответа.
  6. Только AXISPay вернул данные ответа: Intent {(has extras)}

Кто-нибудь - есть комментарии? Почему такое непоследовательное поведение?

Удивительно, но глубокие ссылки не работают с приложением BHIM.

Я могу поделиться кодом Android, если кто-то захочет попробовать.


person Haresh Gujarathi    schedule 08.07.2017    source источник
comment
Как и в случае с опцией Pay, есть ли глубокая ссылка для запроса денег через UPI?   -  person Malav Shah    schedule 11.12.2017


Ответы (4)


Это действительно работает и для приложения 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);
            }
person Meet    schedule 29.09.2017
comment
оно работает. но не могли бы вы сказать мне точное использование refUrl = + refUrl в приведенном выше URI - person Govinda Paliwal; 02.12.2019
comment
Привет, кто-нибудь имеет представление об ограничениях на количество символов? и разрешенные специальные символы для намерения UPI? - person BHAR4T; 08.03.2021

Для правильного отображения страницы оплаты вы должны setAction(Intent.ACTION_VIEW) в соответствии с вашим намерением.

Я получаю ответ только от приложения BHIM, используя getStringsExtra("response") в данных Intent.

person Rishabh Mishra    schedule 10.07.2017
comment
Не за что - person Rishabh Mishra; 24.07.2017
comment
@RishabhMishra - это ответ также в этом формате upi: // pay? Pa=xxxxx@upi&pn=payee&am=5.00&tn=Test_Transaction - person MSD; 10.05.2018

Вот как я решил это для 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();
}
person Siddharth Jaswal    schedule 11.10.2019

person    schedule
comment
Добро пожаловать в Stack Overflow! Пожалуйста, не бросайте сюда свой исходный код. Будьте вежливы и постарайтесь дать хорошее описание своему ответу, чтобы он понравился другим и поддержал его. См .: Как написать хороший ответ? - person sɐunıɔןɐqɐp; 21.05.2018