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.
 
 
 
 
 
 

270 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. Random ran = new Random();
  102. string orderid = DateTime.Now.ToString("yyyyMMddHHmmssffffff") + ran.Next(0, 100000);
  103. if (finaChargeStuOrderIbll.GetEntityByorderid(orderid) != null)
  104. {
  105. return Fail("请刷新页面重试!");
  106. }
  107. //访问学校财务服务器
  108. string payresulturl = Config.GetValue("payresulturl");
  109. string par = "requestXml=";
  110. Encoding encoding = Encoding.GetEncoding("gb2312");
  111. byte[] payload = encoding.GetBytes(par);
  112. HttpClient httpClient = new HttpClient();
  113. HttpContent content = new ByteArrayContent(payload);
  114. try
  115. {
  116. var result = httpClient.PostAsync(payresulturl, content);
  117. //LogEntity logEntity2 = new LogEntity();
  118. //logEntity2.F_CategoryId = 121;
  119. //logEntity2.F_SourceObjectId = "preaccess";
  120. //logEntity2.F_SourceContentJson = "成功";
  121. //logEntity2.F_ExecuteResultJson = result.ToString();
  122. //logEntity2.WriteLog();
  123. try
  124. {
  125. string merchantid = "105000082201406";//商户号
  126. string posid = "043724806";//商户柜台代码
  127. string branchid = "510000000";//分行代码
  128. string payment = entity.PayMoney.ToString();
  129. string curcode = "01";
  130. string txcode = "530550";
  131. string remark1 = entity.StuNo;
  132. string remark2 = entity.FSYear.ToString();
  133. string returntype = "3";
  134. string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss");
  135. string pub32tr2 = "40d987faa793a0a27e7a86ef020111";
  136. string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6";
  137. string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid;
  138. tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1;
  139. tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout;
  140. MD5 md5 = MD5.Create();
  141. string tmp1 = tmp;
  142. tmp += "&PUB=" + pub32tr2;
  143. byte[] buffer = Encoding.Default.GetBytes(tmp);
  144. byte[] md5Buffer = md5.ComputeHash(buffer);
  145. string strMd5 = "";
  146. //hdnOrderId.Value = orderid;
  147. foreach (byte item in md5Buffer)
  148. {
  149. strMd5 += item.ToString("x2");
  150. }
  151. String url = bankURL + "&" + tmp1 + "&MAC=" + strMd5;
  152. string reJson = HttpMethods.Post(url);
  153. LogEntity logEntity = new LogEntity();
  154. logEntity.F_CategoryId = 121;
  155. logEntity.F_SourceObjectId = "qrcode";
  156. logEntity.F_SourceContentJson = "成功";
  157. logEntity.F_ExecuteResultJson = reJson;
  158. logEntity.WriteLog();
  159. //HttpConnect conn = new HttpConnect();
  160. //string reJson = conn.Post(url, "");
  161. JsonBean MemberInfoList = JsonConvert.DeserializeObject<JsonBean>(reJson);
  162. if (MemberInfoList.SUCCESS.Equals("true"))
  163. {
  164. string imgCode = HttpMethods.Post(MemberInfoList.PAYURL);
  165. logEntity.F_CategoryId = 121;
  166. logEntity.F_SourceObjectId = "qrcode";
  167. logEntity.F_SourceContentJson = "成功";
  168. logEntity.F_ExecuteResultJson = imgCode;
  169. logEntity.WriteLog();
  170. MemberInfoList = JsonConvert.DeserializeObject<JsonBean>(imgCode);
  171. if (MemberInfoList.SUCCESS.Equals("true"))
  172. {
  173. imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid);
  174. }
  175. }
  176. if (!string.IsNullOrEmpty(imgUrl))
  177. {
  178. entity.orderid = orderid;
  179. finaChargeStuOrderIbll.SaveOrderData(entity, list);
  180. }
  181. }
  182. catch (Exception e)
  183. {
  184. LogEntity logEntity = new LogEntity();
  185. logEntity.F_CategoryId = 121;
  186. logEntity.F_SourceObjectId = "qrcode";
  187. logEntity.F_SourceContentJson = "失败";
  188. logEntity.F_ExecuteResultJson = e.Message;
  189. logEntity.WriteLog();
  190. }
  191. }
  192. catch (Exception e)
  193. {
  194. LogEntity logEntity = new LogEntity();
  195. logEntity.F_CategoryId = 121;
  196. logEntity.F_SourceObjectId = "preaccess";
  197. logEntity.F_SourceContentJson = "失败";
  198. logEntity.F_ExecuteResultJson = e.Message;
  199. logEntity.WriteLog();
  200. return Fail("缴费机器暂停缴费!");
  201. }
  202. var backimgUrl = new { imgUrl };
  203. return Success(backimgUrl);
  204. }
  205. public class JsonBean
  206. {
  207. /// <summary>
  208. ///
  209. /// </summary>
  210. public string SUCCESS { get; set; }
  211. public string PAYURL { get; set; }
  212. public string QRURL { get; set; }
  213. }
  214. /// <summary>
  215. /// 生成并保存二维码图片的方法
  216. /// </summary>
  217. /// <param name="str">输入的内容</param>
  218. public string CreateQRImg(string str, string orderId)
  219. {
  220. string QRCodeFile = Config.GetValue("QRCodeFile");
  221. Random ran = new Random();
  222. Bitmap bt;
  223. str = HttpUtility.UrlDecode(str);
  224. string enCodeString = str;
  225. //生成设置编码实例
  226. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  227. //设置二维码的规模,默认4
  228. qrCodeEncoder.QRCodeScale = 3;
  229. //设置二维码的版本,默认7
  230. qrCodeEncoder.QRCodeVersion = 7;
  231. //设置错误校验级别,默认中等
  232. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  233. //生成二维码图片
  234. bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
  235. //二维码图片的名称
  236. string filename = orderId;
  237. if (!DirFileHelper.IsExistFile(QRCodeFile + "/Content/images/QRCode/"))
  238. {
  239. Directory.CreateDirectory(QRCodeFile + "/Content/images/QRCode/");
  240. }
  241. var path = QRCodeFile + "/Content/images/QRCode/" + filename + ".jpg";
  242. //保存二维码图片在photos路径下
  243. try
  244. {
  245. bt.Save(path);
  246. }
  247. catch (Exception ex)
  248. {
  249. return "";
  250. }
  251. //图片控件要显示的二维码图片路径
  252. return "/Content/images/QRCode/" + filename + ".jpg";
  253. }
  254. }
  255. }