You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

266 lines
11 KiB

  1. using System;
  2. using Learun.Application.Organization;
  3. using Learun.Application.TwoDevelopment.EducationalAdministration;
  4. using Learun.Application.TwoDevelopment.EvaluationTeach;
  5. using Learun.Util;
  6. using Nancy;
  7. using System.Collections.Generic;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Security.Cryptography;
  12. using System.Text;
  13. using System.Web;
  14. using System.Web.Mvc;
  15. using Learun.Application.Base.SystemModule;
  16. using Learun.Application.TwoDevelopment.Ask;
  17. using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement;
  18. using Newtonsoft.Json;
  19. using ThoughtWorks.QRCode.Codec;
  20. using System.Net.Http;
  21. namespace Learun.Application.WebApi.Modules
  22. {
  23. /// <summary>
  24. /// 版 本 Learun-ADMS V7.0.0 数字化智慧校园
  25. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  26. /// 创建人:数字化智慧校园-框架开发组
  27. /// 日 期:2018.01.04
  28. /// 描 述:
  29. /// </summary>
  30. public class FinaChargeStuYearApi : BaseApi
  31. {
  32. private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL();
  33. private FinaChargeStuOrderIBLL finaChargeStuOrderIbll = new FinaChargeStuOrderBLL();
  34. private TeachSwitchIBLL teachSwitchIbll = new TeachSwitchBLL();
  35. public FinaChargeStuYearApi()
  36. : base("/ReceiveSendFeeManagement/FinaChargeStuYearApi")
  37. {
  38. Get["/getpayfeelist"] = GetPayfeeList;// 获取缴费列表
  39. Get["/getpayfeeinfo"] = GetPayfeeInfo;//获取缴费明细
  40. Post["/generateqrcode"] = PayFeeQRCode;//生成缴费二维码
  41. Get["/getinvoice"] = GetInvoice;//获取发票
  42. }
  43. public Response GetInvoice(dynamic _)
  44. {
  45. string keyValue = Request.Query["keyValue"];
  46. var list = finaChargeStuYearIBLL.GetStuInvoice(keyValue);
  47. return Success(list);
  48. }
  49. public Response GetPayfeeList(dynamic _)
  50. {
  51. var eastatus = teachSwitchIbll.GetFirst("jf");
  52. if (eastatus != null && eastatus.status == "1")
  53. {
  54. ReqPageParam parameter = this.GetReqData<ReqPageParam>();
  55. var data = finaChargeStuYearIBLL.GetPageList(parameter.pagination, parameter.queryJson);
  56. var jsonData = new
  57. {
  58. rows = data,
  59. total = parameter.pagination.total,
  60. page = parameter.pagination.page,
  61. records = parameter.pagination.records
  62. };
  63. return Success(jsonData);
  64. }
  65. else
  66. {
  67. return Fail("当前不在缴费时间范围");
  68. }
  69. }
  70. public Response GetPayfeeInfo(dynamic _)
  71. {
  72. string keyValue = Request.Query["keyValue"];
  73. //学生基础信息
  74. var FinaChargeStuYearData = finaChargeStuYearIBLL.GetFinaChargeStuYearEntity(keyValue);
  75. //学生缴费明细
  76. var FinaChargeStuItemList = finaChargeStuYearIBLL.GetFinaChargeStuItemList(keyValue);
  77. var jsonData = new
  78. {
  79. StuInfoFreshData = FinaChargeStuYearData,
  80. FinaChargesStandardList = FinaChargeStuItemList,
  81. PayFeeTotal =FinaChargeStuYearData.NeedToPay,
  82. SJAmount = FinaChargeStuYearData.SJAmount
  83. };
  84. return Success(jsonData);
  85. }
  86. public class PayfeeRequest
  87. {
  88. public string strEntity { get; set; }
  89. public string detailList { get; set; }
  90. }
  91. /// <summary>
  92. /// 生成缴费二维码
  93. /// </summary>
  94. /// <returns></returns>
  95. public Response PayFeeQRCode(dynamic _)
  96. {
  97. PayfeeRequest parameter = this.GetReqData<PayfeeRequest>();
  98. FinaChargeStuYearEntity entity = parameter.strEntity.ToObject<FinaChargeStuYearEntity>();
  99. List<FinaChargeStuOrderDetailEntity> list = parameter.detailList.ToObject<List<FinaChargeStuOrderDetailEntity>>();
  100. var imgUrl = "";
  101. //访问学校财务服务器
  102. string payresulturl = Config.GetValue("payresulturl");
  103. string par = "requestXml=";
  104. Encoding encoding = Encoding.GetEncoding("gb2312");
  105. byte[] payload = encoding.GetBytes(par);
  106. HttpClient httpClient = new HttpClient();
  107. HttpContent content = new ByteArrayContent(payload);
  108. try
  109. {
  110. var result = httpClient.PostAsync(payresulturl, content);
  111. //LogEntity logEntity2 = new LogEntity();
  112. //logEntity2.F_CategoryId = 121;
  113. //logEntity2.F_SourceObjectId = "preaccess";
  114. //logEntity2.F_SourceContentJson = "成功";
  115. //logEntity2.F_ExecuteResultJson = result.ToString();
  116. //logEntity2.WriteLog();
  117. try
  118. {
  119. Random ran = new Random();
  120. string merchantid = "105000082201406";//商户号
  121. string posid = "043724806";//商户柜台代码
  122. string branchid = "510000000";//分行代码
  123. string orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000);
  124. string payment = entity.PayMoney.ToString();
  125. string curcode = "01";
  126. string txcode = "530550";
  127. string remark1 = entity.StuNo;
  128. string remark2 = entity.FSYear.ToString();
  129. string returntype = "3";
  130. string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss");
  131. string pub32tr2 = "40d987faa793a0a27e7a86ef020111";
  132. string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6";
  133. string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid;
  134. tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1;
  135. tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout;
  136. MD5 md5 = MD5.Create();
  137. string tmp1 = tmp;
  138. tmp += "&PUB=" + pub32tr2;
  139. byte[] buffer = Encoding.Default.GetBytes(tmp);
  140. byte[] md5Buffer = md5.ComputeHash(buffer);
  141. string strMd5 = "";
  142. //hdnOrderId.Value = orderid;
  143. foreach (byte item in md5Buffer)
  144. {
  145. strMd5 += item.ToString("x2");
  146. }
  147. String url = bankURL + "&" + tmp1 + "&MAC=" + strMd5;
  148. string reJson = HttpMethods.Post(url);
  149. LogEntity logEntity = new LogEntity();
  150. logEntity.F_CategoryId = 121;
  151. logEntity.F_SourceObjectId = "qrcode";
  152. logEntity.F_SourceContentJson = "成功";
  153. logEntity.F_ExecuteResultJson = reJson;
  154. logEntity.WriteLog();
  155. //HttpConnect conn = new HttpConnect();
  156. //string reJson = conn.Post(url, "");
  157. JsonBean MemberInfoList = JsonConvert.DeserializeObject<JsonBean>(reJson);
  158. if (MemberInfoList.SUCCESS.Equals("true"))
  159. {
  160. string imgCode = HttpMethods.Post(MemberInfoList.PAYURL);
  161. logEntity.F_CategoryId = 121;
  162. logEntity.F_SourceObjectId = "qrcode";
  163. logEntity.F_SourceContentJson = "成功";
  164. logEntity.F_ExecuteResultJson = imgCode;
  165. logEntity.WriteLog();
  166. MemberInfoList = JsonConvert.DeserializeObject<JsonBean>(imgCode);
  167. if (MemberInfoList.SUCCESS.Equals("true"))
  168. {
  169. imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid);
  170. }
  171. }
  172. if (!string.IsNullOrEmpty(imgUrl))
  173. {
  174. entity.orderid = orderid;
  175. finaChargeStuOrderIbll.SaveOrderData(entity, list);
  176. }
  177. }
  178. catch (Exception e)
  179. {
  180. LogEntity logEntity = new LogEntity();
  181. logEntity.F_CategoryId = 121;
  182. logEntity.F_SourceObjectId = "qrcode";
  183. logEntity.F_SourceContentJson = "失败";
  184. logEntity.F_ExecuteResultJson = e.Message;
  185. logEntity.WriteLog();
  186. }
  187. }
  188. catch (Exception e)
  189. {
  190. LogEntity logEntity = new LogEntity();
  191. logEntity.F_CategoryId = 121;
  192. logEntity.F_SourceObjectId = "preaccess";
  193. logEntity.F_SourceContentJson = "失败";
  194. logEntity.F_ExecuteResultJson = e.Message;
  195. logEntity.WriteLog();
  196. return Fail("缴费机器暂停缴费!");
  197. }
  198. var backimgUrl = new { imgUrl };
  199. return Success(backimgUrl);
  200. }
  201. public class JsonBean
  202. {
  203. /// <summary>
  204. ///
  205. /// </summary>
  206. public string SUCCESS { get; set; }
  207. public string PAYURL { get; set; }
  208. public string QRURL { get; set; }
  209. }
  210. /// <summary>
  211. /// 生成并保存二维码图片的方法
  212. /// </summary>
  213. /// <param name="str">输入的内容</param>
  214. public string CreateQRImg(string str, string orderId)
  215. {
  216. string QRCodeFile = Config.GetValue("QRCodeFile");
  217. Random ran = new Random();
  218. Bitmap bt;
  219. str = HttpUtility.UrlDecode(str);
  220. string enCodeString = str;
  221. //生成设置编码实例
  222. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  223. //设置二维码的规模,默认4
  224. qrCodeEncoder.QRCodeScale = 3;
  225. //设置二维码的版本,默认7
  226. qrCodeEncoder.QRCodeVersion = 7;
  227. //设置错误校验级别,默认中等
  228. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  229. //生成二维码图片
  230. bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
  231. //二维码图片的名称
  232. string filename = orderId;
  233. if (!DirFileHelper.IsExistFile(QRCodeFile + "/Content/images/QRCode/"))
  234. {
  235. Directory.CreateDirectory(QRCodeFile + "/Content/images/QRCode/");
  236. }
  237. var path = QRCodeFile + "/Content/images/QRCode/" + filename + ".jpg";
  238. //保存二维码图片在photos路径下
  239. try
  240. {
  241. bt.Save(path);
  242. }
  243. catch (Exception ex)
  244. {
  245. return "";
  246. }
  247. //图片控件要显示的二维码图片路径
  248. return "/Content/images/QRCode/" + filename + ".jpg";
  249. }
  250. }
  251. }