HttpRequest.java 85 KB

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