React Native与Laravel集成Cashfree支付网关出现orderAmount必填错误
报错核心原因
- 最常见的原因是服务端生成cftoken(也就是你代码里的tokenData)时未传入orderAmount参数:CashFree的cftoken会绑定订单的核心属性(金额、订单ID、币种等),服务端生成token时如果缺失orderAmount,即使前端正确传参,SDK校验也会失败,返回找不到orderAmount的报错。
- 其次是orderAmount的格式不符合SDK要求:部分版本的CashFree SDK要求金额必须为带两位小数的数字类型,传入整数可能识别异常。
- 小概率原因是Android端开启混淆未加SDK白名单导致参数被混淆、参数拼写错误、SDK版本和接入文档不匹配。
排查解决步骤
- 第一步:校验服务端生成cftoken的逻辑
确认服务端调用CashFree创建订单接口生成cftoken时,已经正确传递了orderAmount参数,且参数值、币种和你前端传入的完全一致。 - 第二步:调整前端orderAmount的格式
将代码中的金额改为带两位小数的数字类型,修改示例:// 原代码 "orderAmount": 150, // 修改为 "orderAmount": 150.00, // 如果是动态取值,用toFixed转换后转数字 "orderAmount": Number(parseInt(response.data.price).toFixed(2)), - 第三步:确认参数有效性
在调用RNPgReactNativeSDK.startPaymentWEB前打印完整的map对象,确认orderAmount字段确实存在、值不为空/undefined。 - 第四步:排查Android端配置
如果你的Android端开启了代码混淆,确认已经在proguard-rules.pro中添加CashFree SDK的混淆规则,避免参数名被篡改后无法被识别。 - 第五步:校验SDK版本
确认你集成的CashFree React Native SDK版本为2.0及以上,和你参考的接入文档规则匹配。
内容的提问来源于stack exchange,提问作者matheen ulla
相关产品推荐
相关产品推荐

