HttpRequest.java 92 KB

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