一直报41004错误,调试的时候发现进不去.then(function(data),卡了几天了,求老师解答
来源:2-6 第二天 票据 access_token 打开新世界大门
慕粉3383226
2016-08-01
var sha1 = require('sha1');
var Promise = require('bluebird');
var request = Promise.promisify(require('request'));
var prefix = "https://api.weixin.qq.com/cgi-bin/"
var api = {
access_token:prefix+'token?grant_type=client_credential'
}
function Wechat(opts){
var that = this;
this.appID = opts.appID;
this.appSecret = opts.appSecret;
this.getAccessToken = opts.getAccessToken;
this.saveAccessToken = opts.saveAccessToken;
return this.getAccessToken()
.then(function(data){
try{
data = JSON.parse(data);
}
catch(e){
return that.updateAccessToken(data);
}
if(that.isValidAccessToken(data)){
Promise.resolve(data);
}else{
return that.updateAccessToken();
}
})
.then(function(data){
that.access_token = data.access_token;
that.exprise_in = data.expires_in;
that.saveAccessToken(data);
return Promise.resolve(data)
})
}
Wechat.prototype.isValidAccessToken = function(data){
if(!data || !data.access_token || !data.exprise_in){
return false;
}
var access_token = data.access_token;
var exprise_in = data.exprise_in;
var now = (new Date().getTime());
if(now<exprise_in){
return true;
}else{
return false;
}
}
Wechat.prototype.updateAccessToken = function(){
var appID = this.appID;
var appSecret = this.appSecret;
var url = api.access_token +'&appid='+appID+'&secret'+appSecret;
return new Promise(function(resolve,reject){
request({url:url,json:true}).then(function(response){
var data = response.body;
var now = (new Date().getTime());
var expires_in = now + (data.expirse_in-20)*1000;
data.exprise_in = expires_in;
resolve(data);
})
})
}
module.exports = function(opts){
var wechat = new Wechat(opts);
return function *(next){
console.log(this.query);
var token = opts.token;
var signature = this.query.signature;
var nonce = this.query.nonce;
var timestamp = this.query.timestamp;
var echostr = this.query.echostr;
var str = [token,timestamp,nonce].sort().join('');
var sha = sha1(str);
if(sha === signature){
this.body = echostr+'';
}else{
this.body = 'wrong'
}
}
}写回答
2回答
-
Scott
2016-08-03
Promise.resolve(data);
前面加上 return
00 -
逗比张Mike
2016-08-02
var sha1 = require('sha1'); var Promise = require('bluebird'); var request = Promise.promisify(require('request')); var prefix = 'https://api.weixin.qq.com/cgi-bin/'; var api = { accessToken: prefix + 'token?grant_type=client_credential' } //access_token function Wechat(opts){ var that = this; this.appID = opts.appID; this.appSecret = opts.appSecret; this.getAccessToken = opts.getAccessToken; this.saveAccessToken = opts.saveAccessToken; this.getAccessToken() .then(function(data) { try { data = JSON.parse(data); } catch(e) { return that.updateAccessToken(); } if (that.isValidAccessToken(data)) { Promise.resolve(data); } else{ return that.updateAccessToken(); } }). then(function(data) { console.log('save'+data); that.access_token = data.access_token; that.expires_in= data.expires_in; that.saveAccessToken(data); }) } Wechat.prototype.isValidAccessToken = function(data) { if (!data || !data.access_token || !data.expires_in) { return false; } var access_token = data.access_token; var expires_in = data.expires_in; console.log(expires_in); var node = (new Date().getTime()); if (now < expires_in) { return true; } else { return false; } } Wechat.prototype.updateAccessToken = function() { var appID= this.appID; console.log(appID); var appSecret = this.appSecret; console.log(appSecret); var url = api.accessToken + '&appid=' + appID + '&secret=' + appSecret; console.log(url) return new Promise(function(resolve, reject) { request({url: url, json: true}).then(function(response) { console.log(response.body); var data = response.body; var now = (new Date().getTime()); var expires_in = now + (data.expires_in - 20) * 1000; data.expires_in = expires_in; resolve(data); }) }) } //与微信服务器认证 module.exports = function(opts){ var wechat = new Wechat(opts); return function *(next) { console.log(this.query); var token = opts.token; var signature = this.query.signature; var nonce = this.query.nonce; var timestamp = this.query.timestamp; var echostr = this.query.echostr; var str = [token, timestamp, nonce].sort().join(''); sha = sha1(str); if (sha === signature) { this.body = echostr + ''; }else{ this.body = 'wrong'; } } }00
相似问题