記一次小程序圖片安全接口和CountDownLatch的使用

背景:

我們的小程序由于之前沒接入微信官方提供的信息安全接口,導(dǎo)致被警告,下掉了被搜索的權(quán)限(手動狗頭)。然后這兩天就花時間在接入上面了,遇到的坑還是挺多的。


微信原開發(fā)文檔地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.imgSecCheck.html主要是有兩種東西:1、文本消息審核:msgSecCheck2、圖片審核:imgSecCheck其實還有一個:mediaCheckAsync,這個是異步審核的,文檔下面說:異步檢測結(jié)果在 30 分鐘內(nèi)會推送到你的消息接收服務(wù)器。我們的小程序是一個社區(qū),需要同步檢測,所以這個就pass了(狗頭)。


開發(fā)過程:

0、這兩個接口的統(tǒng)一返回結(jié)果:

返回結(jié)果

所以就返回的字符串判斷為0就完事了。


1、獲取token

這兩個接口都需要獲取到access_token,獲取方式就這個東西來:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html


2-1、文本審核

文本審核的就比較粗暴了,POST請求到:https://api.weixin.qq.com/wxa/msg_sec_check?access_token=ACCESS_TOKENbody里面?zhèn)鬟f一個{"content":"hello world"}看返回結(jié)果就完事了。


2-2、圖片審核

那就是比較麻煩的圖片審核接口了。開發(fā)文檔里面可以看到

圖片審核接口請求參數(shù)

他是需要一個FormData的參數(shù),這個就比較惡心了,不能直接把圖片的url傳過去,需要設(shè)置一個類似file的文件。這個后面要處理也不是特別難,我們用的是HttpClient,先接收url參數(shù),再使用HttpGet(HttpPost也行),返回url的response,接著他里面有一個獲取文件流的方法,簡單不設(shè)置參數(shù)的寫法:

HttpClient請求圖片url獲取流對象

然后需要將流轉(zhuǎn)化為file

都是一些最基本的,并沒有設(shè)置參數(shù)啥的

結(jié)果:接入微信安全信息審核的接口,就只要實現(xiàn)上面,分別就可以實現(xiàn)文本、圖片的審核了。但是現(xiàn)在就存在一個問題,圖片的審核接口都是只能一張一張審核的,還需要解析成流再下載成文件,后面測試的時候發(fā)現(xiàn),解析出這樣一個文件并調(diào)用接口返回參數(shù)的步驟差不多需要2秒鐘的時間。我們的東西像是B博一樣,一次性可以發(fā)布多張圖片的,這樣一張一張審核就會花費(fèi)不少的時間,用戶要等待響應(yīng),體驗就極差。但是不審核又不行,不然他們不給你程序過呀。

在這個基礎(chǔ)上面,就想出能不能有增加用戶體驗的效果的東西來實現(xiàn)這種功能,后來就想到了用多線程來實現(xiàn),一次性弄幾個線程來分別執(zhí)行一張圖片的審核。但是單單聲明出多個子線程,后面要怎么匯聚起來得到結(jié)果呢?后來又想到,去年剛畢業(yè)找工作的時候,發(fā)了瘋地看一下面試題,特別是一些并發(fā)之類的東西,突然就想起來了JUC下面的工具包有個CountDownLatch這玩意。

通俗一點(diǎn)對它的解釋就是:聲明出某個數(shù)值比如為10,共有10個子線程,每一個子線程執(zhí)行完之后,10就減1,10個子線程執(zhí)行完之后,10就變成0,這個時候主線程就等待子線程都執(zhí)行完,才執(zhí)行后面的流程。所以,我們有幾張圖片,就在線程池里面聲明出幾個子線程,子線程中沒有報錯的話,就CountDownLatch - 1,主線程最后判斷等于0的話,才能執(zhí)行下一步,如果不為0,說明其中有子線程調(diào)用微信審核接口出錯,有違規(guī)圖片。

代碼截圖

HttpClient的配置和線程池、CountDownLatch的聲明
循環(huán)聲明出子線程
創(chuàng)建臨時文件
調(diào)用審核接口
Latch邏輯
主線程等待

(狗頭)上面都沒有怎么配置一些header、超時多久,還有一些亂七八糟的東西,為了早點(diǎn)接完這個接口提交申訴也只能這樣了,后面有時間的話再看一下能不能優(yōu)化了。

PS:小程序安全審核接口是真的……誰用誰知道系列(狗頭)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容