Showing
2 changed files
with
72 additions
and
68 deletions
@@ -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}×tamp=${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}×tamp=${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 | +}; |
-
Please register or login to post a comment