Commit 269af8d2d0f5150d7842d0555f85e040054105ba
1 parent
5b5872de
feat: 文本合规检查
Showing
4 changed files
with
132 additions
and
20 deletions
README.md
@@ -7,8 +7,10 @@ | @@ -7,8 +7,10 @@ | ||
7 | - 个人类小程序不支持 web-view | 7 | - 个人类小程序不支持 web-view |
8 | - wx.shareFileMessage 可以直接分享文件 | 8 | - wx.shareFileMessage 可以直接分享文件 |
9 | 9 | ||
10 | -- [ ] 内容安全问题处理 | 10 | +- [x] 内容安全问题处理 |
11 | - https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html | 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 | //app.js | 1 | //app.js |
2 | App({ | 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 | globalData: { | 89 | globalData: { |
90 | + // domain: 'http://localhost:3001', | ||
91 | + domain: 'https://jilegeji.xwenliang.cn', | ||
7 | getTypeList(){ | 92 | getTypeList(){ |
8 | return [ | 93 | return [ |
9 | { | 94 | { |
pages/index/index.js
@@ -19,9 +19,41 @@ Page({ | @@ -19,9 +19,41 @@ Page({ | ||
19 | inputText(e){ | 19 | inputText(e){ |
20 | this.data.text = e.detail.value; | 20 | this.data.text = e.detail.value; |
21 | }, | 21 | }, |
22 | - play(){ | 22 | + async play(){ |
23 | const text = this.data.text || this.data.placeholder; | 23 | const text = this.data.text || this.data.placeholder; |
24 | const url = this.data.type[this.data.selectedIndex].createUrl(text); | 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 | this.resetAudio(); | 57 | this.resetAudio(); |
26 | audio = wx.createInnerAudioContext({useWebAudioImplement: true}); | 58 | audio = wx.createInnerAudioContext({useWebAudioImplement: true}); |
27 | audio.autoplay = true; | 59 | audio.autoplay = true; |
project.config.json
@@ -39,23 +39,16 @@ | @@ -39,23 +39,16 @@ | ||
39 | "useCompilerPlugins": false | 39 | "useCompilerPlugins": false |
40 | }, | 40 | }, |
41 | "compileType": "miniprogram", | 41 | "compileType": "miniprogram", |
42 | - "libVersion": "1.9.93", | 42 | + "libVersion": "2.21.3", |
43 | "appid": "wx330e54aa6000516d", | 43 | "appid": "wx330e54aa6000516d", |
44 | "projectname": "%E8%AF%AD%E9%9F%B3%E5%8A%A9%E6%89%8B", | 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 | \ No newline at end of file | 55 | \ No newline at end of file |