一直报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


0
0

逗比张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';
    }
  }
}


0
0

7天搞定Node.js微信公众号

Koa框架、ES2015新特性、MongoDB,开发微信公众号

1742 学习 · 787 问题

查看课程