wechat.js 2.34 KB
/**
 * Created by Tommy Huang on 18/04/06.
 */

const config = require('config-lite')({
  config_basedir: __dirname,
  config_dir: 'config'
})
const moment = require('moment')
const axios = require('axios')
const Helper = require('./helper')
const querystring = require('querystring')

const WechatTicket = require('../models').WechatTicket

exports.buildTicket = async function(req, res) {
  try {
    let ticket = await WechatTicket.findOne({
      where: {
        appid: config.wx.appId
      }
    })
    let accessToken, jsapiTicket
    if (!ticket || moment(ticket.created_at).add(30, 'minutes').isBefore(moment())) {
      const tokenRes = await axios.get(`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${config.wx.appId}&secret=${config.wx.appSecret}`)
      console.log(tokenRes.data)
      if (!tokenRes.data.access_token) throw new Error('获取微信授权失败,请联系运营人员解决')
      accessToken = tokenRes.data.access_token      
      const jsapiRes = await axios.get(`https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=${accessToken}&type=jsapi`)
      console.log(jsapiRes.data)      
      if (jsapiRes.data.errcode !== 0 || !jsapiRes.data.ticket) throw new Error('获取微信授权失败,请联系运营人员解决')
      jsapiTicket = jsapiRes.data.ticket
      if (!ticket) {
        ticket = await WechatTicket.create({
          appid: config.wx.appId,
          accessToken: accessToken,
          jsapiTicket: jsapiTicket
        })
      } else {
        const update = await ticket.update({
          accessToken: accessToken,
          jsapiTicket: jsapiTicket
        })
      }
    } else {
      accessToken = ticket.accessToken
      jsapiTicket = ticket.jsapiTicket
    }
    let ticketRes = Helper.buildWeChatConfig(jsapiTicket, req.body.href)
    ticketRes.appId = config.wx.appId
    res.json({
      success: 1,
      config: ticketRes
    })
  } catch (e) {
    console.log(e)
    res.json({
      success: 0,
      msg: `${e.message}`
    })
  }
}

exports.shareRedirect = async function (req, res) {
  let id = req.query.id
  const redirect = querystring.stringify({redirect_uri : `${config.baseURL}/borrowContent?id=${id}`})
  res.redirect(301, `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx52d72e78b0ecf0f0&${redirect}&response_type=code&scope=snsapi_userinfo#wechat_redirect`)
}