Node-Soap对接TradeTracker SOAP API:认证后请求失效应答未认证
排查TradeTracker SOAP API认证后请求失败的问题
核心差异分析
TradeTracker的SOAP API靠会话ID(Session ID)或HTTP Cookie维持认证状态,Zeep和node-soap在会话上下文处理上逻辑完全不同:
- Zeep默认自动保存
authenticate返回的Session ID,后续请求会自动把它放到SOAP Header里,同时自动传递HTTP Cookie。 - node-soap不会自动维护会话,必须手动提取Session ID并显式设置到后续请求的Header,或者配置CookieJar来自动传递Cookie。
具体排查与修复步骤
1. 提取authenticate返回的会话标识
先确认authenticate的响应里有没有Session ID,它可能在SOAP Body的返回结果里,也可能在HTTP响应的Set-Cookie头中:
client.authenticate({username: '你的账号', password: '你的密码'}, (err, result) => { if (!err) { // 从响应Body提取Session ID(根据实际返回结构调整字段名) const sessionId = result.authenticateReturn.sessionId; // 或者从HTTP响应头提取Cookie const cookie = client.lastResponseHeaders['set-cookie']; } });
2. 手动给后续请求加SOAP Header
TradeTracker要求后续请求必须在SOAP Header里带Session ID,按API的WSDL定义设置:
// 构造符合要求的Header(注意命名空间要和WSDL一致) const authHeader = { SessionHeader: { sessionId: '刚才提取到的Session ID' } }; // 把Header绑定到client,后续所有请求都会带上 client.addSoapHeader(authHeader); // 调用后续接口示例 client.getCampaigns({}, (err, result) => { // 处理返回结果 });
3. 配置CookieJar自动传递会话Cookie
如果API靠HTTP Cookie维持会话,给node-soap配置CookieJar:
const request = require('request'); const cookieJar = request.jar(); // 创建client时指定request选项,启用CookieJar soap.createClient('https://api.tradetracker.com/soap/affiliate?wsdl', { request: { jar: cookieJar } }, (err, client) => { // 先调用authenticate,CookieJar会自动保存Set-Cookie client.authenticate({username: '你的账号', password: '你的密码'}, () => { // 后续请求会自动带上Cookie client.getCampaigns({}, (err, result) => {}); }); });
4. 抓包对比请求报文
用工具抓包对比Zeep和node-soap的请求:
- 看Zeep的后续请求SOAP Header里有没有Session ID,或者HTTP头有没有带Cookie。
- 检查node-soap的请求是不是缺了这些信息,针对性调整代码补上。
常见坑点
- 注意SessionHeader的命名空间必须和WSDL定义一致,否则API会忽略这个Header。
- 部分TradeTracker环境的Session ID可能同时存在于响应Body和Cookie中,需要同时设置Header和Cookie才能生效。
内容的提问来源于stack exchange,提问作者Nique
相关产品推荐
相关产品推荐

