You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Cashfree支付网关创建订阅报ERR_INVALID_ARG_TYPE错误如何解决

报错原因与排查方案

TypeError [ERR_INVALID_ARG_TYPE]是Node.js的标准类型错误,本质是调用内置方法时,第一个入参不符合「字符串/Buffer/Uint8Array」的要求,实际传入了未序列化的JS对象。针对Cashfree支付网关的接入场景,优先排查以下三个高频出错点:

1. 签名生成逻辑

Cashfree接口要求请求前生成校验签名,计算签名的载荷必须是序列化后的JSON字符串,如果你直接把未处理的JS对象传入加密方法,就会触发该错误。

  • 错误示例:
const crypto = require('crypto')
const hmac = crypto.createHmac('sha256', YOUR_CASHFREE_SECRET)
hmac.update(requestBody) // requestBody是未序列化的对象,此处触发报错
  • 修正写法:
const crypto = require('crypto')
const hmac = crypto.createHmac('sha256', YOUR_CASHFREE_SECRET)
hmac.update(JSON.stringify(requestBody)) // 先转字符串再传入

2. 发起API请求的逻辑

如果你用Node.js内置的http/https模块发请求给Cashfree,request.write()方法要求入参是字符串/Buffer,直接传对象也会报错。

  • 错误示例:
const req = https.request(cashfreeOptions, (res) => { /* 响应处理 */ })
req.write(requestBody) // 直接传对象触发报错
  • 修正写法:
const req = https.request(cashfreeOptions, (res) => { /* 响应处理 */ })
req.write(JSON.stringify(requestBody)) // 先序列化再传入

3. 后端参数接收逻辑

确认你的Express/Koa服务已经配置了JSON解析中间件,避免拿到未解析的请求体对象直接做后续处理。如果用的是Express,要确保代码里已经加上:

app.use(express.json())

快速定位技巧

在报错堆栈指向的代码行前后,打印对应入参的类型和值:console.log(typeof 入参变量, 入参变量),可以直接定位到哪个参数没有做类型转换,针对性修正即可。

内容的提问来源于stack exchange,提问作者Ayaz Alam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:45:00