React Native中使用one-react-native-upi遇类型错误及支付失败求助
解决one-react-native-upi的两个问题:TypeScript类型错误和支付失败
一、修复TypeScript类型错误
错误提示说明onSuccess回调的返回值类型不符合库的要求——库期望回调返回success类型的值,而你的当前函数返回void。
解决方案:
- 先确认库的类型定义:在VS Code中按住Ctrl点击
initiate方法,查看它的类型声明,明确success类型的具体结构(比如是一个包含status字段的对象,还是布尔值)。 - 调整
onSuccess函数的返回值,匹配success类型要求。
修改后的代码示例(假设success类型要求返回带status字段的对象):
const onSucess = () => { console.log('Success:'); return { status: 'SUCCESS' }; // 返回符合success类型的结构 }; const onFailure = (e: any) => { console.log('Failure:', e); }; const payNow = () => { OneUpi.initiate( { upiId: 'xxxx@upiID', name: 'xxxx', note: 'Deposit', amount: '10', targetPackage: 'com.google.android.apps.nbu.paisa.user', }, onSucess, onFailure, ); };
如果不确定success类型结构,也可以先尝试返回true(部分库的success回调仅要求返回布尔值),再根据类型提示调整。
二、解决支付失败("No Action Taken")问题
这个错误通常和UPI应用唤起逻辑、参数有效性有关,常见排查方向:
移除targetPackage,使用系统选择器:
com.google.android.apps.nbu.paisa.user是Google Pay的包名,但如果设备未安装该版本应用、或包名不匹配,就会唤起失败。可以移除targetPackage字段,让系统弹出所有可用UPI应用供用户选择:const payNow = () => { OneUpi.initiate( { upiId: 'xxxx@upiID', name: 'xxxx', note: 'Deposit', amount: '10', // 移除targetPackage字段 }, onSucess, onFailure, ); };验证UPI ID有效性:确保
upiId是已激活的合法收款ID(比如xxx@paytm、xxx@okaxis),避免拼写错误或使用未绑定账户的ID。调整金额格式:部分UPI应用要求金额为带两位小数的字符串,尝试将
amount改为'10.00',或者直接传入数字类型10(如果库支持)。检查应用权限:Android平台需要确保应用拥有查询已安装应用的权限,可在
AndroidManifest.xml中添加:<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />更新库版本:尝试将
one-react-native-upi升级到最新版本,修复可能存在的兼容性问题。
内容的提问来源于stack exchange,提问作者pratteek shaurya
相关产品推荐
相关产品推荐

