HttpRequest.java 92 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664
  1. package com.hanghui.senic.network;
  2. import android.app.AlarmManager;
  3. import android.app.PendingIntent;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.icu.util.Calendar;
  7. import android.os.Build;
  8. import android.os.Handler;
  9. import android.util.Log;
  10. import com.alibaba.fastjson.JSONObject;
  11. import com.baidu.idl.main.facesdk.model.BaseConfig;
  12. import com.baidu.idl.main.facesdk.model.SingleBaseConfig;
  13. import com.common.pos.api.util.PosUtil;
  14. import com.google.gson.Gson;
  15. import com.google.gson.reflect.TypeToken;
  16. import com.hanghui.senic.MyAppliction;
  17. import com.hanghui.senic.activity.view.BaiDuFaceView;
  18. import com.hanghui.senic.activity.view.ResultViewManager;
  19. import com.hanghui.senic.baiduface.BaiduFaceController;
  20. import com.hanghui.senic.bean.AlipayUserInfoBean;
  21. import com.hanghui.senic.bean.AuthenticationBean;
  22. import com.hanghui.senic.bean.BlacklistConfigBean;
  23. import com.hanghui.senic.bean.DecryptBean;
  24. import com.hanghui.senic.bean.FederatedPlatformsResponseBean;
  25. import com.hanghui.senic.bean.FederatedPlatformsRequestBean;
  26. import com.hanghui.senic.bean.SpecialCodeTradeThreeElementsBean;
  27. import com.hanghui.senic.common.AppHandler;
  28. import com.hanghui.senic.common.CommonUtil;
  29. import com.hanghui.senic.common.Constants;
  30. import com.hanghui.senic.common.DataManager;
  31. import com.hanghui.senic.common.DataReturns;
  32. import com.hanghui.senic.common.DeviceExpireManager;
  33. import com.hanghui.senic.common.DeviceInitManager;
  34. import com.hanghui.senic.common.DoorMagneticSignalManager;
  35. import com.hanghui.senic.common.EncryptionAndDecryptionUtil;
  36. import com.hanghui.senic.common.PosManager;
  37. import com.hanghui.senic.common.TaskStatus;
  38. import com.hanghui.senic.common.UserInfoManager;
  39. import com.hanghui.senic.common.contract.ContractInterface;
  40. import com.hanghui.senic.common.gson.CompleteDataUtil;
  41. import com.hanghui.senic.controller.BlacklistManager;
  42. import com.hanghui.senic.controller.IDCardControllerManager;
  43. import com.hanghui.senic.controller.PassportController;
  44. import com.hanghui.senic.controller.QRCodeController;
  45. import com.hanghui.senic.controller.SerialController;
  46. import com.hanghui.senic.model.MyModel;
  47. import com.hanghui.senic.presenter.MyPresenter;
  48. import com.hanghui.senic.receiver.RebootReceiver;
  49. import com.hanghui.senic.service.CheckExitService;
  50. import com.hanghui.senic.service.FilterRepeatDataService;
  51. import com.hanghui.senic.service.usbserialdemo.utile.ConfigManager;
  52. import com.hanghui.senic.service.usbserialdemo.utile.DateUtil;
  53. import com.hanghui.senic.service.usbserialdemo.utile.PopupWindowManager;
  54. import com.hanghui.senic.network.retorfit.RetrofitUtil;
  55. import com.hanghui.senic.service.usbserialdemo.utile.SharedPreferencesUtils;
  56. import com.hanghui.senic.service.usbserialdemo.utile.StringIsNull;
  57. import com.hanghui.senic.service.usbserialdemo.utile.VolumeUtil;
  58. import com.hanghui.senic.service.usbserialdemo.utile.X1.RelaysAndLedUtile;
  59. import com.hanghui.senic.service.usbserialdemo.utile.devicesUI.BaseDeviceUI;
  60. import com.hanghui.senic.service.usbserialdemo.utile.loacat.AppLogUtils;
  61. import java.io.DataInputStream;
  62. import java.io.DataOutputStream;
  63. import java.lang.reflect.Type;
  64. import java.text.ParseException;
  65. import java.text.SimpleDateFormat;
  66. import java.util.HashMap;
  67. import java.util.List;
  68. import java.util.Locale;
  69. import java.util.Map;
  70. public class HttpRequest {
  71. public ContractInterface.PAuthentication pAuthentication;
  72. public ContractInterface.PUserwithftoken pUserwithftoken;
  73. public ContractInterface.PLogUploads pLogUploads;
  74. public ContractInterface.PDevice pDevice;
  75. private static HttpRequest instance;
  76. MyModel myModel;
  77. private HttpRequest() {
  78. myModel = new MyModel();
  79. pAuthentication = new MyPresenter(CommonUtil.getCurrentActivity());
  80. pUserwithftoken = new MyPresenter(CommonUtil.getCurrentActivity());
  81. pDevice = new MyPresenter(CommonUtil.getCurrentActivity());
  82. pLogUploads = new MyPresenter(this);
  83. }
  84. public static HttpRequest getInstance() {
  85. synchronized (HttpRequest.class) {
  86. if (instance == null) {
  87. instance = new HttpRequest();
  88. }
  89. }
  90. return instance;
  91. }
  92. //接口请求失败
  93. private Runnable requestConfigRunnable = new Runnable() {
  94. @Override
  95. public void run() {
  96. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_BottomTextPrompt, "获取在线配置中……");
  97. HttpRequest.getInstance().requestAuthentication();
  98. }
  99. };
  100. /**
  101. * 获取设备在线配置
  102. */
  103. private boolean isSQLCrashLogUpload = false;//判断是否上报本地数据库日志
  104. private boolean isAgainRequest = false;//是否再次请求 默认false
  105. /**
  106. * 请求在线配置
  107. */
  108. public void requestAuthentication() {
  109. pAuthentication.PAuthentication(ConfigManager.SN, ConfigManager.token, new MyPresenter.DataResponseCallback() {
  110. @Override
  111. public void onDataResponse(Object os) {
  112. AuthenticationBean authenticationBean = (AuthenticationBean) os;
  113. AppHandler.getHandler().removeCallbacks(requestConfigRunnable);
  114. AppLogUtils.e(false, "", "在线配置返回后销毁网络异常的悬浮框");
  115. PopupWindowManager.getInstance().dismissNetWorkpopupWindow();
  116. if (authenticationBean.getCode() != 200) {
  117. if (isAgainRequest) { //第二次请求还是失败时才显示"在线配置获取失败,启用上一次本地配置"的提示文字
  118. String promptMessage = ConfigManager.localConfiguration();
  119. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_BottomTextPrompt, promptMessage);
  120. return;
  121. }
  122. //在线配置获取失败
  123. String msgs = authenticationBean.getMsg();
  124. if (StringIsNull.IsStringNull(msgs)) {
  125. msgs = "在线配置获取失败";
  126. }
  127. if (msgs.equals("设备商户平台未授权")) {
  128. msgs = "设备授权平台未授权,请联系设备厂商";
  129. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_BottomTextPrompt, msgs);
  130. return;
  131. }
  132. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_BottomTextPrompt, msgs + "(3秒后重试)");
  133. isAgainRequest = true;
  134. postRequestConfigRunnable(3 * 1000);
  135. return;
  136. }
  137. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_InternetAvailable, "设置网络正常图标");
  138. ConfigManager.isConfigRequestSuccess = true;
  139. try {
  140. parseConfiguration(ConfigManager.getGson().toJson(os));
  141. } catch (Exception e) {
  142. e.printStackTrace();
  143. }
  144. RetrofitUtil.setutilNull();//获取到配置后RetrofitUtil置为null,下次使用时才能重新创建实例,才能重新设置在线配置的超时时间
  145. }
  146. });
  147. }
  148. /**
  149. * 在线获取到配置 以及 本地缓存读取到配置 后都会执行parseConfiguration这个方法
  150. * @param jsonData
  151. */
  152. public void parseConfiguration(String jsonData) {
  153. if (StringIsNull.IsStringNull(jsonData)) {
  154. AppLogUtils.e(true, "设备配置项", "检测到在线配置数据为空,请检查传递数据是否正常, jsonData=" + jsonData);
  155. return;
  156. }
  157. AuthenticationBean authenticationBean = ConfigManager.getGson().fromJson(jsonData, AuthenticationBean.class);
  158. //补全数据,防止数据为空的情况
  159. authenticationBean = CompleteDataUtil.completeConfigurationBean(authenticationBean);
  160. //补全数据类型为int、boolean类型的字段
  161. CompleteDataUtil.completeData(authenticationBean);
  162. //保存在线配置到本地数据库
  163. List<String> list = MyAppliction.getmDbDao().queryData("data");
  164. if (list.size() > 0) {
  165. MyAppliction.getmDbDao().delete("data");
  166. }
  167. MyAppliction.getmDbDao().insertData("data", jsonData);
  168. //更新配置项
  169. ConfigManager.UpdateConfiguration(authenticationBean);
  170. if (ConfigManager.isUpdateConfig){
  171. return;
  172. }
  173. //将设备是否首次打开状态修改
  174. SharedPreferencesUtils.setParam(MyAppliction.getContext(), "forTheFirstTime", false);
  175. //弹框提示设备到期时间
  176. AppHandler.getHandler().postDelayed(new Runnable() {
  177. @Override
  178. public void run() {
  179. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_HideBottomTextView, "隐藏底部文字");
  180. initConfigIfDeviceNotExpiration();
  181. }
  182. }, 2 * 1000); //延迟2秒,等待"获取在线配置中……"的提示文字显示一段时间
  183. }
  184. /**
  185. * 设备是否过期的相关判断逻辑,如果已经过期则弹出过期提示框提示设备不能使用,如果没有过期则执行后续的外设初始化的流程
  186. *
  187. */
  188. private void initConfigIfDeviceNotExpiration() {
  189. //当到期时间为空时,直接初始化
  190. if (StringIsNull.IsStringNull(ConfigManager.getAuthenticationBean().getData().get(0).getExpirationDate())) {
  191. initConfig();
  192. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_ShowBottomTextView, "显示底部文字");
  193. return;
  194. }
  195. String startTime = ConfigManager.getNetworkTime();//获取网络时间
  196. String endTime = ConfigManager.getAuthenticationBean().getData().get(0).getExpirationDate();
  197. String timeRangeData = "";
  198. try {
  199. timeRangeData = String.valueOf(DateUtil.getTimeRange(startTime, endTime));
  200. } catch (ParseException e) {
  201. throw new RuntimeException(e);
  202. }
  203. if (StringIsNull.IsStringNull(timeRangeData)) {//计算时间差的值为空,则不做任何处理,直接return
  204. return;
  205. }
  206. int timeRange = Integer.parseInt(timeRangeData);
  207. if (timeRange > 30) {//距离过期大于30天则不显示,直接进行初始化操作
  208. initConfig();
  209. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_ShowBottomTextView, "显示底部文字");
  210. } else {//距离过期小于等于30天,则显示到期时间提示框
  211. PopupWindowManager.getInstance().getExpirationTimeFloat(timeRange);
  212. PopupWindowManager.getInstance().setListener(new PopupWindowManager.OnClickListener() {
  213. @Override
  214. public void OnClickListener() {
  215. initConfig();
  216. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_ShowBottomTextView, "显示底部文字");
  217. }
  218. });
  219. }
  220. //timeRange < 0 表示已经过期
  221. if (timeRange < 0) {
  222. DeviceExpireManager.getInstance().setDeviceExpire(true);
  223. } else {
  224. DeviceExpireManager.getInstance().setDeviceExpire(false);
  225. }
  226. }
  227. private void initConfig() {
  228. //底部文字提示
  229. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_BottomTextPrompt, "在线配置获取成功");
  230. //主页背景图片
  231. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_HomeBackgroundImage, "主页背景图片");
  232. //崩溃日志上报
  233. //crashLogUpload();
  234. //设置百度face配置项
  235. setBaiDuFaceConfig();
  236. //设置音量
  237. setMediaVolume();
  238. //设置下拉通知栏及导航栏
  239. setNotificationAndNavigationBar();
  240. //开机自启动
  241. setAutoLaunch();
  242. //补光灯设置
  243. RelaysAndLedUtile.getInstance().setLedLight(ConfigManager.getAuthenticationBeanListBean().getLightMode(), false);
  244. //设置硬件开启的总数量
  245. setTotalHardwareOpenNum();
  246. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_StartHardware,"硬件启动");
  247. //设置身份证阅读器相关
  248. setupIDCardReader();
  249. //二维码启动或关闭
  250. setupQRCode();
  251. //护照机是否开启
  252. setupSmileAndPassport();
  253. //IC卡启动
  254. setICCardReader();
  255. // //smile服务
  256. // setStartSmileService();
  257. //设置SystemType
  258. setSystemType();
  259. //串口相关
  260. setSerialPort();
  261. //门磁信号相关
  262. SetPushGm();
  263. //定时重启是否开启
  264. setScheduledRestart();
  265. //黑名单配置
  266. BlacklistConfig();
  267. //启动滤重时间
  268. if (ConfigManager.getAuthenticationBean().getData().get(0).getInOutFilterRepeatTime() > 0) {
  269. FilterRepeatDataService.start(CommonUtil.getCurrentActivity());
  270. }
  271. }
  272. private void setBaiDuFaceConfig() {
  273. BaseConfig baseConfig = SingleBaseConfig.getBaseConfig();
  274. baseConfig.setBestImageScore(ConfigManager.getAuthenticationBeanListBean().getBestImageScore());
  275. baseConfig.setBestImage(ConfigManager.getAuthenticationBeanListBean().getUsingBestImage());
  276. baseConfig.setQualityControl(ConfigManager.getAuthenticationBeanListBean().getQualityControl());
  277. baseConfig.setBlur(ConfigManager.getAuthenticationBeanListBean().getBlur());
  278. baseConfig.setIllumination(ConfigManager.getAuthenticationBeanListBean().getIllum());
  279. if (!ConfigManager.getAuthenticationBeanListBean().getLivingControl()){
  280. baseConfig.setLivingControl(false);
  281. baseConfig.setType(0);
  282. } else {
  283. //设置活体检测模式
  284. baseConfig.setLivingControl(true);
  285. baseConfig.setType(ConfigManager.getAuthenticationBeanListBean().getLiveType());
  286. }
  287. baseConfig.setRgbLiveScore(ConfigManager.getAuthenticationBeanListBean().getRgbLiveScore());
  288. baseConfig.setNirLiveScore(ConfigManager.getAuthenticationBeanListBean().getNirLiveScore());
  289. baseConfig.setDepthLiveScore(ConfigManager.getAuthenticationBeanListBean().getDepthLiveScore());
  290. baseConfig.setMinimumFace(ConfigManager.getAuthenticationBeanListBean().getMinFaceSize());
  291. baseConfig.setRgbVideoDirection(ConfigManager.getAuthenticationBeanListBean().getRgbVideoDirection());
  292. baseConfig.setRgbDetectDirection(ConfigManager.getAuthenticationBeanListBean().getRgbDetectDirection());
  293. baseConfig.setNirDetectDirection(ConfigManager.getAuthenticationBeanListBean().getNirDetectDirection());
  294. baseConfig.setNirVideoDirection(ConfigManager.getAuthenticationBeanListBean().getNirVideoDirection());
  295. //1:1比对阈值
  296. baseConfig.setIdThreshold(ConfigManager.getAuthenticationBeanListBean().getOneToOneScoreThreshold());
  297. //1:N比对阈值
  298. baseConfig.setLiveThreshold(ConfigManager.getAuthenticationBeanListBean().getOneToNScoreThreshold());
  299. baseConfig.setRgbAndNirThreshold(ConfigManager.getAuthenticationBeanListBean().getOneToNScoreThreshold());
  300. baseConfig.setOneToNFailShowTip(ConfigManager.getAuthenticationBeanListBean().getOneToNFailShowTip());
  301. baseConfig.setOneToOneContinueFailTime(ConfigManager.getAuthenticationBeanListBean().getOneToOneContinueFailTime());
  302. //设置镜像
  303. baseConfig.setMirrorVideoRGB(ConfigManager.getAuthenticationBeanListBean().getMirrorVideoRGB());
  304. baseConfig.setMirrorVideoNIR(ConfigManager.getAuthenticationBeanListBean().getMirrorVideoNIR());
  305. baseConfig.setMirrorDetectRGB(ConfigManager.getAuthenticationBeanListBean().getMirrorDetectRGB());
  306. baseConfig.setMirrorDetectNIR(ConfigManager.getAuthenticationBeanListBean().getMirrorDetectNIR());
  307. }
  308. private void setTotalHardwareOpenNum() {
  309. if (ConfigManager.getAuthenticationBeanListBean().isUseIdcard()) {
  310. DeviceInitManager.getInstance().totalOpenHardwareNum++;
  311. }
  312. if (ConfigManager.getAuthenticationBeanListBean().isUseQrcode()){
  313. DeviceInitManager.getInstance().totalOpenHardwareNum++;
  314. }
  315. if (ConfigManager.getAuthenticationBeanListBean().isOpenPassport()) {
  316. DeviceInitManager.getInstance().totalOpenHardwareNum++;
  317. }
  318. if (ConfigManager.isOpenICCard()) {
  319. DeviceInitManager.getInstance().totalOpenHardwareNum++;
  320. }
  321. }
  322. public void setStartSmileService() {
  323. //SmileController.getInstance().init();
  324. }
  325. private void BlacklistConfig() {
  326. if (!ConfigManager.isOpenBlacklist()) {
  327. AppLogUtils.e(false, "黑名单配置", "黑名单配置未开启,直接return");
  328. return;
  329. }
  330. if (!ConfigManager.getAuthenticationBeanListBean().getUserBlacklistOfflineSwitch()) {
  331. //本地黑名单未开启,直接拉取三方黑名单
  332. userBlacklistConfig();
  333. return;
  334. }
  335. if (ConfigManager.getAuthenticationBeanListBean().getUserBlacklistOfflineSwitch()) {
  336. //本地黑名单开启,先拉取本地黑名单,然后再拉取三方黑名单配置
  337. localBlacklistConfig();
  338. }
  339. }
  340. /**
  341. * 三方黑名单配置
  342. */
  343. private void userBlacklistConfig() {
  344. if (!ConfigManager.getAuthenticationBeanListBean().getUserBlacklistInterfFetchSwitch()) {
  345. AppLogUtils.e(false, "黑名单配置", "黑名单未开启,不执行后续逻辑处理");
  346. return;
  347. }
  348. //拉取三方黑名单
  349. requestLocalBlacklistInterfConfig();
  350. }
  351. /**
  352. * 本地黑名单配置
  353. */
  354. private void localBlacklistConfig() {
  355. if (!ConfigManager.getAuthenticationBeanListBean().getUserBlacklistOfflineSwitch()) {
  356. AppLogUtils.e(false, "黑名单配置", "黑名单未开启,不执行后续逻辑处理");
  357. return;
  358. }
  359. //拉取本地黑名单
  360. requestLocalBlacklistConfig();
  361. }
  362. /**
  363. * 执行Android命令
  364. *
  365. * @param cmd 命令
  366. */
  367. private static void execSuCmd(String cmd) {
  368. Process process = null;
  369. DataOutputStream os = null;
  370. DataInputStream is = null;
  371. try {
  372. process = Runtime.getRuntime().exec("su");
  373. os = new DataOutputStream(process.getOutputStream());
  374. os.writeBytes(cmd + "\n");
  375. os.writeBytes("exit\n");
  376. os.flush();
  377. int aa = process.waitFor();
  378. is = new DataInputStream(process.getInputStream());
  379. byte[] buffer = new byte[is.available()];
  380. is.read(buffer);
  381. String out = new String(buffer);
  382. } catch (Exception e) {
  383. e.printStackTrace();
  384. } finally {
  385. try {
  386. if (os != null) {
  387. os.close();
  388. }
  389. if (is != null) {
  390. is.close();
  391. }
  392. if (process != null) {
  393. process.destroy();
  394. }
  395. } catch (Exception e) {
  396. }
  397. }
  398. }
  399. private void setScheduledRestart() {
  400. if (ConfigManager.getAuthenticationBeanListBean().getScheduledRestart()) {
  401. Calendar calendar = null;
  402. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  403. calendar = Calendar.getInstance();
  404. calendar.setTimeInMillis(System.currentTimeMillis());
  405. String scheduledRestartTime = ConfigManager.getAuthenticationBeanListBean().getScheduledRestartTime();
  406. int hour = Integer.parseInt(scheduledRestartTime.substring(0, 2));
  407. int minute = Integer.parseInt(scheduledRestartTime.substring(3, 5));
  408. int second = Integer.parseInt(scheduledRestartTime.substring(6));
  409. calendar.set(Calendar.HOUR_OF_DAY, hour);
  410. calendar.set(Calendar.MINUTE, minute);
  411. calendar.set(Calendar.SECOND, second);
  412. long setTime = calendar.getTimeInMillis();
  413. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
  414. long currentTime = System.currentTimeMillis();
  415. // 如果当前的时间大于设定的时间,表明设定的时间是未来一天的,做一个加一天的操作
  416. if (currentTime >= setTime) {
  417. calendar.add(Calendar.HOUR, 24);
  418. calendar.getTimeInMillis();
  419. }
  420. // 2. 设置闹钟时间
  421. AlarmManager alarmManager = (AlarmManager) MyAppliction.getContext().getSystemService(Context.ALARM_SERVICE);
  422. Intent alarmIntent = new Intent(MyAppliction.getContext(), RebootReceiver.class);
  423. PendingIntent pendingIntent = PendingIntent.getBroadcast(MyAppliction.getContext(), 0, alarmIntent, 0);
  424. alarmManager.cancel(pendingIntent);//清除之前设置好的闹钟
  425. alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
  426. AlarmManager.INTERVAL_DAY, pendingIntent);
  427. }
  428. } else {
  429. CommonUtil.getCurrentActivity().stopService(new Intent(CommonUtil.getCurrentActivity(), RebootReceiver.class));
  430. }
  431. }
  432. private void setICCardReader() {
  433. //东信多合一阅读器的身份证和二维码是在同一个设备上,因此此时也需要初始化东信多合一的身份证阅读器DXAllInoneIDCardcontroller
  434. if (ConfigManager.isOpenICCard()) {
  435. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_ShowICCardIcon, "IC卡开启");
  436. IDCardControllerManager.init(9);
  437. }
  438. }
  439. //推送门磁信号
  440. private DoorMagneticSignalManager doorMagneticSignalManager;
  441. private Handler PushDoorSignalHandler = new Handler();
  442. private Runnable PushDoorSignalRunnable = new Runnable() {
  443. @Override
  444. public void run() {
  445. if (!StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getGMAddress())) {
  446. Map<String, Object> map = new HashMap<>();
  447. map.put("sn", ConfigManager.getDeviceSN());
  448. map.put("doorStatus", ConfigManager.isShortContact);
  449. pAuthentication.PPushDoorMagneticSignal(map, ConfigManager.getAuthenticationBeanListBean().getGMAddress());
  450. PushDoorSignalHandler.postDelayed(PushDoorSignalRunnable, ConfigManager.getAuthenticationBeanListBean().getGMFrequency());
  451. }
  452. }
  453. };
  454. private void SetPushGm() {
  455. if (ConfigManager.getAuthenticationBeanListBean().isPushGm() &&
  456. !StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getGMAddress())) {
  457. //门磁信号监听
  458. if (doorMagneticSignalManager == null) {
  459. doorMagneticSignalManager = new DoorMagneticSignalManager();
  460. }
  461. if (Build.MODEL.indexOf("F2") != -1) {
  462. doorMagneticSignalManager.start1();
  463. } else {
  464. doorMagneticSignalManager.start2(1);
  465. }
  466. if (ConfigManager.getAuthenticationBeanListBean().getGMFrequency() == 0) {
  467. ConfigManager.getAuthenticationBeanListBean().setGMFrequency(1000);
  468. }
  469. //启动定时器
  470. PushDoorSignalHandler.removeCallbacks(PushDoorSignalRunnable);
  471. PushDoorSignalHandler.postDelayed(PushDoorSignalRunnable, 0);
  472. }
  473. }
  474. private void setSerialPort() {
  475. //串口的关闭需要一点时间,如果调用关闭的方法后又立马打开串口会导致串口数据读取异常(持续不断的返回乱码的错误数据)
  476. AppHandler.getHandler().postDelayed(new Runnable() {
  477. @Override
  478. public void run() {
  479. //打开RS232开门的串口
  480. String UseSerialPort = StringIsNull.ReturnString(ConfigManager.getAuthenticationBeanListBean().getUseSerialPort());
  481. if (UseSerialPort.equals("RS232")
  482. && !StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getDoorSerialPort())) {
  483. SerialController.getInstance().DoorGetSerial();
  484. }
  485. //获取结果页信息的串口通信地址
  486. if (ConfigManager.getAuthenticationBeanListBean().getCommunicationMode() == 3 &&
  487. !StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getCommunicationSerialPort())) {
  488. //判断是否建立默认rs232串口连接
  489. SerialController.getInstance().communicationComSerial();
  490. }
  491. //二维码串口通讯
  492. if (ConfigManager.getAuthenticationBeanListBean().isUseQrcode() &&
  493. ConfigManager.getAuthenticationBeanListBean().getQrCodeReaderCommunicationMode() == 2) {
  494. SerialController.getInstance().QrCodeComSerial();
  495. }
  496. //门磁信号串口地址
  497. if (ConfigManager.getAuthenticationBeanListBean().isPushGm() &&
  498. !StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getDoorSerialPortAddress())) {
  499. SerialController.getInstance().doorSerialPortAddressComSerial();
  500. }
  501. }
  502. }, 3 * 1000);
  503. }
  504. private void setNotificationAndNavigationBar() {
  505. // 下拉通知栏
  506. if (!ConfigManager.getAuthenticationBeanListBean().isForbidPullDown()) {
  507. BaseDeviceUI.getInstance().getDeviceUI().showNotification();
  508. } else {
  509. BaseDeviceUI.getInstance().getDeviceUI().hideNotification();
  510. }
  511. // 隐藏底部导航栏
  512. if (!ConfigManager.getAuthenticationBeanListBean().isHideNavigationBar()) {
  513. BaseDeviceUI.getInstance().getDeviceUI().showNavigationBar();
  514. } else {
  515. BaseDeviceUI.getInstance().getDeviceUI().hideNavigationBar();
  516. }
  517. }
  518. // public void crashLogUpload() {
  519. // List<String> LogUploadsList = MyAppliction.getmDbDao().queryData1("CrashLog");
  520. // if (LogUploadsList.size() > 0) {
  521. // AppLogUtils.i(false, " 检测到有错误日志后 ", "上报错误日志信息:" + ConfigManager.getGson().toJson(LogUploadsList));
  522. // for (int i = 0; i < LogUploadsList.size(); i++) {
  523. // ConfigManager.setLogUploads(pLogUploads, "Crash", "报错信息", LogUploadsList.get(i), isSQLCrashLogUpload);
  524. // if (i == LogUploadsList.size() - 1) {
  525. // isSQLCrashLogUpload = true;
  526. // }
  527. // }
  528. // }
  529. // }
  530. //二维码相关
  531. private void setupQRCode() {
  532. if (!ConfigManager.getAuthenticationBeanListBean().isUseQrcode()){
  533. return;
  534. }
  535. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_ShowQRCodeIcon, "二维码读头开启");
  536. //虚拟串口的二维码阅读器才需要初始化QRCodeController,串口的二维码阅读器走的是SerialController
  537. if (ConfigManager.getAuthenticationBeanListBean().getQrCodeReaderCommunicationMode() == 1 && ConfigManager.getAuthenticationBeanListBean().getQrCodeReaderBrand() != 6) {
  538. QRCodeController.getInstance().init();
  539. } else {
  540. QRCodeController.getInstance().destroy();
  541. }
  542. //东信多合一阅读器的身份证和二维码是在同一个设备上,因此此时也需要初始化东信多合一的身份证阅读器DXAllInoneIDCardcontroller
  543. if (ConfigManager.getAuthenticationBeanListBean().getQrCodeReaderBrand() == 6) {
  544. IDCardControllerManager.init(9);
  545. }
  546. }
  547. /**
  548. * 刷脸、护照机
  549. * <p>
  550. * 护照机初始化时间比较久,护照机开启的情况下等护照机初始化成功后再初始化smile刷脸
  551. */
  552. private void setupSmileAndPassport() {
  553. if (!ConfigManager.getAuthenticationBeanListBean().isOpenPassport()) {
  554. return;
  555. }
  556. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_ShowPassportIcon, "护照机开启");
  557. if (PassportController.getInstance().ocrThread != null && PassportController.getInstance().ocrThread.CheckDeviceOnlineEx() == 0) {
  558. return;
  559. }
  560. AppHandler.getHandler().post(new Runnable() {
  561. @Override
  562. public void run() {
  563. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_BottomTextPrompt, "护照机开始初始化");
  564. PassportController.getInstance().isExitApp = false;
  565. PassportController.getInstance().openOCrRecoge();
  566. TaskStatus.setStatus(TaskStatus.TASK_STATUS_WAIT);
  567. AppLogUtils.i(false, "判断护照机文件是否存在 " + ConfigManager.fileIsExists(ConfigManager.getSDPath() + "/AndroidWTone"));
  568. PassportController.getInstance().init();
  569. if (!ConfigManager.fileIsExists(ConfigManager.getSDPath() + "/AndroidWTone")) {
  570. ConfigManager.isFileExists = false;
  571. } else {
  572. ConfigManager.isFileExists = true;
  573. }
  574. PassportController.getInstance().PassportStart = "init";
  575. }
  576. });
  577. }
  578. /**
  579. * 设置音量
  580. */
  581. private void setMediaVolume() {
  582. int volume = ConfigManager.getAuthenticationBeanListBean().getVolume();
  583. int MediaVolume = (int) (volume * 0.15);
  584. VolumeUtil.getInstance().setMediaVolume(MediaVolume);
  585. }
  586. //身份证阅读器相关
  587. private void setupIDCardReader() {
  588. if (!ConfigManager.getAuthenticationBeanListBean().isUseIdcard()) {
  589. return ;
  590. }
  591. httpResponseCallback.updateView(Constants.Code_HttpResponseCallback_ShowIDCardIcon, "身份证阅读器开启");
  592. IDCardControllerManager.init(ConfigManager.getAuthenticationBeanListBean().getIdCardReaderBrand());
  593. }
  594. private void setAutoLaunch() {
  595. boolean AutoLaunch = ConfigManager.getAuthenticationBeanListBean().getAutoLaunch();
  596. SharedPreferencesUtils.setParam(CommonUtil.getCurrentActivity(), "autoLaunch", AutoLaunch);
  597. if (ConfigManager.getAuthenticationBeanListBean().getAutoLaunch()) {
  598. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  599. MyAppliction.getContext().startForegroundService(new Intent(MyAppliction.getContext(), CheckExitService.class));
  600. } else {
  601. MyAppliction.getContext().startService(new Intent(MyAppliction.getContext(), CheckExitService.class));
  602. }
  603. }
  604. }
  605. private void setSystemType() {
  606. if (ConfigManager.getAuthenticationBeanListBean().getSystemTypeCode() == 1 &&
  607. ConfigManager.getAuthenticationBeanListBean().getRelayOpenModel() == 2) {
  608. //蚂蚁os系统
  609. PosUtil.switchInputType(PosUtil.DOOR_INPUT, PosUtil.WIEGAND_INPUT, PosUtil.SWITCH_OPEN_INPUT1);
  610. PosManager.getInstance().registerInputBroadcast();
  611. }
  612. }
  613. public void postRequestConfigRunnable(long delayMillis) {
  614. AppHandler.getHandler().removeCallbacks(requestConfigRunnable);
  615. AppHandler.getHandler().postDelayed(requestConfigRunnable, delayMillis);
  616. }
  617. /**
  618. * 预检查核验接口请求
  619. */
  620. public void requestFederatedPlatformsCheck(boolean isNeedShowRequesting) {
  621. //判断核验接口是否开启
  622. if (ConfigManager.isLinkagePlatformClose()) {
  623. return;
  624. }
  625. //判断核验接口地址是否为空
  626. if (ConfigManager.isLinkageAdressEmpty()) {
  627. return;
  628. }
  629. //判断核验密钥是否为空
  630. if (ConfigManager.isEncryptKeyEmpty()) {
  631. return;
  632. }
  633. if (isNeedShowRequesting) {
  634. ResultViewManager.getInstance().setRequestingRunnable();
  635. }
  636. pAuthentication.PFederatedPlatformsCheck(ConfigManager.getFederatedPlatformsRequestBean(), new MyPresenter.DataResponseCallback() {
  637. @Override
  638. public void onDataResponse(Object o) {
  639. ResultViewManager.getInstance().removeRequestingRunnable();
  640. FederatedPlatformsResponseBean federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
  641. if (ConfigManager.isEncryptLinkage()) {
  642. //数据解密
  643. DecryptBean decryptBean = ConfigManager.getGson().fromJson((String) o, DecryptBean.class);
  644. if (decryptBean.getCode() != 200) {//核验接口请求失败
  645. if (StringIsNull.IsStringNull(decryptBean.getMsg())) {
  646. decryptBean.setMsg("核验接口请求失败");
  647. }
  648. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启预检查:返回数据code非200,通知调度中心处理");
  649. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", decryptBean.getMsg(), decryptBean.getCode(), decryptBean.getMsg());
  650. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  651. return;
  652. }
  653. //验签失败
  654. if (!EncryptionAndDecryptionUtil.checkSign(
  655. ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptAppKey(),
  656. ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptAppSecret(),
  657. decryptBean.getData().getSign(),
  658. String.valueOf(decryptBean.getData().getReqTimestamp()))) {
  659. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "核验接口验签出错", 500, "核验接口验签出错");
  660. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  661. return;
  662. }
  663. String decryptData = "";
  664. decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptPrivateKey(), decryptBean.getData().getBizContent());
  665. if (StringIsNull.IsStringNull(decryptData)) {
  666. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "核验接口解密失败", 500, "核验接口解密失败");
  667. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  668. return;
  669. }
  670. AppLogUtils.i(true, "接口请求_加密接口请求", "加密接口请求数据返回 " + decryptData);
  671. federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
  672. federatedPlatformsResponseBean.setMsg("请求成功");
  673. federatedPlatformsResponseBean.setCode(200);
  674. FederatedPlatformsResponseBean.DataDTO federatedPlatformsResponseBeanDtat = ConfigManager.getGson().fromJson(decryptData, FederatedPlatformsResponseBean.DataDTO.class);
  675. federatedPlatformsResponseBean.setData(federatedPlatformsResponseBeanDtat);
  676. } else {
  677. federatedPlatformsResponseBean = ConfigManager.getGson().fromJson((String) o, FederatedPlatformsResponseBean.class);
  678. }
  679. if (federatedPlatformsResponseBean.getCode() != 200) {//核验接口请求失败
  680. if (StringIsNull.IsStringNull(federatedPlatformsResponseBean.getMsg())) {
  681. federatedPlatformsResponseBean.setMsg("核验接口请求失败");
  682. }
  683. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启预检查:返回数据code非200,通知调度中心处理");
  684. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", federatedPlatformsResponseBean.getMsg(), federatedPlatformsResponseBean.getCode(),
  685. federatedPlatformsResponseBean.getMsg());
  686. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  687. return;
  688. }
  689. CompleteDataUtil.completeFederatedPlatformsResponseBean(federatedPlatformsResponseBean);
  690. federatedPlatformsResponseBean = ConfigManager.getFederatedPlatformsResponseBean();
  691. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启预检查:返回数据满足必要字段,通知调度中心处理");
  692. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, null);
  693. }
  694. });
  695. }
  696. /**
  697. * 预检查核验接口请求
  698. * <p>
  699. * 二维码/手输证件号/IC卡 是特殊情况,需要先获取到核验接口返回的姓名、身份证号、照片 这个二要素/三要素后才能调用PersonCard
  700. * 流程:
  701. * 1. 请求核验接口获取二要素/三要素(返回结果包含有结果页数据)
  702. * 2. 执行人证比对 & 展示核验接口获取结果页数据
  703. */
  704. public void requestFederatedPlatformsCheck_qrcode_enterIdnumber_icCard() {
  705. if (!ConfigManager.getAuthenticationBean().getData().get(0).isUseLinkage()) {
  706. String msg = "";
  707. if (Constants.IDCARD_TYPE == 5) {
  708. msg = "未开启相关配置,禁止使用手输证件号";
  709. } else if (Constants.IDCARD_TYPE == 6 || Constants.IDCARD_TYPE == 7) {
  710. msg = "未开启相关配置,禁止使用IC卡";
  711. } else if (Constants.IDCARD_TYPE == 3) {
  712. msg = "未开启相关配置,禁止使用二维码";
  713. }
  714. FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", msg, 500, msg);
  715. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  716. return;
  717. }
  718. //判断核验接口是否开启
  719. if (ConfigManager.isLinkagePlatformClose()) {
  720. return;
  721. }
  722. //判断核验接口地址是否为空
  723. if (ConfigManager.isLinkageAdressEmpty()) {
  724. return;
  725. }
  726. //判断核验密钥是否为空
  727. if (ConfigManager.isEncryptKeyEmpty()) {
  728. return;
  729. }
  730. ResultViewManager.getInstance().setRequestingRunnable();
  731. pAuthentication.PFederatedPlatformsCheck(ConfigManager.getFederatedPlatformsRequestBean(), new MyPresenter.DataResponseCallback() {
  732. @Override
  733. public void onDataResponse(Object o) {
  734. ResultViewManager.getInstance().removeRequestingRunnable();
  735. FederatedPlatformsResponseBean federatedPlatformsResponseBean = null;
  736. if (ConfigManager.isEncryptLinkage()) {
  737. //数据解密
  738. DecryptBean decryptBean = ConfigManager.getGson().fromJson((String) o, DecryptBean.class);
  739. if (decryptBean.getCode() != 200) {//核验接口请求失败
  740. if (StringIsNull.IsStringNull(decryptBean.getMsg())) {
  741. decryptBean.setMsg("核验接口请求失败");
  742. }
  743. AppLogUtils.i(true, "核验接口返回处理中心", "开启预检查:返回数据code非200,通知调度中心处理");
  744. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", decryptBean.getMsg(), decryptBean.getCode(), decryptBean.getMsg());
  745. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  746. return;
  747. }
  748. //验签失败
  749. if (!EncryptionAndDecryptionUtil.checkSign(
  750. ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptAppKey(),
  751. ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptAppSecret(),
  752. decryptBean.getData().getSign(),
  753. String.valueOf(decryptBean.getData().getReqTimestamp()))) {
  754. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "核验接口验签出错", 500, "核验接口验签出错");
  755. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  756. return;
  757. }
  758. String decryptData = "";
  759. decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptPrivateKey(), decryptBean.getData().getBizContent());
  760. if (StringIsNull.IsStringNull(decryptData)) {
  761. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "核验接口解密失败", 500, "核验接口解密失败");
  762. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  763. return;
  764. }
  765. AppLogUtils.i(true, "接口请求_加密接口请求", "加密接口请求数据返回 " + decryptData);
  766. federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
  767. federatedPlatformsResponseBean.setMsg("请求成功");
  768. federatedPlatformsResponseBean.setCode(200);
  769. FederatedPlatformsResponseBean.DataDTO federatedPlatformsResponseBeanDtat = ConfigManager.getGson().fromJson(decryptData, FederatedPlatformsResponseBean.DataDTO.class);
  770. federatedPlatformsResponseBean.setData(federatedPlatformsResponseBeanDtat);
  771. CompleteDataUtil.completeFederatedPlatformsResponseBean(federatedPlatformsResponseBean);
  772. } else {
  773. federatedPlatformsResponseBean = ConfigManager.getGson().fromJson((String) o, FederatedPlatformsResponseBean.class);
  774. }
  775. if (federatedPlatformsResponseBean.getCode() != 200) {//核验接口请求失败
  776. if (StringIsNull.IsStringNull(federatedPlatformsResponseBean.getMsg())) {
  777. federatedPlatformsResponseBean.setMsg("核验接口请求失败");
  778. }
  779. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启预检查:返回数据code非200,通知调度中心处理");
  780. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", federatedPlatformsResponseBean.getMsg(), federatedPlatformsResponseBean.getCode(),
  781. federatedPlatformsResponseBean.getMsg());
  782. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  783. return;
  784. }
  785. CompleteDataUtil.completeFederatedPlatformsResponseBean(federatedPlatformsResponseBean);
  786. //保存用户信息
  787. String name = federatedPlatformsResponseBean.getData().getName();
  788. String idNumber = federatedPlatformsResponseBean.getData().getIdNumber();
  789. String cardPhoto = federatedPlatformsResponseBean.getData().getPhoto();
  790. UserInfoManager.getInstance().setUserInformationBean(name, idNumber, cardPhoto, "", "");
  791. FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
  792. exInfoDTO.setPassRes("");
  793. exInfoDTO.setSmileParams("");
  794. exInfoDTO.setIdcardContent("");
  795. ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN, Constants.IDCARD_TYPE, idNumber,
  796. name, "", "check", "", "",
  797. cardPhoto, exInfoDTO, ConfigManager.getFederatedPlatformsRequestBean().getData().getQrcode(),
  798. ConfigManager.getFederatedPlatformsRequestBean().getData().getIcNumber());
  799. if (isUsePersonCard()) {
  800. /* if (!StringIsNull.IsStringNull(name) && !StringIsNull.IsStringNull(idNumber)) {//二要素数据正常,开始进行人证比对
  801. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,开启预检查:刷码或手输证件号返回有用户信息二要素 " + name + "-" + idNumber + ",通知调度中心处理");
  802. //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  803. BaiduFaceController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  804. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, null);
  805. } else {//二要素数据缺失,无法进行人证比对, 此时不用比对,直接成功
  806. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,开启预检查:刷码或手输证件号返回无用户信息二要素,默认不比对,直接成功 " + name + "-" + idNumber + ",通知调度中心处理");
  807. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  808. }*/
  809. //百度人脸的人证比对必须要有照片
  810. if (!StringIsNull.IsStringNull(cardPhoto)) {//有照片数据,开始进行人证比对
  811. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,开启预检查:刷码或手输证件号,接口返回有照片,通知调度中心处理");
  812. //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  813. BaiduFaceController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  814. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, null);
  815. } else {//照片数据缺失,无法进行人证比对, 此时不用比对,直接成功
  816. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,开启预检查:刷码或手输证件号,接口返回没有照片,此时不需要人证比对");
  817. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  818. }
  819. } else {
  820. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "不开启人证比对,开启预检查:核验接口已返回数据,通知调度中心处理");
  821. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, null);
  822. }
  823. }
  824. });
  825. }
  826. /**
  827. * 判断手输或刷码人证比对是否开启
  828. * <p>
  829. */
  830. private boolean isUsePersonCard() {
  831. if (Constants.IDCARD_TYPE == 3 &&
  832. ConfigManager.getAuthenticationBeanListBean().getQrCodeUsePersonCard()) {
  833. return true;
  834. }
  835. if (Constants.IDCARD_TYPE == 5 &&
  836. ConfigManager.getAuthenticationBeanListBean().getManualInUsePersonCard()) {
  837. return true;
  838. }
  839. if (Constants.IDCARD_TYPE == 6 &&
  840. ConfigManager.getAuthenticationBean().getData().get(0).getIc14443PersonCardComparison()) {
  841. return true;
  842. }
  843. if (Constants.IDCARD_TYPE == 7 &&
  844. ConfigManager.getAuthenticationBean().getData().get(0).getIc15693PersonCardComparison()) {
  845. return true;
  846. }
  847. return false;
  848. }
  849. /**
  850. * 通用模式的结果页数据请求
  851. */
  852. public void requestFederatedPlatforms() {
  853. //判断核验接口是否开启
  854. if (ConfigManager.isLinkagePlatformClose()) {
  855. return;
  856. }
  857. //判断核验接口地址是否为空
  858. if (ConfigManager.isLinkageAdressEmpty()) {
  859. return;
  860. }
  861. //判断核验密钥是否为空
  862. if (ConfigManager.isEncryptKeyEmpty()) {
  863. return;
  864. }
  865. ResultViewManager.getInstance().setRequestingRunnable();
  866. pAuthentication.PFederatedPlatforms(ConfigManager.getFederatedPlatformsRequestBean(), new MyPresenter.DataResponseCallback() {
  867. @Override
  868. public void onDataResponse(Object o) {
  869. ResultViewManager.getInstance().removeRequestingRunnable();
  870. FederatedPlatformsResponseBean federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
  871. if (ConfigManager.isEncryptLinkage()) {
  872. //数据解密
  873. DecryptBean decryptBean = ConfigManager.getGson().fromJson((String) o, DecryptBean.class);
  874. if (decryptBean.getCode() != 200) {
  875. String msg = decryptBean.getMsg();
  876. if (StringIsNull.IsStringNull(msg)) {
  877. msg = "核验接口请求失败";
  878. }
  879. AppLogUtils.e(true, "核验接口返回处理中心-通用", "关闭预检查:返回数据code非200,通知调度中心处理");
  880. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", msg, 500, msg);
  881. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  882. return;
  883. }
  884. if (!EncryptionAndDecryptionUtil.checkSign(
  885. ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptAppKey(),
  886. ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptAppSecret(),
  887. decryptBean.getData().getSign(),
  888. String.valueOf(decryptBean.getData().getReqTimestamp()))) {
  889. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "核验接口验签出错", 500, "核验接口验签出错");
  890. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  891. return;
  892. }
  893. String decryptData = "";
  894. decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptPrivateKey(), decryptBean.getData().getBizContent());
  895. if (StringIsNull.IsStringNull(decryptData)) {
  896. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "核验接口解密失败", 500, "核验接口解密失败");
  897. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  898. return;
  899. }
  900. AppLogUtils.i(true, "加密接口请求入参", "加密接口请求数据返回 " + o);
  901. federatedPlatformsResponseBean.setMsg("请求成功");
  902. federatedPlatformsResponseBean.setCode(200);
  903. FederatedPlatformsResponseBean.DataDTO federatedPlatformsResponseBeanDtat = ConfigManager.getGson().fromJson(decryptData, FederatedPlatformsResponseBean.DataDTO.class);
  904. federatedPlatformsResponseBean.setData(federatedPlatformsResponseBeanDtat);
  905. } else {
  906. federatedPlatformsResponseBean = ConfigManager.getGson().fromJson((String) o, FederatedPlatformsResponseBean.class);
  907. }
  908. if (federatedPlatformsResponseBean.getCode() != 200) {
  909. if (StringIsNull.IsStringNull(federatedPlatformsResponseBean.getMsg())) {
  910. federatedPlatformsResponseBean.setMsg("核验接口请求失败");
  911. }
  912. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", federatedPlatformsResponseBean.getMsg(), 500, federatedPlatformsResponseBean.getMsg());
  913. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  914. return;
  915. }
  916. CompleteDataUtil.completeFederatedPlatformsResponseBean(federatedPlatformsResponseBean);
  917. //展示悬浮框
  918. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  919. }
  920. });
  921. }
  922. /**
  923. * 二维码/手输证件号/IC卡 的是特殊情况,要先请求二要素/三要素后才能进行人证比对
  924. * <p>
  925. * 通用模式下的二维码/手输证件号/IC卡 开启人证比对时的执行流程:
  926. * 1. 请求核验接口获取二要素/三要素(返回结果包含有结果页数据)
  927. * 2. 执行人证比对
  928. * 3. 请求核验接口获取结果页数据
  929. * <p>
  930. * 按照1、2、3的步骤按顺序执行
  931. */
  932. public void requestFederatedPlatforms_qrcode_enterIdnumber_icCard() {
  933. if (!ConfigManager.getAuthenticationBean().getData().get(0).isUseLinkage()) {
  934. String msg = "";
  935. if (Constants.IDCARD_TYPE == 5) {
  936. msg = "未开启相关配置,禁止使用手输证件号";
  937. } else if (Constants.IDCARD_TYPE == 6 || Constants.IDCARD_TYPE == 7) {
  938. msg = "未开启相关配置,禁止使用IC卡";
  939. } else if (Constants.IDCARD_TYPE == 3) {
  940. msg = "未开启相关配置,禁止使用二维码";
  941. }
  942. FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", msg, 500, msg);
  943. DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
  944. return;
  945. }
  946. //判断核验接口是否开启
  947. if (ConfigManager.isLinkagePlatformClose()) {
  948. return;
  949. }
  950. //判断核验接口地址是否为空
  951. if (ConfigManager.isLinkageAdressEmpty()) {
  952. return;
  953. }
  954. //判断核验密钥是否为空
  955. if (ConfigManager.isEncryptKeyEmpty()) {
  956. return;
  957. }
  958. ResultViewManager.getInstance().setRequestingRunnable();
  959. pAuthentication.PFederatedPlatforms(ConfigManager.getFederatedPlatformsRequestBean(), new MyPresenter.DataResponseCallback() {
  960. @Override
  961. public void onDataResponse(Object o) {
  962. ResultViewManager.getInstance().removeRequestingRunnable();
  963. FederatedPlatformsResponseBean federatedPlatformsResponseBean = null;
  964. if (ConfigManager.isEncryptLinkage()) {
  965. //数据解密
  966. DecryptBean decryptBean = ConfigManager.getGson().fromJson((String) o, DecryptBean.class);
  967. if (decryptBean.getCode() != 200) {//核验接口请求失败
  968. if (StringIsNull.IsStringNull(decryptBean.getMsg())) {
  969. decryptBean.setMsg("核验接口请求失败");
  970. }
  971. AppLogUtils.i(true, "核验接口返回处理中心", "开启预检查:返回数据code非200,通知调度中心处理");
  972. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", decryptBean.getMsg(), decryptBean.getCode(), decryptBean.getMsg());
  973. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  974. return;
  975. }
  976. //验签失败
  977. if (!EncryptionAndDecryptionUtil.checkSign(
  978. ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptAppKey(),
  979. ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptAppSecret(),
  980. decryptBean.getData().getSign(),
  981. String.valueOf(decryptBean.getData().getReqTimestamp()))) {
  982. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "核验接口验签出错", 500, "核验接口验签出错");
  983. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  984. return;
  985. }
  986. String decryptData = "";
  987. decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptPrivateKey(), decryptBean.getData().getBizContent());
  988. if (StringIsNull.IsStringNull(decryptData)) {
  989. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "核验接口解密失败", 500, "核验接口解密失败");
  990. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  991. return;
  992. }
  993. AppLogUtils.i(true, "接口请求_加密接口请求", "加密接口请求数据返回 " + decryptData);
  994. federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
  995. federatedPlatformsResponseBean.setMsg("请求成功");
  996. federatedPlatformsResponseBean.setCode(200);
  997. FederatedPlatformsResponseBean.DataDTO federatedPlatformsResponseBeanDtat = ConfigManager.getGson().fromJson(decryptData, FederatedPlatformsResponseBean.DataDTO.class);
  998. federatedPlatformsResponseBean.setData(federatedPlatformsResponseBeanDtat);
  999. CompleteDataUtil.completeFederatedPlatformsResponseBean(federatedPlatformsResponseBean);
  1000. } else {
  1001. federatedPlatformsResponseBean = ConfigManager.getGson().fromJson((String) o, FederatedPlatformsResponseBean.class);
  1002. }
  1003. if (federatedPlatformsResponseBean.getCode() != 200) {//核验接口请求失败
  1004. if (StringIsNull.IsStringNull(federatedPlatformsResponseBean.getMsg())) {
  1005. federatedPlatformsResponseBean.setMsg("核验接口请求失败");
  1006. }
  1007. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启预检查:返回数据code非200,通知调度中心处理");
  1008. federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", federatedPlatformsResponseBean.getMsg(), federatedPlatformsResponseBean.getCode(),
  1009. federatedPlatformsResponseBean.getMsg());
  1010. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1011. return;
  1012. }
  1013. CompleteDataUtil.completeFederatedPlatformsResponseBean(federatedPlatformsResponseBean);
  1014. //保存用户信息
  1015. String name = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getName());
  1016. String idNumber = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getIdNumber());
  1017. String cardPhoto = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getPhoto());
  1018. UserInfoManager.getInstance().setUserInformationBean(name, idNumber, cardPhoto, "", "");
  1019. FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
  1020. exInfoDTO.setPassRes("");
  1021. exInfoDTO.setSmileParams("");
  1022. exInfoDTO.setIdcardContent("");
  1023. ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN, Constants.IDCARD_TYPE, idNumber,
  1024. name, "", "check", "", "",
  1025. cardPhoto, exInfoDTO, ConfigManager.getFederatedPlatformsRequestBean().getData().getQrcode(),
  1026. ConfigManager.getFederatedPlatformsRequestBean().getData().getIcNumber());
  1027. if (isUsePersonCard()) {
  1028. /* if (!StringIsNull.IsStringNull(name) && !StringIsNull.IsStringNull(idNumber)) {//二要素数据正常,开始进行人证比对
  1029. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,开启预检查:刷码或手输证件号返回有用户信息二要素 " + name + "-" + idNumber + ",通知调度中心处理");
  1030. //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1031. BaiduFaceController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1032. } else {//二要素数据缺失,无法进行人证比对, 此时不用比对,直接成功
  1033. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,开启预检查:刷码或手输证件号返回无用户信息二要素,默认不比对,直接成功 " + name + "-" + idNumber + ",通知调度中心处理");
  1034. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1035. }*/
  1036. //百度人脸的人证比对必须要有照片
  1037. if (!StringIsNull.IsStringNull(cardPhoto) ) {//有照片数据,开始进行人证比对
  1038. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,通用模式:刷码或手输证件号,接口返回有照片,通知调度中心处理");
  1039. //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1040. BaiduFaceController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1041. } else {//照片数据缺失,无法进行人证比对, 此时不用比对,直接成功
  1042. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,通用模式:刷码或手输证件号,接口返回没有照片,此时不需要人证比对");
  1043. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1044. }
  1045. } else {
  1046. AppLogUtils.i(true, "核验接口返回处理中心-预检查", "不开启人证比对,通用模式:核验接口已返回数据,通知调度中心处理");
  1047. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1048. }
  1049. }
  1050. });
  1051. }
  1052. /**
  1053. * 预检查_核票_核验接口请求
  1054. */
  1055. public void requestFederatedPlatformsVerify() {
  1056. //判断核验密钥是否为空
  1057. if (ConfigManager.isEncryptKeyEmpty()) {
  1058. return;
  1059. }
  1060. pAuthentication.PFederatedPlatformsVerify(ConfigManager.getFederatedPlatformsRequestBean());
  1061. }
  1062. /**
  1063. * 用户入库
  1064. */
  1065. public void requestUserwithftoken(Map<String, Object> map) {
  1066. //判断核验密钥是否为空
  1067. if (ConfigManager.isAnonymousEncryptKeyEmpty()) {
  1068. return;
  1069. }
  1070. map.put("sn", ConfigManager.getDeviceSN());
  1071. pUserwithftoken.PUserwithftoken(map, com.hanghui.senic.network.Url.URL_FACEINADDRESS, new MyPresenter.DataResponseCallback() {
  1072. @Override
  1073. public void onDataResponse(Object o) {
  1074. }
  1075. });
  1076. }
  1077. /**
  1078. * 商户平台请求
  1079. * <p>
  1080. * 先根据vid从景区获取三要素后再从联动平台请求结果页信息
  1081. * <p>
  1082. * 商户平台接口:根据vid、authcode、ftoken换取三要素, 只在纯刷脸时用到
  1083. * <p>
  1084. * 商户平台开启的情况下一般是在没有开发核验接口能力的景区,核验接口开启的情况下一般不会开启商户平台接口
  1085. *
  1086. * @param s1 刷脸成功时s1的示例值
  1087. * {
  1088. * "alipayUid": "",
  1089. * "code": 1000,
  1090. * "extInfo": "{\"checkWay\":\"scanFace\"}",
  1091. * "avatarBase64": "", //人脸小图
  1092. * "isvResult": true,
  1093. * "subCode": "OK_SUCCESS",
  1094. * "subMessage": "SUCCESS",
  1095. * "alipayUid":"66878"
  1096. * "vid": "1111",
  1097. * "ftoken":"fp1d27f47d863a9c19cb565ed3d6a347h43"
  1098. * }
  1099. */
  1100. public void requestThirdPartyPlatforms(String s1) {
  1101. JSONObject jsonObject = JSONObject.parseObject(s1);
  1102. Map jsonToMap = JSONObject.parseObject(jsonObject.toJSONString());
  1103. jsonToMap.put("sn", ConfigManager.SN);
  1104. String finalAvatarBase64Str = jsonObject.getString("avatarBase64");
  1105. if (StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getServiceAddress())) {
  1106. FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "商户平台地址为空", 500, "商户平台地址为空");
  1107. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1108. return;
  1109. }
  1110. //判断商户平台密钥是否为空
  1111. if (ConfigManager.isTenantEncryptKeyEmpty()) {
  1112. return;
  1113. }
  1114. ResultViewManager.getInstance().setRequestingRunnable();
  1115. pAuthentication.PThirdPartyPlatforms(jsonToMap, new MyPresenter.DataResponseCallback() {
  1116. @Override
  1117. public void onDataResponse(Object o) {
  1118. ResultViewManager.getInstance().removeRequestingRunnable();
  1119. AlipayUserInfoBean alipayUserInfoBean = null;
  1120. if (ConfigManager.getAuthenticationBeanListBean().getTenantEncryptSwitch()) {
  1121. //数据解密
  1122. DecryptBean decryptBean = ConfigManager.getGson().fromJson((String) o, DecryptBean.class);
  1123. if (decryptBean.getCode() != 200) {//商户平台请求失败
  1124. if (StringIsNull.IsStringNull(decryptBean.getMsg())) {
  1125. decryptBean.setMsg(ConfigManager.getAuthenticationBeanListBean().getTenantFailedTips());
  1126. }
  1127. FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", decryptBean.getMsg(), 500, decryptBean.getMsg());
  1128. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1129. return;
  1130. }
  1131. if (!EncryptionAndDecryptionUtil.checkSign(
  1132. ConfigManager.getAuthenticationBeanListBean().getTenantEncryptAppKey(),
  1133. ConfigManager.getAuthenticationBeanListBean().getTenantEncryptAppSecret(),
  1134. decryptBean.getData().getSign(),
  1135. String.valueOf(decryptBean.getData().getReqTimestamp()))) {
  1136. FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "商户接口验签出错", 500, "商户接口验签出错");
  1137. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1138. return;
  1139. }
  1140. String decryptData = "";
  1141. decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getTenantEncryptPrivateKey(),
  1142. decryptBean.getData().getBizContent());
  1143. if (StringIsNull.IsStringNull(decryptData)) {
  1144. FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "商户平台解密失败", 500, "商户平台解密失败");
  1145. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1146. return;
  1147. }
  1148. alipayUserInfoBean = ConfigManager.getGson().fromJson(decryptData, AlipayUserInfoBean.class);
  1149. } else {
  1150. alipayUserInfoBean = new Gson().fromJson((String) o, AlipayUserInfoBean.class);
  1151. }
  1152. if (StringIsNull.IsStringNull(alipayUserInfoBean.getErrcode()) || !alipayUserInfoBean.getErrcode().equals("0")) {
  1153. if (StringIsNull.IsStringNull(alipayUserInfoBean.getErrmsg())) {
  1154. alipayUserInfoBean.setErrmsg("商户平台请求失败");
  1155. alipayUserInfoBean.setOpenVoiceMsg("商户平台请求失败");
  1156. }
  1157. FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", alipayUserInfoBean.getErrmsg(), 500, alipayUserInfoBean.getErrmsg());
  1158. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1159. return;
  1160. }
  1161. String Base64 = "";
  1162. if (!StringIsNull.IsStringNull(alipayUserInfoBean.getData().getPhotoBase64())) {
  1163. Base64 = alipayUserInfoBean.getData().getPhotoBase64();
  1164. } else {
  1165. Base64 = finalAvatarBase64Str;
  1166. }
  1167. UserInfoManager.getInstance().setUserInformationBean(alipayUserInfoBean.getData().getUserName(),
  1168. alipayUserInfoBean.getData().getCertNo(), "",
  1169. Base64, alipayUserInfoBean.getData().getMobile());
  1170. //判断年龄限制是否打开
  1171. if (ConfigManager.isAgeLimitOpen(StringIsNull.ReturnString(alipayUserInfoBean.getData().getCertNo()))) {
  1172. return;
  1173. }
  1174. //判断黑名单中是否存在该用户
  1175. if (BlacklistManager.getInstance().isInBlacklist(alipayUserInfoBean.getData().getCertNo(), alipayUserInfoBean.getData().getMobile())) {
  1176. return;
  1177. }
  1178. FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
  1179. exInfoDTO.setPassRes("");
  1180. exInfoDTO.setSmileParams(s1);
  1181. exInfoDTO.setIdcardContent("");
  1182. ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN, Constants.IDCARD_TYPE,
  1183. StringIsNull.ReturnString(alipayUserInfoBean.getData().getCertNo()),
  1184. StringIsNull.ReturnString(alipayUserInfoBean.getData().getUserName()),
  1185. StringIsNull.ReturnString(alipayUserInfoBean.getData().getMobile()),
  1186. "", "", "",
  1187. alipayUserInfoBean.getData().getPhotoBase64(), exInfoDTO, "", "");
  1188. //判断核验接口是否开启
  1189. if (ConfigManager.isLinkagePlatformClose()) {
  1190. return;
  1191. }
  1192. //核验接口请求
  1193. if (ConfigManager.isPreCheck()) {//预检测模式
  1194. DataReturns.getInstance().doDataReturns(null, s1);
  1195. HttpRequest.getInstance().requestFederatedPlatformsCheck(true);
  1196. } else {//通用模式
  1197. HttpRequest.getInstance().requestFederatedPlatforms();
  1198. }
  1199. }
  1200. });
  1201. }
  1202. /**
  1203. * 急速通行模式下商户平台请求
  1204. *
  1205. * @param s1
  1206. */
  1207. public void requestThirdPartyPlatforms_FastThrough(String s1) {
  1208. JSONObject jsonObject = JSONObject.parseObject(s1);
  1209. Map jsonToMap = JSONObject.parseObject(jsonObject.toJSONString());
  1210. jsonToMap.put("sn", ConfigManager.SN);
  1211. String finalAvatarBase64Str = jsonObject.getString("avatarBase64");
  1212. if (StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getServiceAddress())) {
  1213. AppLogUtils.e(true, "出站/进站 刷脸通行", "商户平台地址为空");
  1214. return;
  1215. }
  1216. //判断商户平台密钥是否为空
  1217. if (ConfigManager.isTenantEncryptKeyEmpty()) {
  1218. return;
  1219. }
  1220. pAuthentication.PThirdPartyPlatforms(jsonToMap, new MyPresenter.DataResponseCallback() {
  1221. @Override
  1222. public void onDataResponse(Object o) {
  1223. ResultViewManager.getInstance().removeRequestingRunnable();
  1224. AlipayUserInfoBean alipayUserInfoBean = null;
  1225. if (ConfigManager.getAuthenticationBeanListBean().getTenantEncryptSwitch()) {
  1226. //数据解密
  1227. DecryptBean decryptBean = ConfigManager.getGson().fromJson((String) o, DecryptBean.class);
  1228. if (decryptBean.getCode() != 200) {//商户平台请求失败
  1229. AppLogUtils.e(true, "出站/进站 刷脸通行", "商户平台请求失败");
  1230. return;
  1231. }
  1232. if (!EncryptionAndDecryptionUtil.checkSign(
  1233. ConfigManager.getAuthenticationBeanListBean().getTenantEncryptAppKey(),
  1234. ConfigManager.getAuthenticationBeanListBean().getTenantEncryptAppSecret(),
  1235. decryptBean.getData().getSign(),
  1236. String.valueOf(decryptBean.getData().getReqTimestamp()))) {
  1237. AppLogUtils.e(true, "出站/进站 刷脸通行", "商户接口验签出错");
  1238. return;
  1239. }
  1240. String decryptData = "";
  1241. decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getTenantEncryptPrivateKey(),
  1242. decryptBean.getData().getBizContent());
  1243. if (StringIsNull.IsStringNull(decryptData)) {
  1244. AppLogUtils.e(true, "出站/进站 刷脸通行", "商户平台解密失败");
  1245. return;
  1246. }
  1247. alipayUserInfoBean = ConfigManager.getGson().fromJson(decryptData, AlipayUserInfoBean.class);
  1248. } else {
  1249. alipayUserInfoBean = new Gson().fromJson((String) o, AlipayUserInfoBean.class);
  1250. }
  1251. if (StringIsNull.IsStringNull(alipayUserInfoBean.getErrcode()) || !alipayUserInfoBean.getErrcode().equals("0")) {
  1252. AppLogUtils.e(true, "出站/进站 刷脸通行", alipayUserInfoBean.getErrmsg());
  1253. return;
  1254. }
  1255. String Base64 = "";
  1256. if (!StringIsNull.IsStringNull(alipayUserInfoBean.getData().getPhotoBase64())) {
  1257. Base64 = alipayUserInfoBean.getData().getPhotoBase64();
  1258. } else {
  1259. Base64 = finalAvatarBase64Str;
  1260. }
  1261. UserInfoManager.getInstance().setUserInformationBean(alipayUserInfoBean.getData().getUserName(),
  1262. alipayUserInfoBean.getData().getCertNo(), alipayUserInfoBean.getData().getPhotoBase64(),
  1263. Base64, alipayUserInfoBean.getData().getMobile());
  1264. // //判断年龄限制是否打开
  1265. // if (ConfigManager.isAgeLimitOpen(StringIsNull.ReturnString(alipayUserInfoBean.getData().getCertNo()))) {
  1266. // return;
  1267. // }
  1268. //判断黑名单中是否存在该用户
  1269. if (BlacklistManager.getInstance().isInBlacklist(alipayUserInfoBean.getData().getCertNo(), alipayUserInfoBean.getData().getMobile())) {
  1270. return;
  1271. }
  1272. FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
  1273. exInfoDTO.setPassRes("");
  1274. exInfoDTO.setSmileParams(s1);
  1275. exInfoDTO.setIdcardContent("");
  1276. ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN, Constants.IDCARD_TYPE,
  1277. StringIsNull.ReturnString(alipayUserInfoBean.getData().getCertNo()),
  1278. StringIsNull.ReturnString(alipayUserInfoBean.getData().getUserName()),
  1279. StringIsNull.ReturnString(alipayUserInfoBean.getData().getMobile()),
  1280. "", "", "",
  1281. alipayUserInfoBean.getData().getPhotoBase64(), exInfoDTO, "", "");
  1282. //记录上报
  1283. String Photo = UserInfoManager.getInstance().getUserInformationBean().getScenePhoto();
  1284. if (StringIsNull.IsStringNull(Photo)) {
  1285. Photo = UserInfoManager.getInstance().getUserInformationBean().getIdPhoto();
  1286. }
  1287. HttpRequest.getInstance().setEventRecords(ConfigManager.getAuthenticationBeanListBean().getPassWay(),
  1288. UserInfoManager.getInstance().getUserInformationBean().getName(),
  1289. UserInfoManager.getInstance().getUserInformationBean().getIdNumber(),
  1290. Photo,
  1291. "",
  1292. UserInfoManager.getInstance().getUserInformationBean().getMobile(), true, 0);
  1293. }
  1294. });
  1295. }
  1296. /**
  1297. * 记录上报
  1298. *
  1299. * @param type
  1300. * @param name
  1301. * @param Cardid
  1302. * @param Photo
  1303. * @param idCardInfo
  1304. * @param phone
  1305. * @param start
  1306. * @param reasonType
  1307. */
  1308. public void setEventRecords(String type, String name, String Cardid, String Photo, String idCardInfo,
  1309. String phone, boolean start, int reasonType) {
  1310. /**
  1311. * 当身份证号不为空时,判断身份证是否是重复上报的数据,重复则不做记录上报处理,不重复则执行进出记录上报操作
  1312. */
  1313. if (!StringIsNull.IsStringNull(Cardid)) {
  1314. /**
  1315. * 进出记录滤重操作(根据身份证号 + 当前时间戳 判断本次记录是否需要上报。 身份证号为空时,不做记录,直接上报)
  1316. * 身份证号为空/检测到身份证号不在滤重时间内时上报记录
  1317. */
  1318. if (!ConfigManager.isRepeatedRequest(UserInfoManager.getInstance().getUserInformationBean().getIdNumber())) {
  1319. Map map = DataManager.getInstance().setEventRecords(type, name, Cardid, Photo, idCardInfo, phone, start, reasonType);
  1320. if (!StringIsNull.IsStringNull(com.hanghui.senic.network.Url.URL_EVENTRECORDS) && !com.hanghui.senic.network.Url.URL_EVENTRECORDS.equals("/")) {
  1321. pDevice.PEventRecords(map, com.hanghui.senic.network.Url.URL_EVENTRECORDS);
  1322. }
  1323. } else {
  1324. AppLogUtils.e(false, "进出记录上报操作", "该身份证号已经上报过进出记录,一定时间内不做上报处理");
  1325. }
  1326. } else {
  1327. Map map = DataManager.getInstance().setEventRecords(type, name, Cardid, Photo, idCardInfo, phone, start, reasonType);
  1328. if (!StringIsNull.IsStringNull(com.hanghui.senic.network.Url.URL_EVENTRECORDS) && !com.hanghui.senic.network.Url.URL_EVENTRECORDS.equals("/")) {
  1329. pDevice.PEventRecords(map, com.hanghui.senic.network.Url.URL_EVENTRECORDS);
  1330. }
  1331. }
  1332. }
  1333. /**
  1334. * 特殊码换取三要素(请求的是授权平台另外配置的接口,与核验接口地址不一样,返回结果只有三要素,没有结果页数据)
  1335. * 三要素获取到之后就是普通的人证比对/请求结果页的执行流程,和身份证数据读取到后的执行流程一样
  1336. *
  1337. * @param qrCode 二维码码值
  1338. */
  1339. public void requestFederatedPlatforms_SpecialCodeGetThreeElements(String qrCode) {
  1340. Map<String, Object> map = new HashMap<>();
  1341. map.put("qrCode", qrCode);
  1342. pAuthentication.PSpecialCodeTradeThreeElements(map, ConfigManager.getAuthenticationBeanListBean().getSpecialCodeUrl(), new MyPresenter.DataResponseCallback() {
  1343. @Override
  1344. public void onDataResponse(Object o) {
  1345. SpecialCodeTradeThreeElementsBean specialCodeTradeThreeElementsBean = ConfigManager.getGson().fromJson((String) o, SpecialCodeTradeThreeElementsBean.class);
  1346. if (specialCodeTradeThreeElementsBean.getCode() != 200) {
  1347. String msg = "";
  1348. if (!StringIsNull.IsStringNull(specialCodeTradeThreeElementsBean.getMsg())) {
  1349. msg = specialCodeTradeThreeElementsBean.getMsg();
  1350. } else if (StringIsNull.IsStringNull(specialCodeTradeThreeElementsBean.getMsg()) && !StringIsNull.IsStringNull(specialCodeTradeThreeElementsBean.getErrmsg())) {
  1351. msg = specialCodeTradeThreeElementsBean.getErrmsg();
  1352. } else {
  1353. msg = "特殊码换三要素接⼝请求失败";
  1354. }
  1355. FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", msg, 500, msg);
  1356. BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
  1357. return;
  1358. }
  1359. String name = StringIsNull.ReturnString(specialCodeTradeThreeElementsBean.getData().getCertName());
  1360. String idNumber = StringIsNull.ReturnString(specialCodeTradeThreeElementsBean.getData().getCertNo());
  1361. String cardPhoto = StringIsNull.ReturnString(specialCodeTradeThreeElementsBean.getData().getPhotoBase64());
  1362. String phone = StringIsNull.ReturnString(specialCodeTradeThreeElementsBean.getData().getPhone());
  1363. //保存用户信息
  1364. UserInfoManager.getInstance().setUserInformationBean(name, idNumber, cardPhoto, "", phone);
  1365. //判断黑名单中是否存在该用户
  1366. if (BlacklistManager.getInstance().isInBlacklist(idNumber, phone)) {
  1367. return;
  1368. }
  1369. //判断年龄限制是否打开
  1370. if (ConfigManager.isAgeLimitOpen(StringIsNull.ReturnString(idNumber))) {
  1371. return;
  1372. }
  1373. //判断核验接口是否开启
  1374. if (ConfigManager.isLinkagePlatformClose()) {
  1375. return;
  1376. }
  1377. FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
  1378. exInfoDTO.setPassRes("");
  1379. exInfoDTO.setSmileParams("");
  1380. exInfoDTO.setIdcardContent("");
  1381. ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN, Constants.IDCARD_TYPE, idNumber, name, phone, "", "", "", cardPhoto, exInfoDTO, qrCode, "");
  1382. //核验接口请求
  1383. if (ConfigManager.isPreCheck()) {//预检查模式下,同时去请求核验接口结果页数据
  1384. if (ConfigManager.getAuthenticationBeanListBean().getQrCodeUsePersonCard()) {//获取到三要素数据,如果开启了人证比对,则调用PersonCard唤起刷脸
  1385. /* if (!StringIsNull.IsStringNull(name) && !StringIsNull.IsStringNull(idNumber)){
  1386. //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1387. BaiduFaceController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1388. HttpRequest.getInstance().requestFederatedPlatformsCheck(false);
  1389. } else {
  1390. AppLogUtils.e(true, "特殊码换取三要素", "返回姓名、身份证证号存在为空的情况,直接展示结果页,不做人证比对");
  1391. DataReturns.getInstance().doDataReturns(null, DataReturns.FACE_DATA_VIRTUAL);
  1392. HttpRequest.getInstance().requestFederatedPlatformsCheck(true);
  1393. }*/
  1394. //百度人脸的人证比对必须要有照片
  1395. if (!StringIsNull.IsStringNull(cardPhoto)){
  1396. //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1397. BaiduFaceController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1398. HttpRequest.getInstance().requestFederatedPlatformsCheck(false);
  1399. } else {
  1400. AppLogUtils.e(true, "特殊码换取三要素", "返回的照片为空,直接展示结果页,不做人证比对");
  1401. DataReturns.getInstance().doDataReturns(null, DataReturns.FACE_DATA_VIRTUAL);
  1402. HttpRequest.getInstance().requestFederatedPlatformsCheck(true);
  1403. }
  1404. } else {
  1405. AppLogUtils.i(true, "特殊码换取三要素", "二维码没有开启人证比对,开启预检查:默认人证比对成功(虚拟)");
  1406. DataReturns.getInstance().doDataReturns(null, DataReturns.FACE_DATA_VIRTUAL);
  1407. HttpRequest.getInstance().requestFederatedPlatformsCheck(true);
  1408. }
  1409. } else {//通用模式
  1410. if (ConfigManager.getAuthenticationBeanListBean().getQrCodeUsePersonCard()) {
  1411. /* if (!StringIsNull.IsStringNull(name) && !StringIsNull.IsStringNull(idNumber)){
  1412. //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1413. BaiduFaceController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1414. }else {
  1415. AppLogUtils.e(true,"特殊码换取三要素","返回姓名、身份证证号存在为空的情况,直接展示结果页,不做人证比对");
  1416. HttpRequest.getInstance().requestFederatedPlatforms();
  1417. }*/
  1418. //百度人脸的人证比对必须要有照片
  1419. if (!StringIsNull.IsStringNull(cardPhoto) ){
  1420. //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1421. BaiduFaceController.getInstance().invokePersonCardWithSetState(name, idNumber, cardPhoto);
  1422. }else {
  1423. AppLogUtils.e(true,"特殊码换取三要素","返回姓名、身份证证号存在为空的情况,直接展示结果页,不做人证比对");
  1424. HttpRequest.getInstance().requestFederatedPlatforms();
  1425. }
  1426. } else {
  1427. //如果没有开启人证比对,则直接去请求核验接口结果页数据
  1428. HttpRequest.getInstance().requestFederatedPlatforms();
  1429. }
  1430. }
  1431. }
  1432. });
  1433. }
  1434. /**
  1435. * 本地黑名单拉取
  1436. */
  1437. public void requestLocalBlacklistConfig() {
  1438. Map<String, Object> map = new HashMap<>();
  1439. map.put("deviceType", 0);//设备类型 <br />0-通用设备<br />1-HH_CULTURE<br />2-访客机<br />3-临时身份证名
  1440. map.put("sn", ConfigManager.getDeviceSN());
  1441. map.put("token", ConfigManager.token);
  1442. pAuthentication.PLocalBlacklistConfig(map, new MyPresenter.DataResponseCallback() {
  1443. @Override
  1444. public void onDataResponse(Object o) {
  1445. BlacklistConfigBean blacklistConfigBean = ConfigManager.getGson().fromJson((String) o, BlacklistConfigBean.class);
  1446. if (blacklistConfigBean.getCode() != 200) {//请求失败
  1447. AppLogUtils.e(true, "本地黑名单配置", "本地黑名单配置接口拉取失败,返回code非200");
  1448. return;
  1449. }
  1450. if (blacklistConfigBean.getData() == null) {
  1451. AppLogUtils.e(true, "本地黑名单配置", "本地黑名单配置接口拉取失败,返回data为null,没有黑名单数据");
  1452. return;
  1453. }
  1454. //三方黑名单配置开启,将本地获取的黑名单暂时保存
  1455. if (ConfigManager.getAuthenticationBeanListBean().getUserBlacklistInterfFetchSwitch()) {
  1456. BlacklistManager.getInstance().blacklist.clear();
  1457. BlacklistManager.getInstance().blacklist.addAll(blacklistConfigBean.getData());
  1458. userBlacklistConfig();
  1459. } else {//三方黑名单配置未开启,直接将数据保存
  1460. //将黑名单数据保存到本地数据库中
  1461. BlacklistManager.getInstance().setBlacklist(blacklistConfigBean.getData());
  1462. }
  1463. }
  1464. });
  1465. }
  1466. /**
  1467. * 三方黑名单拉取
  1468. */
  1469. private void requestLocalBlacklistInterfConfig() {
  1470. Map<String, Object> map = new HashMap<>();
  1471. map.put("deviceType", 0);//设备类型 <br />0-通用设备<br />1-HH_CULTURE<br />2-访客机<br />3-临时身份证名
  1472. map.put("sn", ConfigManager.getDeviceSN());
  1473. map.put("token", ConfigManager.token);
  1474. pAuthentication.PLocalBlacklistInterfConfig(map, new MyPresenter.DataResponseCallback() {
  1475. @Override
  1476. public void onDataResponse(Object o) {
  1477. BlacklistConfigBean blacklistConfigBean = null;
  1478. if (ConfigManager.isUserBlacklistEncrypt()) {
  1479. //数据解密
  1480. DecryptBean decryptBean = ConfigManager.getGson().fromJson((String) o, DecryptBean.class);
  1481. if (decryptBean.getCode() != 200) {//三方核验接口
  1482. AppLogUtils.e(true, "三方黑名单配置", "三方黑名单接口请求失败");
  1483. ConfigManager.localBlacklistInterfShowToast();
  1484. return;
  1485. }
  1486. if (!EncryptionAndDecryptionUtil.checkSign(
  1487. ConfigManager.getAuthenticationBeanListBean().getUserBlacklistEncryptAppKey(),
  1488. ConfigManager.getAuthenticationBeanListBean().getUserBlacklistEncryptAppSecret(),
  1489. decryptBean.getData().getSign(),
  1490. String.valueOf(decryptBean.getData().getReqTimestamp()))) {
  1491. AppLogUtils.e(true, "三方黑名单配置", "三方黑名单接口验签出错");
  1492. ConfigManager.localBlacklistInterfShowToast();
  1493. return;
  1494. }
  1495. String decryptData = "";
  1496. decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getUserBlacklistEncryptPrivateKey(),
  1497. decryptBean.getData().getBizContent());
  1498. if (StringIsNull.IsStringNull(decryptData)) {
  1499. AppLogUtils.e(true, "三方黑名单配置", "三方黑名单接口解密失败");
  1500. ConfigManager.localBlacklistInterfShowToast();
  1501. return;
  1502. }
  1503. blacklistConfigBean = new BlacklistConfigBean();
  1504. blacklistConfigBean.setCode(200);
  1505. blacklistConfigBean.setMsg("请求成功");
  1506. Type listType = new TypeToken<List<BlacklistConfigBean.DataBean>>() {
  1507. }.getType();
  1508. List<BlacklistConfigBean.DataBean> blacklistConfigBeanData = ConfigManager.getGson().fromJson(decryptData, listType);
  1509. blacklistConfigBean.setData(blacklistConfigBeanData);
  1510. } else {
  1511. blacklistConfigBean = new Gson().fromJson((String) o, BlacklistConfigBean.class);
  1512. }
  1513. AppLogUtils.i(true, "三方黑名单配置 ", "三方黑名单配置数据返回 " + ConfigManager.getGson().toJson(blacklistConfigBean));
  1514. if (blacklistConfigBean.getCode() != 200) {//请求失败
  1515. AppLogUtils.e(true, "三方黑名单配置", "三方黑名单配置接口拉取失败,返回code非200");
  1516. ConfigManager.localBlacklistInterfShowToast();
  1517. return;
  1518. }
  1519. if (blacklistConfigBean.getData() == null) {
  1520. AppLogUtils.e(true, "三方黑名单配置", "三方黑名单配置接口拉取失败,返回data为null,没有黑名单数据");
  1521. ConfigManager.localBlacklistInterfShowToast();
  1522. return;
  1523. }
  1524. BlacklistManager.getInstance().blacklist.addAll(blacklistConfigBean.getData());
  1525. //将黑名单数据保存到本地数据库中
  1526. BlacklistManager.getInstance().setBlacklist(BlacklistManager.getInstance().blacklist);
  1527. }
  1528. });
  1529. }
  1530. public HttpResponseCallback httpResponseCallback;
  1531. public HttpResponseCallback getHttpResponseCallback() {
  1532. return httpResponseCallback;
  1533. }
  1534. public void setHttpResponseCallback(HttpResponseCallback httpResponseCallback) {
  1535. this.httpResponseCallback = httpResponseCallback;
  1536. }
  1537. public interface HttpResponseCallback {
  1538. void updateView(int code, String msg);
  1539. }
  1540. }