前兩天在發佈小程序版本的時候,審覈被拒絕,緣由是用戶在發表內容的時候,沒有對內容作安全檢測,例如國家領導人姓名之類的。
後來瞭解到小程序官方文檔上有提供相關檢測接口,包括文本及圖片檢測,這裏我只用到了文本檢測html
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html
請求接口地址是 https://api.weixin.qq.com/wxa/msg_sec_check?access_token=ACCESS_TOKEN
,爲POST請求,請求參數爲:redis
let content = params.content; let access_token = await this.app.redis.get('access_token'); let url = `https://api.weixin.qq.com/wxa/msg_sec_check?access_token=${access_token}`; let data = { content: content } let checkResult = await proxy(url, { headers: { 'Content-Type': 'application/json' }, method: 'POST', body: JSON.stringify(data) }); checkResult = JSON.parse(checkResult); if (checkResult.errcode == 87014) { // 內容含有違法違規內容 response = this.ResultResponse.createByErrorMsg('內容含有違法違規內容'); }
access_token是接口調用憑證,經過getAccessToken接口獲取
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.htmljson
接口請求地址是 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
,爲GET請求,請求參數爲:小程序
接口返回數據除了access_token還有expires_in過時時間 ,這裏有效期是7200s,也就是2小時候該憑證失效,因此咱們須要經過定時器定時刷新獲取access_token,而後存到redis裏面api
/////////get_access_token.js文件 const Subscription = require('egg').Subscription; /** * 獲取微信accessToken定時任務 90(5400s)分鐘刷新一次 */ class GetAceessToken extends Subscription { // 經過 schedule 屬性來設置定時任務的執行間隔等配置 static get schedule() { return { interval: '5400s', // 1 分鐘間隔 隔單位 m 分 、 s 秒、 ms 毫秒 type: 'all', // all 指定全部的 worker 都須要執行 worker 每臺機器上只有一個 worker 會執行這個定時任務 immediate: true, //配置了該參數爲 true 時,這個定時任務會在應用啓動並 ready 後馬上執行一次這個定時任務。 disable: false//配置該參數爲 true 時,這個定時任務不會被啓動。 }; } // subscribe 是真正定時任務執行時被運行的函數 async subscribe() { let ctx = this.ctx; ctx.logger.info('-----getAccessToken start----'); try { await ctx.service.userService.getAccessToken(); } catch (error) { console.log('獲取access token失敗', error) } ctx.logger.info('-----getAccessToken end----'); } } module.exports = GetAceessToken; /////////userService.js文件 /** * 獲取AccessToken,存儲到redis裏面,用於安全內容檢查 每90分鐘刷新一次 */ async getAccessToken() { let url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${config.key.appid}&secret=${config.key.secret}`; let result = await proxy(url, { method: 'GET' }); result = JSON.parse(result); console.log('getAccessToken result', result) await this.app.redis.set('access_token', result.access_token); await this.app.redis.set('expires_in', result.expires_in);//目前有效期7200s 2小時 }