shawenguan 2 лет назад
Родитель
Сommit
7e0a800461
1 измененных файлов с 54 добавлено и 8 удалено
  1. 54 8
      Scripts/thwj/thwjHelper.js

+ 54 - 8
Scripts/thwj/thwjHelper.js

@@ -156,7 +156,7 @@ async function checkLogin(accountData) {
         }
     } else {
         let base64ImgData = await getVerifyCodeImg();
-        let codeStr = await tryAutoVerifyCode('baidu', base64ImgData);
+        let codeStr = await tryAutoRecognizeCaptcha('ddddocr', base64ImgData);
         if (codeStr) {
             userInfo = await doLogin(phone, password, codeStr);
             if (userInfo) {
@@ -281,22 +281,24 @@ async function getVerifyCodeImg() {
     });
 }
 
-async function tryAutoVerifyCode(typeStr, base64Data) {
+async function tryAutoRecognizeCaptcha(typeStr, base64Data) {
     lk.log('data:image/png;base64,' + base64Data);
     switch (typeStr) {
         case 'baidu':
             let accessToken = await getBDAccessToken();
             if (accessToken) {
                 base64Data = 'data:image/png;base64,' + base64Data;
-                return doVerifyCodeByBDOCR(base64Data, accessToken);
+                return recognizeCaptchaByBDOCR(base64Data, accessToken);
             }
         case '345api':
             base64Data = 'data:image/png;base64,' + base64Data;
-            return doVerifyCodeBy345Api(base64Data);
+            return recognizeCaptchaBy345Api(base64Data);
+        case 'ddddocr':
+            return recognizeCaptchaByDdddocr(base64Data);
     }
 }
 
-async function doVerifyCodeBy345Api(base64Data) {
+async function recognizeCaptchaBy345Api(base64Data) {
     return new Promise((resolve, _reject) => {
         try {
             const headers = {
@@ -353,7 +355,53 @@ async function doVerifyCodeBy345Api(base64Data) {
     });
 }
 
-async function doVerifyCodeByBDOCR(base64Data, accessToken) {
+async function recognizeCaptchaByDdddocr(base64Data) {
+    return new Promise((resolve, _reject) => {
+        let reqData = {
+            image: encodeURIComponent(base64Data)
+        }
+        let form = lk.objToQueryStr(reqData);
+        let headers = {
+            'Accept': `application/json`,
+            'Origin': `https://api.jojo21.com`,
+            'Connection': `keep-alive`,
+            'Host': `api.jojo21.com`,
+            'User-Agent': CommonUserAgent,
+            'Content-Type': 'application/x-www-form-urlencoded',
+        };
+        let options = {
+            url: 'http://api.jojo21.com/captcha/ddddocr',
+            headers: headers,
+            body: form,
+        };
+
+        lk.log('请求开源识别库ddddocr进行识别');
+        lk.post(options, async (error, _response, data) => {
+            let ret;
+            try {
+                if (error) {
+                    lk.log(`验证码识别发生错误`);
+                } else {
+                    lk.log(data);
+                    let info = JSON.parse(data);
+                    if (info && info.code == 1) {
+                        ret = info.code_data;
+                        lk.log(`验证码识别成功:${info.code_data},识别耗时:${info.require_date}s`);
+                    }
+                }
+            } catch (e) {
+                lk.log(`验证码识别发生错误`);
+                lk.logErr(e);
+                lk.execFail();
+            } finally {
+                resolve(ret);
+            }
+        });
+    });
+}
+
+
+async function recognizeCaptchaByBDOCR(base64Data, accessToken) {
     return new Promise((resolve, _reject) => {
         let reqData = {
             image: encodeURIComponent(base64Data),
@@ -402,8 +450,6 @@ async function doVerifyCodeByBDOCR(base64Data, accessToken) {
         });
     });
 }
-
-
 /**
  * 使用 AK,SK 生成鉴权签名(Access Token)
  * @return string 鉴权签名信息(Access Token)