SquareUp生成Nonce后调用Node.js客户端支付报'adapter is not a function'错误排查
Square支付请求报错「adapter is not a function」的原因及修复
错误原因
- 代码语法错误:你的
createPayment调用中,参数对象未闭合(缺失}),导致JavaScript解析失败,进而触发SDK内部异常,表现为「adapter is not a function」。 - 潜在SDK版本不兼容:若使用的Square Node.js SDK版本过旧,或初始化方式与版本不匹配,也可能引发类似异常,但优先排查语法错误。
修复方法
1. 修正语法错误
补充createPayment参数对象的闭合括号,同时确保代码在async函数内执行(因使用了await)。修正后的完整代码示例:
const { Client, Environment } = require('square'); // 初始化Square客户端 const client = new Client({ environment: Environment.Sandbox, accessToken: accessToken, }); // 支付处理函数需标记为async async function processPayment(token) { if (client instanceof Client) { try { const response = await client.paymentsApi.createPayment({ sourceId: token, idempotencyKey: Math.random().toString(36).substring(7), amountMoney: { amount: 100, currency: 'USD' } }); // 补充缺失的闭合}和) console.log('支付成功:', response.result); } catch (error) { console.error('[ERROR] 支付处理失败:', error); } } }
2. 验证并更新SDK版本
确保安装Square官方最新稳定版SDK,执行命令更新:
npm update square
v3版本SDK的导入方式为const { Client, Environment } = require('square');,若使用旧版v2需对应调整初始化逻辑,推荐使用v3版本。
3. 优化幂等键生成(可选)
Math.random()生成的幂等键存在重复风险,建议使用更可靠的UUID:
const { v4: uuidv4 } = require('uuid'); // 替换为: idempotencyKey: uuidv4(),
内容的提问来源于stack exchange,提问作者Fahad Hafeez
相关产品推荐
相关产品推荐

