刷新access_token后的第一次调用客服接口失效,无应答?
发布于 7 年前 作者 xiulanyan 13926 次浏览 来自 问答

当判断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();
        });
    }
};
回到顶部