刷新access_token后的第一次调用客服接口失效,无应答?
当判断token过期后,使用新鲜生成的token调用客服接口时无任何应答,包括错误或者成功信息,
但是即使没有应答,微信上有时候能收到客服信息有时候不能。
而且这种情况仅出现并且总出现在刷新token后的第一次调用上,其他时候一切正常。
why?????
以下是两段代码,和成功以及失败的控制台输出截图。
// 下面是客服调用的函数
WeChat.prototype.kefuMsg = function (openid, msgtype, content) {
const that = this;
console.log(`==========\n`);
console.log(`开始进入函数, ${getDateAndTime().format}`);
return new Promise((resolve, reject) => {
console.log(`开始请求access_token, ${getDateAndTime().format}`);
that.getAccessToken().then((data) => {
console.log(`完成请求access_token, ${getDateAndTime().format}`);
//格式化请求连接
const url = util.format(that.apiURL.kefuMsg, that.apiDomain, data);
console.log('token: ' + data);
//使用 Post 请求发送消息
let obj = _extends({
touser: openid,
msgtype,
[msgtype]: content
});
console.log(`开始进入发送, ${getDateAndTime().format}`);
that.requestPost(url, JSON.stringify(obj)).then(data => {
//将结果打印
if (JSON.parse(data).errcode === 0) {
console.log(`客服信息成功, ${getDateAndTime().format}`);
console.log(`==========\n`);
resolve('客服信息成功')
} else {
console.log(`客服信息失败, ${getDateAndTime().format}, ${data}`);
resolve('客服消息失败 -> ' + data)
}
}).catch(err => {
console.log('客服消息请求失败 => ', err)
});
});
})
};
// 下面是requestPost函数,这个函数不会错的。
this.requestPost = function (url, data) {
return new Promise(function (resolve, reject) {
//解析 url 地址
var urlData = urltil.parse(url);
//设置 https.request options 传入的参数对象
var options = {
//目标主机地址
hostname: urlData.hostname,
//目标地址
path: urlData.path,
//请求方法
method: 'POST',
//头部协议
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(data, 'utf-8')
}
};
var req = https.request(options, function (res) {
var buffer = [], result = '';
//用于监听 data 事件 接收数据
res.on('data', function (data) {
buffer.push(data);
});
//用于监听 end 事件 完成数据的接收
res.on('end', function () {
result = Buffer.concat(buffer).toString('utf-8');
resolve(result);
})
})
//监听错误事件
.on('error', function (err) {
console.log(err);
reject(err);
});
//传入数据
req.write(data);
req.end();
});
}
};