/// <summary> /// 订单支付表单HTML字符串生成 /// </summary> /// <param name="context">请求上下文对象</param> /// <param name="para">订单相关参数</param> /// <returns></returns> public string LinePaySendRequestWriter(LineRequestPara para) { string key = string.Empty; string keyValue = string.Empty; string signValue = string.Empty; string sign = string.Empty; RSAOperate Rdaop = new RSAOperate(); Dictionary<string, string> dic = new Dictionary<string, string>() { {"outOrderId",para.outOrderId}, {"totalAmount",para.totalAmount.ToString()}, {"goodsName",para.goodsName}, {"goodsExplain",para.goodsExplain}, {"merUrl",para.merUrl}, {"noticeUrl",para.noticeUrl}, {"bankCardType",para.bankCardType}, {"bankCode",para.bankCode}, {"orderCreateTime",para.orderCreateTime}, {"lastPayTime",para.lastPayTime} }; signValue = Rdaop.GetUrlParamString(CreateRquestUrlPara(para), RSASign.GetPayRSAParamSort()); //提交参数加密 sign = RSASign.GetMD5RSA(signValue + ProperConst.Key); var paraSort = RSASign.GetPayParamSort().ToList(); StringBuilder writer = new StringBuilder(); writer.Append(" <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> "); writer.Append(" <html xmlns=\"http://www.w3.org/1999/xhtml\" > "); writer.Append(" <head runat=\"server\"><title>中联信通支付</title> "); writer.Append(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/> "); writer.Append(" </head><body> "); writer.AppendFormat(" <form id=\"formpay\" method=\"post\" action=\"{0}\"> ", ProperConst.payUrl); paraSort.ForEach(k => { key = k; if (key == "merchantCode") keyValue = ProperConst.merchantCode; else keyValue = dic[key]; writer.AppendFormat(" <input type=\"text\" name=\"{0}\" style=\"display:none;\" value=\"{1}\"/> ", key, keyValue); }); writer.AppendFormat(" <input type=\"text\" name=\"sign\" style=\"display:none;\" value=\"{0}\"/> ", sign); writer.Append(" </form> "); writer.Append(" <script type=\"text/javascript\"> document.getElementById(\"formpay\").submit();</script> "); return writer.ToString(); }
/// <summary> /// 订单支付成功商家异步 /// </summary> /// <param name="context"></param> /// <returns></returns> public LineResponsePara LinePayCallBack(HttpContext context) { var responseForm = context.Request.Form; string orderNumber = responseForm["outOrderId"].IsNull() ? string.Empty : responseForm["outOrderId"]; var response = new LineResponsePara() { isPaySuccess = false, orderNumber = orderNumber, paymentMoney = 0, resultMsg = string.Empty }; try { RSAOperate Rdaop = new RSAOperate(); //处理传输过来的流 Stream responseStream = context.Request.InputStream; StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8); string RequestStream = readStream.ReadToEnd(); readStream.Close(); if (!string.IsNullOrEmpty(RequestStream)) { string RSAChar = Rdaop.GetUrlParamString(RequestStream, RSASign.GetNoticeRSAParamSort()) + ProperConst.Key; if (Rdaop.GetIsSafty(Rdaop.GetjosnValue(RequestStream, "sign"), RSAChar))//判断是否报文加密后能够匹配 { lock (lockobject)//此处建议使用lock锁机制,进行并发控制,防止重复数据混乱 { response.isPaySuccess = true; response.orderNumber = responseForm["orderNumber"].IsNull() ? string.Empty : responseForm["orderNumber"]; response.paymentMoney = responseForm["totalAmount"].IsNull() ? (decimal)0.00 : AlipayConfig.MoneyFormatDco(responseForm["totalAmount"]); ; response.resultMsg = "支付成功"; } } else { response.resultMsg = "返回报文加密信息存在异常"; context.Response.Write("{\"code\":\"01\",\"msg\":\"返回报文加密信息存在异常\"}"); } } else { response.resultMsg = "返回报文为空存在异常"; context.Response.Write("{\"code\":\"02\",\"msg\":\"返回报文为空存在异常\"}"); } } catch (Exception ex) { response.resultMsg = "报文异常" + ex.Message; context.Response.Write("{\"code\":\"03\",\"msg\":\"报文异常\"}"); } return response; }