从我的 react-native 应用程序调用 UPI 应用程序在 iOS 中有效,但在 Android 中无效
Posted
技术标签:
【中文标题】从我的 react-native 应用程序调用 UPI 应用程序在 iOS 中有效,但在 Android 中无效【英文标题】:Invoking UPI apps from my react-native App works in iOS but not in Android 【发布时间】:2021-03-24 03:42:25 【问题描述】:我正在尝试使用 deep links
调用几个常见的 UPI 应用程序(Google Pay
、Phone Pay
、PayTM
)。
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@upi&pn=DK Bose&mc=0000&tr=123456789ABCDEFG&tn=HelloWorld&am=11&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、名称、金额、注释等字段。
但在 android 上我有以下问题:
GPay
: 应用打不开。
Paytm
: 应用打开但未进入 UPI 支付页面
PhonePe
: 应用打开但没有进入 UPI 支付页面
当我尝试使用默认的 upi 深层链接时,在 android 上它会弹出一个选择 UPI 应用程序的窗口。但是那里只列出了 Google Pay 和 iMobile(来自 ICICI),Paytm 和 Phonepe 没有在该弹出窗口中列出。
upi://pay?pa=7024293076@upi&pn=DK...
Deeplinks
的 UPI 支付应用在 iOS 和 Android 上是否不同?
还需要做什么才能打开应用程序并移动到预填字段的 UPI 支付页面?
【问题讨论】:
【参考方案1】:适用于这些 Android 应用的深层链接是:
支付宝:
paytmmp://pay?pa=your@vpa&pn=YourName&tn=Note&am=1&cu=INR
电话:
phonepe://pay?pa=your@vpa&pn=YourName&tn=Note&am=1&cu=INR
GPay
tez://upi/pay?pa=your@vpa&pn=YourName&tn=Note&am=1&cu=INR
【讨论】:
【参考方案2】:我正在以一种方式解决问题,但这不是我所知道的最佳解决方案。到目前为止,我正在通过将其重定向到 params 中的浏览器并从浏览器中打开意图链接来解决问题。
例子-
www.website.com?paymentinfo=intent://pay?pa=payu@axisbank&pn=company LIMITED&tr=12703860471&tid=COBya9xXv2VWZ7Zc&am=4.00&cu=INR&tn=OrderId-COBya9xXv2VWZ7Zc#Intent;scheme=upi;package=com.phonepe.app;S.browser_fallback_url=https://play.google.com/store/apps/details?id =com.phonepe.app&hl=en_IN;结束
收到付款信息后,我使用 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@upi&pn=DK Bose&mc=0000&tr=123456789ABCDEFG&tn=HelloWorld&am=11&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>
);
希望这会有所帮助。干杯!
【讨论】:
以上是关于从我的 react-native 应用程序调用 UPI 应用程序在 iOS 中有效,但在 Android 中无效的主要内容,如果未能解决你的问题,请参考以下文章
如何从我的 react-native 项目构建 android apk?
connect redux函数不能与react-native一起使用
React-Native:我退出我的应用程序后,messaging().onNotificationOpenedApp 没有调用