Commit 269af8d2d0f5150d7842d0555f85e040054105ba
1 parent
5b5872de
feat: 文本合规检查
Showing
4 changed files
with
132 additions
and
20 deletions
README.md
... | ... | @@ -7,8 +7,10 @@ |
7 | 7 | - 个人类小程序不支持 web-view |
8 | 8 | - wx.shareFileMessage 可以直接分享文件 |
9 | 9 | |
10 | -- [ ] 内容安全问题处理 | |
10 | +- [x] 内容安全问题处理 | |
11 | 11 | - https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html |
12 | 12 | |
13 | 13 | - [ ] 从列表页返回后应该关闭正在播放的列表页语音 |
14 | 14 | |
15 | +- [ ] 时间长了本地缓存文件失效后应当清除对应播放列表 | |
16 | + | ... | ... |
app.js
1 | 1 | //app.js |
2 | 2 | App({ |
3 | - onLaunch () { | |
4 | - | |
3 | + async onLaunch () { | |
4 | + this.login(); | |
5 | + }, | |
6 | + // 将登录态封装进去 | |
7 | + // todo: 多个请求同时发起,且登录态都失效时,ssid 会相互覆盖 | |
8 | + async request(config){ | |
9 | + let ssid = wx.getStorageSync('ssid'); | |
10 | + if(!ssid){ | |
11 | + ssid = await this.login(); | |
12 | + } | |
13 | + const initialSuccess = config.success; | |
14 | + config.data = { | |
15 | + ...config.data, | |
16 | + ssid | |
17 | + }; | |
18 | + config.success = async resp => { | |
19 | + if(resp.data.code === 5001000){ | |
20 | + wx.setStorageSync('ssid', ''); | |
21 | + delete config.ssid; | |
22 | + this.request(config); | |
23 | + } | |
24 | + else{ | |
25 | + initialSuccess(resp); | |
26 | + } | |
27 | + }; | |
28 | + config = { | |
29 | + header: { | |
30 | + 'content-type': 'application/json' | |
31 | + }, | |
32 | + dataType: 'json', | |
33 | + method: 'POST', | |
34 | + ...config | |
35 | + }; | |
36 | + return wx.request(config); | |
37 | + }, | |
38 | + login(){ | |
39 | + let ssid = wx.getStorageSync('ssid'); | |
40 | + if(ssid){ | |
41 | + return ssid; | |
42 | + } | |
43 | + wx.showLoading({ | |
44 | + title: '登录中...', | |
45 | + mask: true | |
46 | + }); | |
47 | + return new Promise((resolve, reject) => { | |
48 | + wx.login({ | |
49 | + success: res => { | |
50 | + wx.request({ | |
51 | + url: `${this.globalData.domain}/open-api/login`, | |
52 | + data: { | |
53 | + code: res.code, | |
54 | + appid: 'wx330e54aa6000516d' | |
55 | + }, | |
56 | + header: { | |
57 | + 'content-type': 'application/json' | |
58 | + }, | |
59 | + dataType: 'json', | |
60 | + method: 'POST', | |
61 | + success: resp => { | |
62 | + const { | |
63 | + ssid, | |
64 | + openid | |
65 | + } = resp.data?.data?.user; | |
66 | + wx.setStorageSync('ssid', ssid); | |
67 | + wx.setStorageSync('openid', openid); | |
68 | + resolve(resp.data?.data?.user); | |
69 | + }, | |
70 | + fail: resp => { | |
71 | + wx.showModal({ | |
72 | + title: '提示', | |
73 | + content: '登录失败,点击确定重试', | |
74 | + showCancel: false, | |
75 | + success: res => { | |
76 | + this.login(); | |
77 | + } | |
78 | + }); | |
79 | + reject(resp.errMsg); | |
80 | + }, | |
81 | + complete: () => { | |
82 | + wx.hideLoading(); | |
83 | + } | |
84 | + }); | |
85 | + } | |
86 | + }); | |
87 | + }); | |
5 | 88 | }, |
6 | 89 | globalData: { |
90 | + // domain: 'http://localhost:3001', | |
91 | + domain: 'https://jilegeji.xwenliang.cn', | |
7 | 92 | getTypeList(){ |
8 | 93 | return [ |
9 | 94 | { | ... | ... |
pages/index/index.js
... | ... | @@ -19,9 +19,41 @@ Page({ |
19 | 19 | inputText(e){ |
20 | 20 | this.data.text = e.detail.value; |
21 | 21 | }, |
22 | - play(){ | |
22 | + async play(){ | |
23 | 23 | const text = this.data.text || this.data.placeholder; |
24 | 24 | const url = this.data.type[this.data.selectedIndex].createUrl(text); |
25 | + wx.showLoading({ | |
26 | + title: '正在合成语音...', | |
27 | + mask: true | |
28 | + }); | |
29 | + // 检查文本是否合规 | |
30 | + const result = await new Promise((resolve, reject) => { | |
31 | + app.request({ | |
32 | + url: `${app.globalData.domain}/open-api/wechat-msg-sec-check`, | |
33 | + data: { | |
34 | + appid: 'wx330e54aa6000516d', | |
35 | + content: text, | |
36 | + openid: wx.getStorageSync('openid') | |
37 | + }, | |
38 | + success(res){ | |
39 | + resolve(JSON.parse(res.data?.data)?.result); | |
40 | + }, | |
41 | + fail(err){ | |
42 | + reject(err); | |
43 | + } | |
44 | + }); | |
45 | + }); | |
46 | + wx.hideLoading(); | |
47 | + // 不合规结束 | |
48 | + if(result.suggest !== 'pass'){ | |
49 | + return wx.showToast({ | |
50 | + title: '内容不合规', | |
51 | + icon: 'error', | |
52 | + mask: true, | |
53 | + duration: 2000 | |
54 | + }); | |
55 | + } | |
56 | + | |
25 | 57 | this.resetAudio(); |
26 | 58 | audio = wx.createInnerAudioContext({useWebAudioImplement: true}); |
27 | 59 | audio.autoplay = true; | ... | ... |
project.config.json
... | ... | @@ -39,23 +39,16 @@ |
39 | 39 | "useCompilerPlugins": false |
40 | 40 | }, |
41 | 41 | "compileType": "miniprogram", |
42 | - "libVersion": "1.9.93", | |
42 | + "libVersion": "2.21.3", | |
43 | 43 | "appid": "wx330e54aa6000516d", |
44 | 44 | "projectname": "%E8%AF%AD%E9%9F%B3%E5%8A%A9%E6%89%8B", |
45 | - "isGameTourist": false, | |
46 | - "condition": { | |
47 | - "search": { | |
48 | - "list": [] | |
49 | - }, | |
50 | - "conversation": { | |
51 | - "list": [] | |
52 | - }, | |
53 | - "game": { | |
54 | - "currentL": -1, | |
55 | - "list": [] | |
56 | - }, | |
57 | - "miniprogram": { | |
58 | - "list": [] | |
59 | - } | |
45 | + "condition": {}, | |
46 | + "packOptions": { | |
47 | + "ignore": [], | |
48 | + "include": [] | |
49 | + }, | |
50 | + "editorSetting": { | |
51 | + "tabIndent": "insertSpaces", | |
52 | + "tabSize": 2 | |
60 | 53 | } |
61 | 54 | } |
62 | 55 | \ No newline at end of file | ... | ... |