NationalEcBusiness.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. using Newtonsoft.Json.Linq;
  2. using System;
  3. using System.Diagnostics;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Windows.Forms;
  8. namespace ThCardReader
  9. {
  10. class NationalEcBusiness
  11. {
  12. private static SiBusinessAddress address = null;
  13. [DllImport("user32.dll")]
  14. private extern static void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
  15. [DllImport("user32.dll")]
  16. private extern static int SetCursorPos(int x, int y);
  17. #if !DISABLE_NATIONEC
  18. [DllImport("NationECCode.dll", EntryPoint = "NationEcTrans", CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
  19. private extern static IntPtr NationEcTrans(string url, string pindata, ref byte outinfo);
  20. #endif
  21. [Flags]
  22. enum MouseEventFlag : uint
  23. {
  24. Move = 0x0001,
  25. LeftDown = 0x0002,
  26. LeftUp = 0x0004,
  27. RightDown = 0x0008,
  28. RightUp = 0x0010,
  29. MiddleDown = 0x0020,
  30. MiddleUp = 0x0040,
  31. XDown = 0x0080,
  32. XUp = 0x0100,
  33. Wheel = 0x0800,
  34. VirtualDesk = 0x4000,
  35. Absolute = 0x8000
  36. }
  37. public static void SimulateClick()
  38. {
  39. int count = 0;
  40. Process p = Process.GetCurrentProcess();
  41. IntPtr beginHandle = p.MainWindowHandle;
  42. while (count < 5 && p.MainWindowHandle == beginHandle)
  43. {
  44. count += 1;
  45. Thread.Sleep(200);
  46. }
  47. SetCursorPos(Screen.PrimaryScreen.WorkingArea.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2);
  48. mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
  49. mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
  50. }
  51. public static JObject ReadQrCode(string biztype)
  52. {
  53. #if DISABLE_NATIONEC
  54. JObject result = new JObject();
  55. result.Add("code", 1001);
  56. result.Add("message", "NationECCode.dll已屏蔽,请使用华视读卡器:http://localhost:8321/readcard/entry?param=huashi_readcard");
  57. result.Add("device", "NationECCode.dll(已屏蔽)");
  58. result.Add("suggestion", "请使用华视读卡器测试功能");
  59. return result;
  60. #else
  61. if (null == address)
  62. {
  63. address = MainForm.address;
  64. }
  65. Thread thread = new Thread(SimulateClick);
  66. thread.Start();
  67. string pindata = "{\"data\":{\"businessType\":\"" + biztype + "\",\"deviceType\":\"\",\"orgId\":\"" + address.organizationId +
  68. "\"},\"orgId\":\"" + address.organizationId + "\",\"transType\":\"ec.query\"}";
  69. byte[] outinfo = new byte[4096];
  70. IntPtr retPtr = NationEcTrans(address.readQrEcTokenUrl, pindata, ref outinfo[0]);
  71. // IntPtr retPtr = NationEcTrans("https://test_dvs.hun.hsip.gov.cn/localcfc/api/hsecfc/localQrCodeQuery", pindata, ref outinfo[0]);
  72. var businessResultCode = Marshal.PtrToStringAnsi(retPtr).Trim().Replace("\u0000", "");
  73. string outstr = Encoding.Default.GetString(outinfo).Trim().Replace("\u0000", "");
  74. ReadCardResult tmp = Newtonsoft.Json.JsonConvert.DeserializeObject<ReadCardResult>(outstr);
  75. JObject result = new JObject();
  76. if (tmp.code == 0)
  77. {
  78. result.Add("code", 200);
  79. result.Add("message", "读取医保电子凭证成功。");
  80. result.Add("type", "qrcode");
  81. result.Add("data", outstr);
  82. result.Add("sign", null);
  83. }
  84. else
  85. {
  86. result.Add("code", 1001);
  87. result.Add("message", tmp.message);
  88. }
  89. return result;
  90. #endif
  91. }
  92. public static JObject ReadIdCard(string biztype)
  93. {
  94. #if DISABLE_NATIONEC
  95. JObject result = new JObject();
  96. result.Add("code", 1001);
  97. result.Add("message", "NationECCode.dll已屏蔽,请使用华视读卡器:http://localhost:8321/readcard/entry?param=huashi_readcard");
  98. result.Add("device", "NationECCode.dll(已屏蔽)");
  99. result.Add("suggestion", "请使用华视读卡器测试功能");
  100. return result;
  101. #else
  102. if (null == address)
  103. {
  104. address = MainForm.address;
  105. }
  106. string pindata = "{\"data\":{\"businessType\":\"" + biztype + "\",\"deviceType\":\"\",\"orgId\":\"" + address.organizationId +
  107. "\"},\"orgId\":\"" + address.organizationId + "\",\"transType\":\"cn.nhsa.cert.get\"}";
  108. byte[] outinfo = new byte[4096];
  109. IntPtr retPtr = NationEcTrans(address.readQrEcTokenUrl, pindata, ref outinfo[0]);
  110. string businessResultCode = Marshal.PtrToStringAnsi(retPtr).Trim().Replace("\u0000", "");
  111. string outstr = Encoding.Default.GetString(outinfo).Trim().Replace("\u0000", "");
  112. ReadCardResult tmp = Newtonsoft.Json.JsonConvert.DeserializeObject<ReadCardResult>(outstr);
  113. JObject result = new JObject();
  114. if (tmp.code == 0)
  115. {
  116. result.Add("code", 200);
  117. result.Add("message", "终端读取身份证成功。");
  118. result.Add("type", "face");
  119. result.Add("data", outstr);
  120. result.Add("sign", null);
  121. }
  122. else
  123. {
  124. result.Add("code", 1001);
  125. result.Add("message", tmp.message);
  126. }
  127. return result;
  128. #endif
  129. }
  130. public static JObject ReadQrCode2(string biztype)
  131. {
  132. #if DISABLE_NATIONEC
  133. JObject result = new JObject();
  134. result.Add("code", 1001);
  135. result.Add("message", "NationECCode.dll已屏蔽,请使用华视读卡器:http://localhost:8321/readcard/entry?param=huashi_readcard");
  136. result.Add("device", "NationECCode.dll(已屏蔽)");
  137. result.Add("suggestion", "请使用华视读卡器测试功能");
  138. return result;
  139. #else
  140. if (null == address)
  141. {
  142. address = MainForm.address;
  143. }
  144. string pindata = "{\"data\":{\"businessType\":\"" + biztype + "\",\"deviceType\":\"\",\"orgId\":\"" + address.organizationId +
  145. "\"},\"orgId\":\"" + address.organizationId + "\",\"transType\":\"cn.nhsa.qrcode.get\"}";
  146. byte[] outinfo = new byte[4096];
  147. IntPtr retPtr = NationEcTrans(address.readQrEcTokenUrl, pindata, ref outinfo[0]);
  148. string businessResultCode = Marshal.PtrToStringAnsi(retPtr).Trim().Replace("\u0000", "");
  149. string outstr = Encoding.Default.GetString(outinfo).Trim().Replace("\u0000", "");
  150. ReadCardResult tmp = Newtonsoft.Json.JsonConvert.DeserializeObject<ReadCardResult>(outstr);
  151. JObject result = new JObject();
  152. if (tmp.code == 0)
  153. {
  154. result.Add("code", 200);
  155. result.Add("message", "终端读取电子凭证成功。");
  156. result.Add("type", "face");
  157. result.Add("data", outstr);
  158. result.Add("sign", null);
  159. }
  160. else
  161. {
  162. result.Add("code", 1001);
  163. result.Add("message", tmp.message);
  164. }
  165. return result;
  166. #endif
  167. }
  168. public static JObject ReadFace(string biztype)
  169. {
  170. #if DISABLE_NATIONEC
  171. JObject result = new JObject();
  172. result.Add("code", 1001);
  173. result.Add("message", "NationECCode.dll已屏蔽,请使用华视读卡器:http://localhost:8321/readcard/entry?param=huashi_readcard");
  174. result.Add("device", "NationECCode.dll(已屏蔽)");
  175. result.Add("suggestion", "请使用华视读卡器测试功能");
  176. return result;
  177. #else
  178. if (null == address)
  179. {
  180. address = MainForm.address;
  181. }
  182. string pindata = "{\"data\":{\"businessType\":\"" + biztype + "\",\"deviceType\":\"\",\"orgId\":\"" + address.organizationId +
  183. "\"},\"orgId\":\"" + address.organizationId + "\",\"transType\":\"cn.nhsa.ec.auth\"}";
  184. byte[] outinfo = new byte[4096];
  185. IntPtr retPtr = NationEcTrans(address.readQrEcTokenUrl, pindata, ref outinfo[0]);
  186. string businessResultCode = Marshal.PtrToStringAnsi(retPtr).Trim().Replace("\u0000", "");
  187. string outstr = Encoding.Default.GetString(outinfo).Trim().Replace("\u0000", "");
  188. ReadCardResult tmp = Newtonsoft.Json.JsonConvert.DeserializeObject<ReadCardResult>(outstr);
  189. JObject result = new JObject();
  190. if (tmp.code == 0)
  191. {
  192. FaceAuthData authData = Newtonsoft.Json.JsonConvert.DeserializeObject<FaceAuthData>(tmp.data.ToString());
  193. return getUserInfoByAuthNo(biztype, authData.authNo);
  194. }
  195. else
  196. {
  197. result.Add("code", 1001);
  198. result.Add("message", tmp.message);
  199. return result;
  200. }
  201. #endif
  202. }
  203. private static JObject getUserInfoByAuthNo(string biztype, string authNo)
  204. {
  205. #if DISABLE_NATIONEC
  206. JObject result = new JObject();
  207. result.Add("code", 1001);
  208. result.Add("message", "NationECCode.dll已屏蔽");
  209. return result;
  210. #else
  211. string pindata = "{\"data\":{\"businessType\":\"" + biztype + "\",\"authNo\":\"" + authNo + "\",\"deviceType\":\"\",\"orgId\":\"" + address.organizationId +
  212. "\"},\"orgId\":\"" + address.organizationId + "\",\"transType\":\"cn.nhsa.auth.check\"}";
  213. byte[] outinfo = new byte[4096];
  214. IntPtr retPtr = NationEcTrans(address.readQrEcTokenUrl, pindata, ref outinfo[0]);
  215. string businessResultCode = Marshal.PtrToStringAnsi(retPtr).Trim().Replace("\u0000", "");
  216. string outstr = Encoding.Default.GetString(outinfo).Trim().Replace("\u0000", "");
  217. ReadCardResult tmp = Newtonsoft.Json.JsonConvert.DeserializeObject<ReadCardResult>(outstr);
  218. JObject result = new JObject();
  219. if (tmp.code == 0)
  220. {
  221. result.Add("code", 200);
  222. result.Add("message", "刷脸获取医保身份成功。");
  223. result.Add("type", "face");
  224. result.Add("data", outstr);
  225. result.Add("sign", null);
  226. }
  227. else
  228. {
  229. result.Add("code", 1001);
  230. result.Add("message", tmp.message);
  231. }
  232. return result;
  233. #endif
  234. }
  235. }
  236. }