123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- const request = require('request')
- const sha1 = require('sha1')
- // 创建唯一的不重复的随机字符串
- function grentNonceStr() {
- return Math.random().toString(36).substr(2, 15)
- }
- // 获取单签时间戳,精确到秒
- function grentTimeStamp() {
- return parseInt(Date.now() / 1000) + ''
- }
- // 创建缓存器
- function createCache() {
- let cache = {}
- let cacheTime = 7000 * 1000
- return {
- get(key) {
- return cache[key]
- },
- set(key, val) {
- cache[key] = val
- setTimeout(() => delete cache[key], cacheTime)
- }
- }
- }
- // 获取access_token 需要参数 appid secret
- const getAccessToken = (() => {
- let store = createCache()
- function getToken(appid, secret) {
- let uri = 'https://api.weixin.qq.com/cgi-bin/token?' +
- 'grant_type=client_credential&appid=' + appid +
- '&secret=' + secret;
- return new Promise((resolve, reject) => {
- request(uri, function (error, response, body) {
- if (error) {
- reject(error)
- } else if (response.statusCode === 200) {
- body = JSON.parse(body);
- resolve(body.access_token)
- } else {
- reject(error)
- }
- })
- })
- }
- return async (appid, secret) => {
- if (!store.get(appid)) {
- let token = await getToken(appid, secret)
- store.set(appid, token)
- }
- return store.get(appid)
- }
- })();
- // 获取ticket 需要参数access_token
- const getTicket = (() => {
- let store = createCache()
- function getTicket(accessToken) {
- let uri = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?' +
- 'access_token=' + accessToken + '&type=jsapi';
- return new Promise((resolve, reject) => {
- request(uri, function (error, response, body) {
- if (error) {
- reject(error)
- } else if (response.statusCode === 200) {
- let content = JSON.parse(body);
- resolve(content.ticket)
- } else {
- reject(error)
- }
- })
- })
- }
- return async (accessToken) => {
- if (!store.get(accessToken)) {
- let ticket = await getTicket(accessToken)
- store.set(accessToken, ticket)
- }
- return store.get(accessToken)
- }
- })();
- // 获取计算签名
- function getSignature(ticket, noncestr, timestamp, url) {
- console.log(`jsapi_ticket=${ticket}&noncestr=${noncestr}×tamp=${timestamp}&url=${url}`)
- return sha1(`jsapi_ticket=${ticket}&noncestr=${noncestr}×tamp=${timestamp}&url=${url}`)
- }
- module.exports = {
- getAccessToken,
- getTicket,
- getSignature,
- grentNonceStr,
- grentTimeStamp
- }
|