/** * 百度API */ var baidu = {}; var vk = {}; var baiduOpenApiAccessTokenCacheName = "vk_openapi_baidu_open_token"; baidu.init = function(util={}) { vk = util.vk; }; // 百度开放平台api baidu.open = {}; // 文字识别 baidu.open.ocr = {}; /** * 营业执照识别 * 以下data参数三选一即可 * @param {File} file 文件对象 * @param {String} image 图像base64编码后进行urlencode * @param {String} url 图片完整URL * vk.openapi.baidu.open.ocr.business_license({ title:"识别中...", data: { file: res.tempFiles[0] }, success: (res) => { that.data = res.data; }, }); */ baidu.open.ocr.business_license = function(obj={}){ obj.action = "ocr/v1/business_license"; let file = obj.data.file; if(file){ vk.pubfn.fileToBase64({ file }).then(base64 => { obj.data.image = base64; delete obj.data.file; baidu.request(obj); }); }else{ baidu.request(obj); } } /** * 身份证识别 * 以下data参数三选一即可 * @param {File} file 文件对象 * @param {String} image 图像base64编码后进行urlencode * @param {String} url 图片完整URL vk.openapi.baidu.open.ocr.idcard({ title:"识别中...", data: { image:base64, id_card_side:"front", // front:身份证含照片的一面 back:身份证带国徽的一面 }, success: (res) => { that.data = res.data; }, }); */ baidu.open.ocr.idcard = function(obj={}){ obj.action = "ocr/v1/idcard"; let file = obj.data.file; if(!obj.data.id_card_side) obj.data.id_card_side = "front"; if(file){ vk.pubfn.fileToBase64({ file }).then(base64 => { obj.data.image = base64; delete obj.data.file; baidu.request(obj); }); }else{ baidu.request(obj); } } /** * 百度开放平台通用请求接口 * @param {String} action 接口名称 * @param {String} actionVersion 接口版本名称 默认2.0 * @param {String} title loading文字 * @param {object} data 请求参数 * @param {String} success 成功回调 * @param {String} fail 失败回调 * @param {String} complete 完成回调 * 使用示例 vk.openapi.baidu.request({ action: 'ocr/v1/business_license', title:"识别中...", data: { image:base64 }, success: (data) => { that.data = data; }, }); */ baidu.request = function(obj={}){ let { title } = obj; if(title) vk.showLoading(title); let baiduApiAccessToken = vk.getStorageSync(baiduOpenApiAccessTokenCacheName); if(baiduApiAccessToken && baiduApiAccessToken.expTime > new Date().getTime()){ // 获取缓存中的token obj.accessToken = baiduApiAccessToken.accessToken; request(obj); }else{ // 发起请求获取token vk.callFunction({ url: 'plugs/baidu/client/pub/getAccessToken', success:function(tokenRes) { vk.setStorageSync(baiduOpenApiAccessTokenCacheName,{ accessToken : tokenRes.access_token, expTime : 2590000000 + new Date().getTime(), }); obj.accessToken = tokenRes.access_token; request(obj); }, fail:function(res){ if(title) vk.hideLoading(); if(typeof obj.fail === "function") obj.fail(res); if(typeof obj.complete === "function") obj.complete(res); } }); } } function request(obj={}){ let { action, actionVersion = "2.0", accessToken, header = { "content-type": "application/x-www-form-urlencoded" }, data, title } = obj; vk.request({ url: `https://aip.baidubce.com/rest/${actionVersion}/${action}?access_token=${accessToken}`, method:"POST", header:{ "content-type": "application/x-www-form-urlencoded", }, errorCodeName:"error_code", errorMsgName:"error_msg", data, needAlert:true, success: function(data){ if(title) vk.hideLoading(); if(data.code){ if(typeof obj.fail === "function") obj.fail(data); }else{ if(typeof obj.success === "function") obj.success(data); } }, fail: function(data){ if(title) vk.hideLoading(); // 如果是因为token失效报的错误,则清空下本地token缓存 if(data && data.code === 110) vk.removeStorageSync(baiduOpenApiAccessTokenCacheName); if(typeof obj.fail === "function") obj.fail(data); }, complete: function(data){ if(typeof obj.complete === "function") obj.complete(data); } }); } export default baidu;