Authored by ccbikai

修改中文注释

  1 +/**
  2 + * 微信分享签名
  3 + * Bi Kai <kai.bi@yoho.cn>
  4 + */
1 'use strict'; 5 'use strict';
2 const wechatModel = require('../models/wechat'); 6 const wechatModel = require('../models/wechat');
3 7
@@ -27,80 +27,80 @@ const ticketCacheKey = 'wechatShare:ticket'; @@ -27,80 +27,80 @@ const ticketCacheKey = 'wechatShare:ticket';
27 27
28 // 微信 JS 接口签名校验工具 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 28 // 微信 JS 接口签名校验工具 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
29 29
30 -const wechat = {  
31 - getAccessToken: Promise.coroutine(function* () {  
32 - let accessToken = yield cache.get(accessTokenCacheKey);  
33 -  
34 - if (accessToken) {  
35 - return accessToken;  
36 - }  
37 -  
38 - logger.info('调用微信 API 获取 accessToken');  
39 - return request({  
40 - url: 'https://api.weixin.qq.com/cgi-bin/token',  
41 - qs: {  
42 - grant_type: 'client_credential',  
43 - appid: appId,  
44 - secret: secret  
45 - },  
46 - json: true  
47 - }).then((res) => {  
48 -  
49 - // accessToken 有效期 7200s,缓存 7100s  
50 - cache.set(accessTokenCacheKey, res.access_token, 7100).catch((err) => {  
51 - logger.error('微信分享 Token, 缓存 accessToken 时出错', JSON.stringify(err));  
52 - });  
53 - return res.access_token;  
54 - }).catch((err) => {  
55 - logger.error('微信分享 Token, 获取 accessToken 时出错', JSON.stringify(err)); 30 +let _getAccessToken = Promise.coroutine(function* () {
  31 + let accessToken = yield cache.get(accessTokenCacheKey);
  32 +
  33 + if (accessToken) {
  34 + return accessToken;
  35 + }
  36 +
  37 + logger.info('get accessToken from wechat API');
  38 + return request({
  39 + url: 'https://api.weixin.qq.com/cgi-bin/token',
  40 + qs: {
  41 + grant_type: 'client_credential',
  42 + appid: appId,
  43 + secret: secret
  44 + },
  45 + json: true
  46 + }).then((res) => {
  47 +
  48 + // accessToken 有效期 7200s,缓存 7100s
  49 + cache.set(accessTokenCacheKey, res.access_token, 7100).catch((err) => {
  50 + logger.error('set wechat accessToken cache error', JSON.stringify(err));
56 }); 51 });
57 - }),  
58 -  
59 - getTicket: Promise.coroutine(function* () {  
60 - let ticket = yield cache.get(ticketCacheKey);  
61 -  
62 - if (ticket) {  
63 - return ticket;  
64 - }  
65 -  
66 - logger.info('调用微信 API 获取 ticket');  
67 - return request({  
68 - url: 'https://api.weixin.qq.com/cgi-bin/ticket/getticket',  
69 - qs: {  
70 - access_token: yield this.getAccessToken(),  
71 - type: 'jsapi'  
72 - },  
73 - json: true  
74 - }).then(res => { 52 + return res.access_token;
  53 + }).catch((err) => {
  54 + logger.error('get accessToken from wechat API error', JSON.stringify(err));
  55 + });
  56 +});
  57 +
  58 +let _getTicket = Promise.coroutine(function* () {
  59 + let ticket = yield cache.get(ticketCacheKey);
  60 +
  61 + if (ticket) {
  62 + return ticket;
  63 + }
  64 +
  65 + logger.info('get ticket from wechat API');
  66 + return request({
  67 + url: 'https://api.weixin.qq.com/cgi-bin/ticket/getticket',
  68 + qs: {
  69 + access_token: yield _getAccessToken(),
  70 + type: 'jsapi'
  71 + },
  72 + json: true
  73 + }).then(res => {
75 74
76 // ticket 有效期 7200s,缓存 7100s 75 // ticket 有效期 7200s,缓存 7100s
77 - cache.set(ticketCacheKey, res.ticket, 7100).catch((err) => {  
78 - logger.error('微信分享 Token, 缓存 ticket 时出错', JSON.stringify(err));  
79 - });  
80 - return res.ticket;  
81 - }).catch((err) => {  
82 - logger.error('微信分享 Token, 获取 ticket 时出错', JSON.stringify(err)); 76 + cache.set(ticketCacheKey, res.ticket, 7100).catch((err) => {
  77 + logger.error('set wechat Token cache error', JSON.stringify(err));
83 }); 78 });
84 - }),  
85 -  
86 - calcSignature: Promise.coroutine(function* (data) {  
87 - data = Object.assign({  
88 - nonceStr: Math.random().toString(36).substr(2, 15),  
89 - timestamp: Math.floor(Date.now() / 1000) + '',  
90 - ticket: yield this.getTicket(),  
91 - appId: appId  
92 - }, data);  
93 -  
94 - const str = `jsapi_ticket=${data.ticket}&noncestr=${data.nonceStr}&timestamp=${data.timestamp}&url=${data.url}`;  
95 -  
96 - data.signature = sha1(str);  
97 - return data;  
98 - })  
99 -}; 79 + return res.ticket;
  80 + }).catch((err) => {
  81 + logger.error('get ticket from wechat API error', JSON.stringify(err));
  82 + });
  83 +});
  84 +
  85 +let calcSignature = Promise.coroutine(function* (data) {
  86 + data = Object.assign({
  87 + nonceStr: Math.random().toString(36).substr(2, 15),
  88 + timestamp: Math.floor(Date.now() / 1000) + '',
  89 + ticket: yield _getTicket(),
  90 + appId: appId
  91 + }, data);
  92 +
  93 + const str = `jsapi_ticket=${data.ticket}&noncestr=${data.nonceStr}&timestamp=${data.timestamp}&url=${data.url}`;
  94 +
  95 + data.signature = sha1(str);
  96 + return data;
  97 +});
100 98
101 // 测试 99 // 测试
102 -// wechat.calcSignature({ 100 +// calcSignature({
103 // url: 'http://www.yohobuy.com/' 101 // url: 'http://www.yohobuy.com/'
104 // }).then(console.log); 102 // }).then(console.log);
105 103
106 -module.exports = wechat; 104 +module.exports = {
  105 + calcSignature
  106 +};