Flutter cashfree_pg插件iOS设备调用时提示orderId未找到问题
cashfree_pg iOS端调用doPayment提示orderId未传入修复方案
该问题是cashfree_pg插件Android、iOS双端的原生参数解析逻辑不统一导致的,Android端做了更多参数兼容处理,iOS端的解析逻辑更严格,可按以下步骤排查修复:
- 校验
orderId键名大小写:iOS端参数键区分大小写,必须严格传入orderId,不能使用OrderId、order_id等其他写法,Android端对大小写不敏感,非标准写法也能正常识别。 - 校验
orderId数据类型:iOS原生层仅识别字符串类型的orderId,如果传入的是int、double等数值类型,会被判定为无效参数直接丢弃,Android层会自动将数值类型的orderId转为字符串,不会触发报错。调用前需显式将orderId转为字符串类型:final paymentParams = { // 错误示例:数值类型orderId // "orderId": 1008611, // 正确示例:字符串类型orderId "orderId": 1008611.toString(), // 其余支付参数... }; await CashfreePG.instance.doPayment(paymentParams); - 升级插件到最新稳定版:v2.0.0之前的cashfree_pg版本存在iOS参数解析的已知bug,即使参数完全符合要求也可能出现orderId丢失的问题,升级到最新稳定版即可修复该问题。
- 原生层手动兼容(可选):如果升级插件存在业务兼容问题,可修改iOS原生插件代码,找到
CashfreePgPlugin.m文件中处理doPayment方法调用的逻辑块,手动读取参数中的orderId值,强制写入webview的请求参数中。
内容的提问来源于stack exchange,提问作者h4rdw1r3
相关产品推荐
相关产品推荐

