wl-design-mobile 0.7.7 → 0.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/util/jssdk-sczy.js +157 -0
package/package.json
CHANGED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import wx from "weixin-js-sdk";
|
|
2
|
+
import config from '../config/config'
|
|
3
|
+
import {axios} from '../util/axios'
|
|
4
|
+
|
|
5
|
+
const SIGNATURE_CACHE_KEY = 'sczy_js_signature_cache'
|
|
6
|
+
const SIGNATURE_CACHE_TTL = 5 * 60 * 1000
|
|
7
|
+
let configPromise = null
|
|
8
|
+
|
|
9
|
+
function getCacheKey(url) {
|
|
10
|
+
return `${SIGNATURE_CACHE_KEY}:${url}`
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function getCachedSignature(url) {
|
|
14
|
+
try {
|
|
15
|
+
const raw = sessionStorage.getItem(getCacheKey(url))
|
|
16
|
+
if (!raw) {
|
|
17
|
+
return null
|
|
18
|
+
}
|
|
19
|
+
const cached = JSON.parse(raw)
|
|
20
|
+
if (!cached || !cached.data || !cached.expireAt || Date.now() > cached.expireAt) {
|
|
21
|
+
sessionStorage.removeItem(getCacheKey(url))
|
|
22
|
+
return null
|
|
23
|
+
}
|
|
24
|
+
return cached.data
|
|
25
|
+
} catch (e) {
|
|
26
|
+
sessionStorage.removeItem(getCacheKey(url))
|
|
27
|
+
return null
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function setCachedSignature(url, data) {
|
|
32
|
+
try {
|
|
33
|
+
sessionStorage.setItem(getCacheKey(url), JSON.stringify({
|
|
34
|
+
expireAt: Date.now() + SIGNATURE_CACHE_TTL,
|
|
35
|
+
data,
|
|
36
|
+
}))
|
|
37
|
+
} catch (e) {
|
|
38
|
+
// ignore storage failures
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 判断ios系统版本号是否大于14
|
|
45
|
+
* @returns {boolean}
|
|
46
|
+
*/
|
|
47
|
+
const isIos14AndMore = () => {
|
|
48
|
+
try {
|
|
49
|
+
const str = navigator.userAgent.toLowerCase()
|
|
50
|
+
const ver = str.match(/cpu iphone os (.*?) like mac os/)
|
|
51
|
+
if (!ver) {
|
|
52
|
+
return false
|
|
53
|
+
}
|
|
54
|
+
return Number(ver[1].split('_')[0]) >= 14
|
|
55
|
+
} catch (e) {
|
|
56
|
+
console.log('isIos14AndMore', e)
|
|
57
|
+
return false
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function getSczyJsConfig() {
|
|
62
|
+
let url = window.location.href.split('#')[0]
|
|
63
|
+
if (isIos14AndMore()) {
|
|
64
|
+
const storedUrl = sessionStorage.getItem('ios14ConfigUrl')
|
|
65
|
+
if (storedUrl) {
|
|
66
|
+
url = storedUrl
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const cached = getCachedSignature(url)
|
|
71
|
+
if (cached) {
|
|
72
|
+
return Promise.resolve(cached)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return axios.get(config.platformServerContext + '/api/weixin/js/signature', {
|
|
76
|
+
params: { url }
|
|
77
|
+
}).then((resp) => {
|
|
78
|
+
const data = resp && resp.data ? resp.data : {}
|
|
79
|
+
if (!data || data.errcode !== 0 || !data.data) {
|
|
80
|
+
throw new Error((data && data.errmsg) ? data.errmsg : '获取签名失败')
|
|
81
|
+
}
|
|
82
|
+
setCachedSignature(url, data.data)
|
|
83
|
+
return data.data
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function configWx() {
|
|
88
|
+
if (configPromise) {
|
|
89
|
+
return configPromise
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
configPromise = getSczyJsConfig().then((resp) => {
|
|
93
|
+
return new Promise((resolve, reject) => {
|
|
94
|
+
wx.config({
|
|
95
|
+
debug: false,
|
|
96
|
+
appId: resp.appId,
|
|
97
|
+
timestamp: resp.timestamp,
|
|
98
|
+
nonceStr: resp.nonceStr,
|
|
99
|
+
signature: resp.signature,
|
|
100
|
+
jsApiList: ['scanQRCode']
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
wx.ready(() => {
|
|
104
|
+
resolve()
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
wx.error((res) => {
|
|
108
|
+
configPromise = null
|
|
109
|
+
reject('企业微信初始化js-sdk失败' + (res && res.errMsg ? res.errMsg : ''))
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
}).catch((error) => {
|
|
113
|
+
configPromise = null
|
|
114
|
+
throw new Error('请求服务端jssdk签名失败:' + error)
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
return configPromise
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function extractScanText(res) {
|
|
121
|
+
if (!res) {
|
|
122
|
+
return ''
|
|
123
|
+
}
|
|
124
|
+
if (typeof res === 'string') {
|
|
125
|
+
return res
|
|
126
|
+
}
|
|
127
|
+
return res.resultStr || res.result || res.text || res.code || ''
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function scanQRCode() {
|
|
131
|
+
return new Promise((resolve, reject) => {
|
|
132
|
+
configWx().then(() => {
|
|
133
|
+
wx.scanQRCode({
|
|
134
|
+
desc: 'scanQRCode desc',
|
|
135
|
+
needResult: 1,
|
|
136
|
+
scanType: ['qrCode', 'barCode'],
|
|
137
|
+
success: function (res) {
|
|
138
|
+
resolve(extractScanText(res))
|
|
139
|
+
},
|
|
140
|
+
error: function (res) {
|
|
141
|
+
if (res && res.errMsg && res.errMsg.indexOf('function_not_exist') > -1) {
|
|
142
|
+
reject('版本过低请升级')
|
|
143
|
+
} else {
|
|
144
|
+
reject('企业微信扫码失败,请联系系统管理员!')
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
})
|
|
148
|
+
}).catch((error) => {
|
|
149
|
+
configPromise = null
|
|
150
|
+
reject('企业微信扫码失败:' + error)
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export default {
|
|
156
|
+
scanQRCode,
|
|
157
|
+
}
|