UppPay.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. using HttpServices;
  2. using Newtonsoft.Json.Linq;
  3. using System;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. using System.Windows.Forms;
  7. using UppPay.Forms;
  8. using Ini;
  9. using DGPosPay;
  10. namespace UppPay
  11. {
  12. public class UppPay
  13. {
  14. Thread thread;
  15. string errorCode = "-1";
  16. string errorMessage = "";
  17. JObject SMFormOutDataobj = new JObject();
  18. JObject result;
  19. JObject inParamsobj = new JObject();
  20. IniFile ini = new IniFile();
  21. Loading loading = new Loading();
  22. public string UPPPayControl(string inParams)
  23. {
  24. System.Diagnostics.Debugger.Launch();
  25. string readData = "";
  26. result= new JObject();
  27. JObject jObject = new JObject();
  28. try
  29. {
  30. inParamsobj = JObject.Parse(inParams);
  31. string recordIDinfo = inParamsobj["recordIDinfo"].ToString();
  32. var payInfo = inParamsobj["payInfo"];
  33. var payListArr = inParamsobj["payList"];
  34. string inPaywCode = "";
  35. string inAuthcode = "";
  36. if (payInfo != null)
  37. {
  38. inPaywCode = payInfo["paywCode"]?.ToString();
  39. inAuthcode = payInfo["authcode"]?.ToString();
  40. }
  41. foreach (JObject obj in payListArr)
  42. {
  43. // 提取对象的属性值
  44. string payWType = obj["payWType"]?.ToString();
  45. string payWayCode = obj["payWayCode"]?.ToString();
  46. string payAmt = obj["payAmt"]?.ToString();
  47. string revTranFlag= obj["revTranFlag"]?.ToString();
  48. if (payWType == "DGDLL")
  49. {
  50. //东莞光明
  51. thread = new Thread(() => formPOSFormd(obj));
  52. thread.SetApartmentState(ApartmentState.STA); //重点
  53. thread.Start();
  54. thread.Join();
  55. if (errorCode != "0")
  56. {
  57. //错误退出
  58. break;
  59. }
  60. }
  61. else if (payWType == "ONLINE")
  62. {
  63. //线上扫码支付
  64. string authcode = "";
  65. if ((inPaywCode != "") && (inPaywCode == payWayCode))
  66. {
  67. ///前端界面传入了二维码
  68. authcode = inAuthcode;
  69. }
  70. else {
  71. SMForm formSM = new SMForm();
  72. JObject smreturnobj = formSMFormd(formSM);
  73. errorCode = smreturnobj["errorCode"].ToString();
  74. errorMessage = smreturnobj["errorMessage"].ToString();
  75. if (errorCode != "0")
  76. {
  77. break;
  78. }
  79. authcode = smreturnobj["authcode"].ToString();
  80. }
  81. if (string.IsNullOrWhiteSpace(authcode))
  82. {
  83. errorCode = "-1";
  84. errorMessage = "authcode 为空";
  85. break;
  86. }
  87. obj.Add("authcode", authcode);
  88. LoadingFormd();
  89. thread = new Thread(() => payONLINE(obj));
  90. thread.SetApartmentState(ApartmentState.STA); //重点
  91. thread.Start();
  92. thread.Join();
  93. if (errorCode != "0")
  94. {
  95. //错误退出
  96. break;
  97. }
  98. }
  99. else
  100. {
  101. break;
  102. errorCode = "-1";
  103. errorMessage = "非第三支付方式";
  104. }
  105. }
  106. }
  107. catch (Exception ex2)
  108. {
  109. errorCode = "-1";
  110. errorMessage = ex2.Message;
  111. }
  112. jObject.Add("errorCode", errorCode);
  113. jObject.Add("errorMessage", errorMessage);
  114. jObject.Add("result", result);
  115. return jObject.ToString();
  116. }
  117. private JObject payONLINE2()
  118. {
  119. SMFormOutDataobj = new JObject();
  120. loading.lblStatusText("请稍等........");
  121. try
  122. {
  123. for (int i = 0; i < 50; i++)
  124. {
  125. Thread.Sleep(500);
  126. loading.lblStatusText("" + i);
  127. }
  128. loading.CloseLoading();
  129. }
  130. catch (Exception ex2)
  131. {
  132. errorCode = "-1";
  133. errorMessage = "ReportFormd:" + ex2.Message;
  134. }
  135. errorCode = "-1";
  136. errorMessage = "ReportFormd:";
  137. return SMFormOutDataobj;
  138. }
  139. private void payONLINE(JObject InjObject)
  140. {
  141. loading.lblStatusText("请稍等........");
  142. try
  143. {
  144. string PayCode = ini.IniReadValue("SMPay", "PayCode");
  145. // 创建一个 JObject 对象
  146. JObject hisParamsobj = new JObject();
  147. // 创建一个 JArray 对象
  148. JArray paramsArray = new JArray();
  149. paramsArray.Add(InjObject);
  150. hisParamsobj["params"] = paramsArray;
  151. hisParamsobj["code"] = PayCode;
  152. hisParamsobj["session"] = inParamsobj["session"];
  153. //调用his进行数据Pos数据组织
  154. RestClient restClient = new RestClient();
  155. Task<string> task = restClient.HISHTTPServices(hisParamsobj.ToString()); //调用HIS回调
  156. string hisResult = task.Result;
  157. JObject hisResultObject = JObject.Parse(hisResult);
  158. errorCode = hisResultObject["errorCode"].ToString();
  159. errorMessage = hisResultObject["errorMessage"].ToString();
  160. string callbackDatainfo = hisResultObject["callbackData"].ToString();
  161. if (errorCode == "0")
  162. {
  163. ///支付成功
  164. errorCode = hisResultObject["errorCode"].ToString();
  165. errorMessage = hisResultObject["errorMessage"].ToString();
  166. result = JObject.Parse(hisResultObject["result"].ToString());
  167. }
  168. else if (errorCode == "USERPAYING")
  169. {
  170. loading.lblStatusText("请告知病人手机输入支付密码........");
  171. Thread.Sleep(3000);
  172. int countDownTime = int.Parse(ini.IniReadValue("Config", "waitTime"));
  173. int warningTime = int.Parse(ini.IniReadValue("Config", "warningTime"));
  174. for (int i = 0; i < countDownTime; i++)
  175. {
  176. Thread.Sleep(1000);
  177. loading.label2Text(countDownTime-i, warningTime);
  178. JObject callbackDataobj = JObject.Parse(callbackDatainfo);
  179. Task<string> savetask = restClient.HISHTTPServices(callbackDataobj.ToString()); //调用HIS回调保存数据
  180. string hisSaveResult = savetask.Result;
  181. JObject hisSaveResultobj = JObject.Parse(hisSaveResult);
  182. errorCode = hisSaveResultobj["errorCode"].ToString();
  183. errorMessage = hisSaveResultobj["errorMessage"].ToString();
  184. if (errorCode != "USERPAYING")
  185. {
  186. break;
  187. }
  188. }
  189. if (errorCode == "USERPAYING")
  190. {
  191. errorCode = "-1";
  192. errorMessage = "支付超时!!!";
  193. }
  194. }
  195. else {
  196. ///支付失败
  197. errorCode = hisResultObject["errorCode"].ToString();
  198. errorMessage = hisResultObject["errorMessage"].ToString();
  199. }
  200. }
  201. catch (Exception ex2)
  202. {
  203. errorCode = "-1";
  204. errorMessage = "ReportFormd:" + ex2.Message;
  205. //MessageBox.Show(errorMessage);
  206. }
  207. loading.CloseLoading();
  208. }
  209. private JObject formSMFormd(SMForm formSM)
  210. {
  211. SMFormOutDataobj = new JObject();
  212. try
  213. {
  214. if (formSM.ShowDialog() == DialogResult.OK)
  215. {
  216. SMFormOutDataobj = formSM.OutjObject;
  217. }
  218. else
  219. {
  220. SMFormOutDataobj = formSM.OutjObject;
  221. }
  222. }
  223. catch (Exception ex2)
  224. {
  225. errorCode = "-1";
  226. errorMessage = "ReportFormd:" + ex2.Message;
  227. }
  228. return SMFormOutDataobj;
  229. }
  230. private void formPOSFormd(JObject InjObject)
  231. {
  232. try
  233. {
  234. string PayCode = ini.IniReadValue("DGPosPay", "PayCode");
  235. // 创建一个 JObject 对象
  236. JObject hisParamsobj = new JObject();
  237. // 创建一个 JArray 对象
  238. JArray paramsArray = new JArray();
  239. paramsArray.Add(InjObject);
  240. hisParamsobj["params"] = paramsArray;
  241. hisParamsobj["code"] = PayCode;
  242. hisParamsobj["session"] = inParamsobj["session"];
  243. //调用his进行数据Pos数据组织
  244. RestClient restClient = new RestClient();
  245. Task<string> task = restClient.HISHTTPServices(hisParamsobj.ToString()); //调用HIS回调
  246. string hisResult = task.Result;
  247. JObject hisResultObject = JObject.Parse(hisResult);
  248. errorCode = hisResultObject["errorCode"].ToString();
  249. errorMessage = hisResultObject["errorMessage"].ToString();
  250. string callbackDatainfo = hisResultObject["callbackData"].ToString();
  251. if (errorCode == "0")
  252. {
  253. //调用posdll
  254. DGPosPayClass dgPosPay = new DGPosPayClass();
  255. string dllResult = dgPosPay.DGPosPay(hisResult);
  256. JObject dllResultobj = JObject.Parse(dllResult);
  257. errorCode = dllResultobj["errorCode"].ToString();
  258. errorMessage = dllResultobj["errorMessage"].ToString();
  259. string SavePayCode = ini.IniReadValue("DGPosPay", "SavePayCode");
  260. JObject callbackDataobj = JObject.Parse(callbackDatainfo);
  261. callbackDataobj["code"] = SavePayCode;
  262. string paramsinfo = callbackDataobj["params"][0].ToString();
  263. JObject paramsobj = JObject.Parse(paramsinfo);
  264. paramsobj.Add("posData", dllResultobj);
  265. JArray paramsArray2 = new JArray();
  266. paramsArray2.Add(paramsobj);
  267. callbackDataobj["params"] = paramsArray2;
  268. Task<string> savetask = restClient.HISHTTPServices(callbackDataobj.ToString()); //调用HIS回调保存数据
  269. string hisSaveResult = savetask.Result;
  270. JObject hisSaveResultobj = JObject.Parse(hisSaveResult);
  271. errorCode = hisSaveResultobj["errorCode"].ToString();
  272. errorMessage = hisSaveResultobj["errorMessage"].ToString();
  273. result = JObject.Parse(hisSaveResultobj["result"].ToString());
  274. }
  275. }
  276. catch (Exception ex2)
  277. {
  278. errorCode = "-1";
  279. errorMessage = "ReportFormd:" + ex2.Message;
  280. //MessageBox.Show(errorMessage);
  281. }
  282. thread.Abort();
  283. }
  284. private JObject LoadingFormd()
  285. {
  286. try
  287. {
  288. loading.Show();
  289. }
  290. catch (Exception ex2)
  291. {
  292. loading = new Loading();
  293. loading.Show();
  294. }
  295. return SMFormOutDataobj;
  296. }
  297. }
  298. }