Вызов приложений UPI из моего приложения react-native работает в iOS, но не в Android

#android #react-native #google-pay #paytm #upi

#Android #react-native #google-pay #paytm #upi

Вопрос:

Я пытаюсь вызвать несколько распространенных приложений UPI ( Google Pay , Phone Pay , PayTM ) с помощью deep links .

 
openPaymentApp = async (payApp) => {
    let url = '';
    switch(payApp) {
        case 'PAYTM'   : url = 'paytmmp'; break;
        case 'GPAY'    : url = 'gpay'; break;
        case 'PHONEPE' : url = 'phonepe'; break;
    }
    url = url   '://upi/pay?pa=7024293076@upiamp;pn=DK Boseamp;mc=0000amp;tr=123456789ABCDEFGamp;tn=HelloWorldamp;am=11amp;cu=INR'
    console.log('URL : ',url);
    try {
        await Linking.openURL(url);
    }
    catch (err) {
        console.error('ERROR : ',err);
    }
}

render(){
    return (
        <View style={{alignItems:"center",justifyContent:"center",flex:1}}>
            <Button title='PAYTM'    onPress={() => this.openPaymentApp('PAYTM')}/>
            <Button title='GPAY'     onPress={() => this.openPaymentApp('GPAY')}/>
            <Button title='PHONE PE' onPress={() => this.openPaymentApp('PHONEPE')}/>
        </View>
    );
}

 

Он отлично работает в iOS, т.Е. При открытии глубоких ссылок открываются соответствующие приложения, и приложение автоматически переходит на страницу платежей UPI с предварительно заполненными полями VPA, Name, Amount, Note и т. Д.

Но на Android у меня следующие проблемы :

  • GPay : Приложение не открывается.
  • Paytm : Приложение открывается, но не переходит на страницу платежей UPI
  • PhonePe : Приложение открывается, но не переходит на страницу платежей UPI

Когда я попытался использовать upi deeplink по умолчанию, на Android он выдает всплывающее окно для выбора приложения UPI. Но там перечислены только Google Pay и iMobile (от ICICI), Paytm и Phonepe не указаны в этом всплывающем окне.

 upi://pay?pa=7024293076@upiamp;pn=DK...

 

Отличаются ли Deeplinks приложения для оплаты UPI для iOS и Android?

Что еще нужно сделать, чтобы открыть приложение и перейти на страницу оплаты UPI с предварительно заполненными полями?

Комментарии:

1. в моем случае gpay app opend не смог произвести платеж, столкнувшись с проблемой «ваши деньги не были списаны»

Ответ №1:

Рабочие глубокие ссылки для этих приложений Android:

Paytm:

 paytmmp://pay?pa=your@vpaamp;pn=YourNameamp;tn=Noteamp;am=1amp;cu=INR
 

Phonepe:

 phonepe://pay?pa=your@vpaamp;pn=YourNameamp;tn=Noteamp;am=1amp;cu=INR
 

GPay

 tez://upi/pay?pa=your@vpaamp;pn=YourNameamp;tn=Noteamp;am=1amp;cu=INR
 

Комментарии:

1. в моем случае «Ваши деньги не были списаны»

2. Я предполагаю (не знаю, только предполагаю), что UPI каким-то образом блокирует эти ссылки, если они не генерируются каким-либо авторизованным торговым приложением (я думаю, они думают, что они могут быть использованы мошенниками не по назначению).

3. вы нашли решение @Ajith?

Ответ №2:

Я решаю одним способом, но это не лучшее решение, которое я знаю. Пока я решаю проблему, перенаправляя ее в браузер в параметрах, и из браузера я открываю ссылку intent.

Пример-

www.website.com?paymentinfo=intent://pay?pa=payu@axisbankamp;pn=company LIMITEDamp;tr=12703860471amp;tid=COBya9xXv2VWZ7Zcamp;am=4.00amp;cu=INRamp;tn=OrderId-COBya9xXv2VWZ7Zc#Intent;scheme=upi;package=com.phonepe.app;S.browser_fallback_url=https://play.google.com/store/apps/details?id=com.phonepe.appamp;hl=en_IN;end

после получения информации об оплате я открываюсь в браузере с помощью window.open (paymentinfo)

Ответ №3:

Это решение, которое вы ищете. Код должен выглядеть примерно так:

  openPaymentApp = async (payApp) => {

    let url = '';
    switch(payApp) {
        case 'PAYTM'   : url = 'paytmmp://'; break;
        case 'GPAY'    : url = 'tez://upi/'; break;
        case 'PHONEPE' : url = 'phonepe://'; break;
    }
    url = url   'pay?pa=7024293076@upiamp;pn=DK Boseamp;mc=0000amp;tr=123456789ABCDEFGamp;tn=HelloWorldamp;am=11amp;cu=INR'
    console.log('URL : ',url);
    try {
        await Linking.openURL(url);
    }
    catch (err) {
        console.error('ERROR : ',err);
    }
}

render(){
    return (
        <View style={{alignItems:"center",justifyContent:"center",flex:1}}>
            <Button title='PAYTM'    onPress={() => this.openPaymentApp('PAYTM')}/>
            <Button title='GPAY'     onPress={() => this.openPaymentApp('GPAY')}/>
            <Button title='PHONE PE' onPress={() => this.openPaymentApp('PHONEPE')}/>
        </View>
    );
}
 

Надеюсь, это поможет. Приветствия!