nodejs 애플 릿 코드 생 성 실현

5021 단어
작가 가 애플 리 케 이 션 을 처음 하 는 것 이자 nodejs 를 처음 사용 하 는 것 입 니 다. 다음은 잘못 쓴 부분 이 있 습 니 다. 선배 님 들 께 서 지적 해 주세요. 감사합니다.
 하나 먼저 애플 릿 코드 의 역할 은 사용자 가 위 챗 을 통 해 애플 릿 코드 를 스 캔 하여 애플 릿 의 특정한 페이지 에 들 어 갈 수 있다 는 것 이다. 예 를 들 어 특정한 상품 이나 누군가의 홈 페이지 등 이다.작은 프로그램 코드 가 생 성 될 때 파 라 메 터 를 휴대 할 수 있 습 니 다. 우 리 는 작은 프로그램 코드 가 뛰 는 페이지 에서 파 라 메 터 를 받 아 해당 하 는 조작 을 할 수 있 습 니 다.
2. 애플 릿 코드 가 생 성 되 는 대체 적 인 과정 은 바로 appid 와 appserect 를 통 해 accesstoken 을 바 꾼 다음 에 accesstoken 에 다른 매개 변 수 를 추가 하여 애플 릿 코드 를 바 꾸 는 것 입 니 다.appid 와 appserect 로 access token 을 어떻게 얻 는 지 에 대해 저 는 군말 하 는 것 을 좋아 하지 않 습 니 다. 인터넷 에 많은 자 료 를 참고 할 수 있 습 니 다.
3. 다음은 편집장 의 실현 방식 을 공유 합 시다.
    1. 먼저 accesstoken 을 가 져 옵 니 다.이 코드 는 accesstoken 을 검사 하고 업데이트 한 것 입 니 다.애플 릿 은 accesstoken 을 많이 사용 하고 매일 가 져 오 는 횟수 가 제한 되 어 있 기 때문에 저 는 가 져 온 accesstoken 을 데이터베이스 에 저장 하고 사용 할 때마다 accesstoken 에 대해 업 데 이 트 를 검사 하여 실 효 를 피 합 니 다.
g.js
var util = require('../getCode/libs/access_tokenManager')//       access_token
var Promise = require('bluebird');//         Promise,          
var request = Promise.promisify(require('request'));
var prefix = 'https://api.weixin.qq.com/cgi-bin/';//      API    
var conf = require('../config.js')
var api = {
  accessToken: prefix + 'token?grant_type=client_credential'
}

function checkToken(opts) {
  var that = this;
  this.appID = conf.appId;
  this.appSecret = conf.appSecret;
  this.getAccessToken = opts.getAccessToken;
  this.saveAccessToken = opts.saveAccessToken;
  this.data = '';
  //             getAccessToken
   that.getAccessToken().then(function (data) {
      try {
        console.log('data=' + data);
        data = (JSON.parse(data))[0];

        console.log('datadatadatadatadata', data);
      }
      catch (e) {
        console.log('netscape');
        return that.updateAccessToken();
      }
      if (that.isValidAccessToken(data)) {
        console.log('    ', data);
        that.data = data
        Promise.resolve(data);
      }
      else {
        return that.updateAccessToken();
      }

    })
    .then(function (data) {
      data = data ? data : that.data
      that.access_token = data.access_token;
      that.expires_in = data.expires_in;
      that.saveAccessToken(data);
    })
}
//              
checkToken.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('token    expires_in', expires_in);
  var now = (new Date().getTime())

  if (now < expires_in) {
    console.log('token  ');
    return true;
  } else {
    return false;
  }
}

checkToken.prototype.updateAccessToken = function () {
  var appID = this.appID;
  var appSecret = this.appSecret;
  var url = api.accessToken + '&appid=' + appID + '&secret=' + appSecret;
  return new Promise(function (resolve, reject) {
    request({ url: url, json: true }, function (error, response, body) {
      if (!error && response.statusCode === 200) {
        var data = body;
        var now = (new Date().getTime());
        var expires_in = now + (data.expires_in - 20) * 1000;
        data.expires_in = expires_in;
        resolve(data);
      } else {
        reject()
      }
    });
  })
}
module.exports = function  (opts){
  var CheckToken= new  checkToken(opts);
}

2. QR 코드 를 생 성하 고 QR 코드 를 특정한 경로 에 저장 합 니 다.
'use strict'
var Koa = require('koa')// koa    
var path = require('path')// path      
var wechat = require('../getCode/wechat/g')//       access_token     
//var util = require('../getCode/libs/util')//         
var util = require('../getCode/libs/access_tokenManager')//       access_token
var request = require('request');
var fs = require('fs');
var Promise = require('bluebird');

//       
var config = {
  wechat: {
	fileName:'',
    getAccessToken: function () {
      //         access_token
      return util.readFileAsync(wechat_file);
    },
    saveAccessToken: function (data) {
     // data = JSON.stringify(data)
      //       access_token
      return util.writeFileAsync(data)
    },
    //      
    getQrcode: function (data,fileName) {
      var postData = {
        path: "pages/index/index",//            
        scene: fileName,//          
        width: 430,
        auto_color: false
      }
      postData = JSON.stringify(postData);
      request({
        method: 'POST',
        url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + data.access_token,
        body: postData
      }).pipe(fs.createWriteStream('./images/' + fileName+'.png'));//             
      }
  }
}

module.exports = async (ctx, next) => {
  config.wechat.fileName = ctx.query.fileName;
  wechat(config.wechat)
}

좋은 웹페이지 즐겨찾기