/// <summary> /// /// </summary> /// <param name="url"></param> /// <param name="postDataStr"></param> /// <param name="channel"></param> /// <param name="retacode"></param> /// <param name="transactionnum"></param> /// <param name="OrderID"></param> /// <returns></returns> public rerurnpram PostRestSharp(string url, string postDataStr, string channel, string retacode, string transactionnum, string OrderID) { WebRequest hr = HttpWebRequest.Create(url); byte[] buf = System.Text.Encoding.GetEncoding("utf-8").GetBytes(postDataStr); hr.ContentType = "application/json"; hr.ContentLength = buf.Length; hr.Method = "POST"; System.IO.Stream RequestStream = hr.GetRequestStream(); RequestStream.Write(buf, 0, buf.Length); RequestStream.Close(); System.Net.WebResponse response = hr.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")); string ReturnVal = reader.ReadToEnd(); reader.Close(); response.Close(); rerurnpram rerurnpram = new rerurnpram(); return(rerurnpram); }
public HttpResponseMessage X_ScanCode(payparameter payparameter) { string result = string.Empty; try { RulePayMethod rulePay = new RulePayMethod(); rerurnpram rerurnpram = rulePay.Islegitimate(payparameter); if (payparameter.PayType == "119" && payparameter.PayType == "104") { result = rule.JsonStrCode(rerurnpram.statecode, rerurnpram.message, rerurnpram.data, rerurnpram.urlcode); } else { result = rule.JsonStr(rerurnpram.statecode, rerurnpram.message, rerurnpram.data); } return(new HttpResponseMessage { Content = new StringContent(result, System.Text.Encoding.UTF8, "application/json") }); } catch (Exception e) { //错误保存日志 throw new InsertException(e.Message, "Transaction", "LB_ScanCode", payparameter.ToString()); } }
/// <summary> /// 功能描述:处理再创支付的返回结果 /// 创建 人:周文卿 /// 创建时间:2019-03-19 /// </summary> /// <param name="result">请求结果</param> /// <param name="transactionnum">流水号</param> /// <param name="OrderID">订单号</param> /// <param name="ratecode">支付代码</param> /// <returns></returns> public rerurnpram ResultZC(string result, string ratecode, string transactionnum, string OrderID) { rerurnpram Ownresult = new rerurnpram(); JToken rejson = JToken.Parse(result); string code = rejson["status"].ToString(); int i = 0; if (code == "0") { RuleWeixinpay weixinpay = new RuleWeixinpay(); i = weixinpay.insertweixinpay(OrderID, transactionnum, rejson["qrcode"].ToString(), DateTime.Now); Ownresult.urlcode = rejson["qrcode_data"].ToString(); if (i == 0) { Ownresult.message = "支付失败"; } Ownresult.message = "支付中"; } else { Ownresult.message = "支付失败"; messageLog.inserttblPayfailMessageLog("再创支付", "605", result, transactionnum, OrderID, DateTime.Now, result); } return(Ownresult); }
/// <summary> /// 发送请求(参数为字符)(x-www-form-urlencoded) /// </summary> /// <param name="url"></param> /// <param name="postDataStr"></param> /// <param name="channel"></param> /// <param name="key"></param> /// <param name="orid"></param> /// <returns></returns> public string HttpPostZF(string url, string postDataStr, string channel, string key, string orid) { Encoding code = Encoding.GetEncoding("utf-8"); rerurnpram rerurnpram = new rerurnpram(); byte[] bytesRequestData = code.GetBytes(postDataStr.Trim()); string str = ""; try { WebRequest webRequest = WebRequest.Create(url); HttpWebRequest myReq = webRequest as HttpWebRequest; myReq.Method = "post"; myReq.ContentType = "application/x-www-form-urlencoded"; myReq.ContentLength = bytesRequestData.Length; Stream requestStream = myReq.GetRequestStream(); requestStream.Write(bytesRequestData, 0, bytesRequestData.Length); requestStream.Close(); HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse(); Stream myStream = HttpWResp.GetResponseStream(); StreamReader Reader = new StreamReader(myStream); str = Reader.ReadToEnd(); ChannelReturnresult returnresult = new ChannelReturnresult(); //根据渠道 处理结果 switch (channel) { case "HT_006": rerurnpram.message = returnresult.ResultHTSub(str, key); break; case "Y_007": rerurnpram.message = returnresult.ResultYSub(str, key); break; case "YD_010": rerurnpram.message = returnresult.ResultYDSub(str, key); break; case "ZC_008": rerurnpram.message = returnresult.ResultZCSub(str, key, orid); break; case "HF_011": rerurnpram.message = returnresult.ResultHFSub(str, key); break; } return(rerurnpram.message); } catch (Exception e) { throw new InsertException(e.Message, "RulePayMethod", "PostUrl", postDataStr); } }
/// <summary> /// 代付请求 并且处理(json的请求方式) /// </summary> /// <param name="url"></param> /// <param name="postData"></param> /// <param name="channel"></param> /// <param name="key"></param> /// <param name="ordid"></param> /// <returns></returns> public string PostUrl(string url, string postData, string channel, string key, string ordid) { try { ChannelReturnresult returnresult = new ChannelReturnresult(); rerurnpram rerurnpram = new rerurnpram(); string result = ""; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "POST"; req.Timeout = 5000;//设置请求超时时间,单位为毫秒 req.ContentType = "application/json"; byte[] data = Encoding.UTF8.GetBytes(postData); req.ContentLength = data.Length; using (Stream reqStream = req.GetRequestStream()) { reqStream.Write(data, 0, data.Length); reqStream.Close(); } HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); Stream stream = resp.GetResponseStream(); //获取响应内容 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { result = reader.ReadToEnd(); } //根据渠道 处理结果 switch (channel) { case "QJ_004": rerurnpram.message = returnresult.ResultQJSub(result, key, ordid); break; } return(rerurnpram.message); } catch (Exception e) { throw new InsertException(e.Message, "RulePayMethod", "PostUrl", postData); } }
/// <summary> /// 功能描述:处理万通的返回结果 /// 创建 人:周文卿 /// 创建时间:2019-02-19 /// </summary> /// <param name="result">请求结果</param> /// <param name="transactionnum">流水号</param> /// <param name="OrderID">订单号</param> /// <param name="ratecode">支付代码</param> /// <returns></returns> public rerurnpram ResultQJ(string result, string ratecode, string transactionnum, string OrderID) { JToken rejson = JToken.Parse(result); string aa = rejson["payment"].ToString(); rerurnpram rerurnpram = new rerurnpram(); int i = 0; if (aa == "True") { rerurnpram.message = "支付中"; switch (ratecode) { case "101": RuleAlipay alipay = new RuleAlipay(); i = alipay.insertAlipay(OrderID, transactionnum, rejson["payUrl"].ToString(), DateTime.Now); if (i == 0) { rerurnpram.message = "支付失败"; } break; case "103": RuleWeixinpay weixinpay = new RuleWeixinpay(); i = weixinpay.insertweixinpay(OrderID, transactionnum, rejson["payUrl"].ToString(), DateTime.Now); if (i == 0) { rerurnpram.message = "支付失败"; } break; case "119": RuleJDpay ruleJDpay = new RuleJDpay(); rerurnpram.urlcode = rejson["payUrl"].ToString(); i = ruleJDpay.insertjdpay(OrderID, transactionnum, rejson["payUrl"].ToString(), DateTime.Now); if (i == 0) { rerurnpram.message = "支付失败"; } break; } } else { rerurnpram.message = rejson["message"].ToString(); messageLog.inserttblPayfailMessageLog("万通", "1550473045", rerurnpram.message, transactionnum, OrderID, DateTime.Now, result); } return(rerurnpram); }
/// <summary> /// 功能描述:判断参数中 有什么参数为Null /// 创建时间:2018-11-20 /// 创建 人:周文卿 /// </summary> /// <param name="pairs"></param> /// <returns></returns> public rerurnpram IsParmNull(Dictionary <object, object> pairs) { rerurnpram rerurnpram = new rerurnpram(); foreach (var key in pairs) { if (pairs[key.Key] == null) { rerurnpram.statecode = "40007"; rerurnpram.message = "参数" + key.Key.ToString() + "未填写"; break; } } return(rerurnpram); }
/// <summary> /// 异步通知时请求的方式 /// </summary> /// <param name="url"></param> /// <param name="postData"></param> /// <returns></returns> public string PostUrl(string url, string postData) { try { ChannelReturnresult returnresult = new ChannelReturnresult(); rerurnpram rerurnpram = new rerurnpram(); string result = ""; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "POST"; req.Timeout = 5000;//设置请求超时时间,单位为毫秒 req.ContentType = "application/json"; byte[] data = Encoding.UTF8.GetBytes(postData); req.ContentLength = data.Length; using (Stream reqStream = req.GetRequestStream()) { reqStream.Write(data, 0, data.Length); reqStream.Close(); } HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); Stream stream = resp.GetResponseStream(); //获取响应内容 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { result = reader.ReadToEnd(); } return(result); } catch (Exception e) { new InsertException(e.Message, "RulePayMethod", "PostUrl", "url:" + url + "参数:" + postData); return("error"); } }
public HttpResponseMessage testpay(string Amount, string PayType, string key, string MerchantId) { string result = string.Empty; RulePayMethod rulePay = new RulePayMethod(); payparameter payparameter = new payparameter(); RulePayBehavior behavior = new RulePayBehavior(); Dictionary <string, string> keys = new Dictionary <string, string>(); keys.Add("Amount", Amount); keys.Add("MerchantId", "100001"); keys.Add("Notifyurl", "http://120.78.210.41:8066/actionapi/AcceptInterface/testreq"); keys.Add("OrderID", "tx" + behavior.ram(1000000)); keys.Add("OrderTime", DateTime.Now.ToString()); keys.Add("PayType", PayType); keys.Add("ProductName", "小商品"); string sign = behavior.AsciiDesc(keys); sign = sign + "key=" + key; sign = behavior.EncryptionMd5(sign); payparameter.Amount = Amount; payparameter.MerchantId = MerchantId; payparameter.Notifyurl = "http://120.78.210.41:8066/actionapi/AcceptInterface/testreq"; payparameter.OrderID = keys["OrderID"]; payparameter.OrderTime = keys["OrderTime"]; payparameter.PayType = PayType; payparameter.ProductName = "小商品"; payparameter.Sign = sign; rerurnpram rerurnpram = rulePay.Islegitimate(payparameter); result = rule.JsonStrCode(rerurnpram.statecode, rerurnpram.message, rerurnpram.data, rerurnpram.urlcode); return(new HttpResponseMessage { Content = new StringContent(result, System.Text.Encoding.UTF8, "application/json") }); }
/// <summary> /// 功能描述:H5支付 /// 创建 人:周文卿 /// 创建时间:2018-11-20 /// </summary> /// <param name="payparameter">参数</param> /// <returns></returns> public HttpResponseMessage X_PayH5(payparameter payparameter) { string result = string.Empty; try { //首先判断商户号是否存在 RulePayMethod rulePay = new RulePayMethod(); rerurnpram rerurnpram = rulePay.Islegitimate(payparameter); result = rule.JsonStr(rerurnpram.statecode, rerurnpram.message, rerurnpram.data); return(new HttpResponseMessage { Content = new StringContent(result, System.Text.Encoding.UTF8, "application/json") }); } catch (Exception e) { //错误保存日志 throw new InsertException(e.Message, "Transaction", "LB_PayH5", payparameter.ToString()); } }
/// <summary> /// 功能描述:判断请求是否合法 /// 创建 人:周文卿 /// 创建时间:2018-11-20 /// </summary> /// <param name="payparameter"></param> /// <returns></returns> public rerurnpram Islegitimate(paysubparameter payparameter) { try { Dictionary <object, object> dict2 = new Dictionary <object, object>(); dict2 = PayBehavior.GetPropertiesboj <paysubparameter>(payparameter); rerurnpram rerurnpram = new rerurnpram(); //日志实体类 SysLogMsg sysLogMsg = new SysLogMsg(); string Retunr = ""; //判断是否有null的参数 rerurnpram = PayBehavior.IsParmNull(dict2); if (rerurnpram.message != "" && rerurnpram.message != null) { return(rerurnpram); } //获取IP CheckIP checkIP = new CheckIP(); string ip = checkIP.GetIP(); Dictionary <string, string> dict = new Dictionary <string, string>(); dict = PayBehavior.GetProperties <paysubparameter>(payparameter); //判断金额 if (!PayBehavior.tryint(payparameter.Amount)) { rerurnpram.statecode = "40005"; rerurnpram.message = "金额不正确!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PaySub"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "金额不正确:{'Amount':" + payparameter.Amount + "}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); } int outint = 0; string SecretKey = ""; string rateName = ""; RuletblAgentPay ruletblAgent = new RuletblAgentPay(); List <newtblSubroute> subroute = new List <newtblSubroute>(); subroute = ruletblAgent.IsRuleSub(out outint, payparameter.MerchantId, decimal.Parse(payparameter.Amount), payparameter.OrderID, "117", out SecretKey, out rateName, ip); switch (outint) { case 40001: rerurnpram.statecode = "40001"; rerurnpram.message = "未开户的商户!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PaySub"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "未开户的商户:{'Amount':" + payparameter.MerchantId + "}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); case 40008: rerurnpram.statecode = "40008"; rerurnpram.message = "订单号已存在!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PaySub"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "订单号已存在!"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); case 40003: rerurnpram.statecode = "40003"; rerurnpram.message = "路由未配置,请联系管理员!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PaySub"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "路由未配置,请联系管理员!"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); case 40009: rerurnpram.statecode = "40009"; rerurnpram.message = "账户余额不足!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PaySub"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "账户余额不足!"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); case 40011: rerurnpram.statecode = "40011"; rerurnpram.message = "IP地址受限!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PaySub"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "IP地址受限:{'IP':" + ip + "}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); } #region 判断Key值 //排序得到一个新的Dictionary string newdict = PayBehavior.AsciiDesc(dict); newdict += "key=" + SecretKey; //加密 string md5string = PayBehavior.EncryptionMd5(newdict); if (md5string != payparameter.Sign) { rerurnpram.statecode = "40002"; rerurnpram.message = "验签失败"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PaySub"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "验签失败:{'mysign':" + md5string + ",'sign':" + payparameter.Sign + "}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); } #endregion //根据权重 随机出路由信息 List <newtblSubroute> newList = PayBehavior.GetRandomList(subroute, 1); //渠道信息 RuleCommon common = new RuleCommon(); DataTable dt = common.GetQueryDate("", "tblChannelinformation", "1=1"); string fldRequestUrl = ""; //请求地址 string fldUpstreamSecretKey = ""; //上游分配的KEY值 string fldType = ""; //支付类型 string fldUpstreamMerchantID = ""; //上游ID string channel = ""; //渠道 bool fldState = false; //渠道状态 0是API,1是手工 decimal outamount = 0; //外扣金额 for (int i = 0; i < dt.Rows.Count; i++) { if (newList[0].fldPayType == dt.Rows[i]["fldPayType"].ToString() && newList[0].fldGatewaynumber == dt.Rows[i]["fldNum"].ToString()) { fldRequestUrl = dt.Rows[i]["fldRequestUrl"].ToString(); fldUpstreamSecretKey = dt.Rows[i]["fldUpstreamSecretKey"].ToString(); fldType = dt.Rows[i]["fldType"].ToString(); fldUpstreamMerchantID = dt.Rows[i]["fldUpstreamMerchantID"].ToString(); channel = dt.Rows[i]["fldNum"].ToString(); fldState = bool.Parse(dt.Rows[i]["fldState"].ToString()); outamount = decimal.Parse(dt.Rows[i]["fldbuckle"].ToString()); } } //判断银行名称是否正确 正确并且换成渠道所需要的银行名称 RuletblDictionaries ruletblDictionaries = new RuletblDictionaries(); string bankname = ruletblDictionaries.ValidateDictionaries(fldUpstreamMerchantID, payparameter.Bankname); if (bankname == "0") { rerurnpram.statecode = "40010"; rerurnpram.message = "不支持该银行"; rerurnpram.data = ""; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PaySub"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "不支持该银行:{'bankname':" + payparameter.Bankname + "}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); } dict["Bankname"] = bankname; string sign = ""; string orderid = ""; string url = ""; //处理参数 Dictionary <string, string> directory = PayBehavior.HandleParm(newList, dict, ref sign, ref orderid, ref url); //按照Ascii从小到大排序 得到一个字符串 string ascdict = PayBehavior.AsciiDesc(directory); rerurnpram.message = fldUpstreamSecretKey; ascdict = ascdict + "key=" + fldUpstreamSecretKey; //加密后的字符串 string encstring = ""; //判断加密方式 switch (newList[0].fldEncryptionWay) { case "md5": encstring = PayBehavior.EncryptionMd5(ascdict); break; case "shal": encstring = PayBehavior.Sha1Signature(ascdict); break; } Processingparameter processingparameter = new Processingparameter(); string por = ""; #region 根据各个通道 处理请求参数 switch (newList[0].fldGatewaynumber) { case "QJ_004": por = processingparameter.ProcessingQJ(directory, fldUpstreamSecretKey, outamount); break; case "HT_006": por = processingparameter.ProcessingHT(directory, fldUpstreamSecretKey, "1"); break; case "Y_007": por = processingparameter.ProcessingY(directory, fldUpstreamSecretKey); break; case "YD_010": por = processingparameter.ProcessingYDSub(directory, fldUpstreamSecretKey); break; case "ZC_008": por = processingparameter.ProcessingZC(directory, fldUpstreamSecretKey); break; case "HF_011": por = processingparameter.ProcessingHFSub(directory, fldUpstreamSecretKey); break; default: directory.Add(sign, encstring); por = processingparameter.Processing(directory); break; } #endregion RulePayRequest rulePayRequest = new RulePayRequest(); string fldPayState = ""; //请求代付 如果是手工代付 不请求 直接插入 1是手工 0是自动 if (!fldState) { //请求 switch (newList[0].fldGatewaynumber) { case "QJ_004": rerurnpram.message = rulePayRequest.PostUrl(fldRequestUrl, por, channel, fldUpstreamSecretKey, orderid); break; case "Y_007": case "HT_006": case "YD_010": case "ZC_008": case "HF_011": rerurnpram.message = rulePayRequest.HttpPostZF(fldRequestUrl, por, channel, fldUpstreamSecretKey, orderid); break; } fldPayState = "处理中"; } else { fldPayState = "待提交"; rerurnpram.message = "ok"; } //支付状态 if (rerurnpram.message == "ok") { rerurnpram.data = "S"; rerurnpram.statecode = "200"; rerurnpram.message = "请求成功"; DDYZ.Ensis.Presistence.DataEntity.tblAgentPay agentPay = new DDYZ.Ensis.Presistence.DataEntity.tblAgentPay(); agentPay.fldAutoID = 0; agentPay.fldCreateTime = DateTime.Now; agentPay.fldtransactionnum = PayBehavior.ram(1000000000); agentPay.fldChannelnum = orderid; agentPay.fldOrdernum = payparameter.OrderID; agentPay.fldMerchID = payparameter.MerchantId; agentPay.fldPayAmount = decimal.Parse(payparameter.Amount); agentPay.fldPayState = fldPayState; agentPay.fldServiceCharge = decimal.Parse(rateName); agentPay.fldActualAmount = decimal.Parse(payparameter.Amount); agentPay.fldAccountname = payparameter.Username; agentPay.fldBankCardId = payparameter.Bankaccount; agentPay.fldBankName = payparameter.Bankname; agentPay.fldChannelID = fldUpstreamMerchantID; agentPay.fldLaunchIP = ip; agentPay.fldNotice = "未通知"; agentPay.fldchangstautetime = DateTime.Now; agentPay.fldtransactiontime = DateTime.Now; agentPay.fldRtefundAmount = decimal.Parse(payparameter.Amount) + outamount; agentPay.fldBankType = "支行"; agentPay.fldSettlementAmount = 0; agentPay.fldBankbranch = payparameter.Bankbranch; agentPay.fldBankprovince = payparameter.Bankprovince; agentPay.fldBankcity = payparameter.Bankcity; agentPay.fldIdCard = "425648499545154614"; agentPay.fldBankTelephoneNo = "18997445161"; agentPay.fldCardType = "01"; RuletblAgentPay ruletblAgentPay = new RuletblAgentPay(); DataTable k = ruletblAgentPay.InserttblAgentPayUptblAcc(agentPay); if (k.Rows.Count > 0) { rerurnpram.statecode = "50000"; rerurnpram.message = "服务器出现错误,请联系管理员!"; return(rerurnpram); } } else { rerurnpram.data = "F"; rerurnpram.statecode = "500"; rerurnpram.message = "请求失败"; } return(rerurnpram); } catch (Exception e) { throw new InsertException(e.Message, "RulePayMethod", "Islegitimate", payparameter.ToString()); } }
/// <summary> /// 功能描述:判断请求是否合法 /// 创建 人:周文卿 /// 创建时间:2018-11-15 /// </summary> /// <param name="payparameter"></param> /// <returns></returns> public rerurnpram Islegitimate(payparameter payparameter) { string pramkey = ""; try { Dictionary <object, object> dict2 = new Dictionary <object, object>(); dict2 = PayBehavior.GetPropertiesboj <payparameter>(payparameter); rerurnpram rerurnpram = new rerurnpram(); //日志实体类 SysLogMsg sysLogMsg = new SysLogMsg(); string Retunr = ""; //判断是否有null的参数 rerurnpram = PayBehavior.IsParmNull(dict2); if (rerurnpram.message != "" && rerurnpram.message != null) { return(rerurnpram); } Dictionary <string, string> dict = new Dictionary <string, string>(); dict = PayBehavior.GetProperties <payparameter>(payparameter); //判断金额 if (!PayBehavior.tryint(payparameter.Amount)) { rerurnpram.statecode = "40005"; rerurnpram.message = "金额不正确!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PayH5"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "金额不正确:{'Amount':'" + payparameter.Amount + "'}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); } int outint = 0; string SecretKey = ""; string rateName = ""; DDYZ.Ensis.Rule.DataRule.RuletblOrdertable ordertable = new DDYZ.Ensis.Rule.DataRule.RuletblOrdertable(); List <newtblSubroute> subroutes = ordertable.IsRule(out outint, payparameter.MerchantId, decimal.Parse(payparameter.Amount), payparameter.OrderID, payparameter.PayType, out SecretKey, out rateName); switch (outint) { case 40001: rerurnpram.statecode = "40001"; rerurnpram.message = "未开户的商户!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PayH5"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "未开户的商户:{'MerchantId':'" + payparameter.MerchantId + "'}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); case 40008: rerurnpram.statecode = "40008"; rerurnpram.message = "订单号已存在!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PayH5"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "订单号已存在:{'OrderID':'" + payparameter.OrderID + "'}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); case 40003: rerurnpram.statecode = "40003"; rerurnpram.message = "路由未配置,请联系管理员!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PayH5"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "路由未配置,请联系管理员!"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); case 40012: rerurnpram.statecode = "40012"; rerurnpram.message = "费率未配置!"; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PayH5"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "费率未配置!"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); } #region 判断Key值 //排序得到一个新的Dictionary string newdict = PayBehavior.AsciiDesc(dict); newdict += "key=" + SecretKey; //加密 string md5string = PayBehavior.EncryptionMd5(newdict); pramkey = newdict; if (md5string != payparameter.Sign) { rerurnpram.statecode = "40002"; rerurnpram.message = "验签失败"; rerurnpram.data = ""; sysLogMsg.OperationTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sysLogMsg.MerchantId = payparameter.MerchantId; sysLogMsg.MethodName = "LB_PayH5"; sysLogMsg.Parameter = JsonHelper.SerializeObject(payparameter); sysLogMsg.Content = "验签失败:{'mysign':" + md5string + ",'sign':" + payparameter.Sign + "}"; Retunr = LogHelp.logMessage(sysLogMsg); LogHelp.warn(Retunr); return(rerurnpram); } #endregion List <newtblSubroute> newList = PayBehavior.GetRandomList(subroutes, 1); string sign = ""; string orderid = ""; string url = ""; //处理参数 Dictionary <string, string> directory = PayBehavior.HandleParm(newList, dict, ref sign, ref orderid, ref url); //按照Ascii从小到大排序 得到一个字符串 string ascdict = PayBehavior.AsciiDesc(directory); RuleCommon common = new RuleCommon(); DataTable dt = common.GetQueryDate("", "tblChannelinformation", "1=1"); string fldRequestUrl = ""; string fldUpstreamSecretKey = ""; string fldType = ""; string fldUpstreamMerchantID = ""; string channel = ""; //加上Key值 for (int i = 0; i < dt.Rows.Count; i++) { if (newList[0].fldPayType == dt.Rows[i]["fldPayType"].ToString() && newList[0].fldGatewaynumber == dt.Rows[i]["fldNum"].ToString()) { fldRequestUrl = dt.Rows[i]["fldRequestUrl"].ToString(); fldUpstreamSecretKey = dt.Rows[i]["fldUpstreamSecretKey"].ToString(); fldType = dt.Rows[i]["fldType"].ToString(); fldUpstreamMerchantID = dt.Rows[i]["fldUpstreamMerchantID"].ToString(); channel = dt.Rows[i]["fldNum"].ToString(); } } rerurnpram.message = fldUpstreamSecretKey; ascdict = ascdict + "key=" + fldUpstreamSecretKey; //加密后的字符串 string encstring = ""; //判断加密方式 switch (newList[0].fldEncryptionWay) { case "md5": encstring = PayBehavior.EncryptionMd5(ascdict); break; case "shal": encstring = PayBehavior.Sha1Signature(ascdict); break; } Processingparameter processingparameter = new Processingparameter(); string por = ""; CheckIP checkIP = new CheckIP(); string ip = checkIP.GetIP(); decimal amount = decimal.Parse(payparameter.Amount); string transactionnum = PayBehavior.ram(1000000000); RuleOldOrdertable ordertables = new RuleOldOrdertable(); #region 根据各个通道 处理请求参数 switch (newList[0].fldGatewaynumber) { case "QJ_004": por = processingparameter.ProcessingQJ(directory, fldUpstreamSecretKey, 0); break; case "YD_010": por = processingparameter.ProcessingYD(directory, fldUpstreamSecretKey); break; case "Y_007": por = processingparameter.ProcessingY(directory, fldUpstreamSecretKey); break; case "RUI_005": por = processingparameter.ProcessingRUI(directory, fldUpstreamSecretKey); break; case "HT_006": por = processingparameter.ProcessingHT(directory, fldUpstreamSecretKey, "0"); break; case "ZC_008": por = processingparameter.ProcessingZC(directory, fldUpstreamSecretKey); break; case "WM_009": por = processingparameter.ProcessingWM(directory, fldUpstreamSecretKey); break; case "HF_011": por = processingparameter.ProcessingHF(directory, fldUpstreamSecretKey); break; case "XF_012": por = processingparameter.ProcessingXF(directory, fldUpstreamSecretKey); break; default: directory.Add(sign, encstring); por = processingparameter.Processing(directory); break; } #endregion RulePayRequest rulePayRequest = new RulePayRequest(); ////请求 switch (newList[0].fldGatewaynumber) { case "RUI_005": case "HT_006": case "Y_007": case "ZC_008": case "WM_009": case "YD_010": case "HF_011": //case "XF_012": rerurnpram = rulePayRequest.HttpPost(fldRequestUrl, por, channel, payparameter.PayType, transactionnum, payparameter.OrderID); break; case "XF_012": rerurnpram = rulePayRequest.trt(fldRequestUrl, por, channel, payparameter.PayType, transactionnum, payparameter.OrderID); break; default: rerurnpram = rulePayRequest.PostUrl(fldRequestUrl, por, payparameter.PayType, channel, transactionnum, payparameter.OrderID); break; } if (rerurnpram.message == "支付中") { rerurnpram.message = "支付中"; rerurnpram.statecode = "200"; rerurnpram.data = url + "?OrderID=" + payparameter.OrderID + "&tid=" + transactionnum; } else { rerurnpram.message = "支付失败"; rerurnpram.urlcode = ""; rerurnpram.statecode = "500"; } DDYZ.Ensis.Presistence.DataEntity.tblOrdertable tbl = new DDYZ.Ensis.Presistence.DataEntity.tblOrdertable(); tbl.fldCreatetime = DateTime.Now; tbl.fldtransactionnum = transactionnum; tbl.fldChannelnum = orderid; tbl.fldOrdernum = payparameter.OrderID; tbl.fldOrderAmount = amount; tbl.fldRtefundAmount = amount; tbl.fldMerchID = payparameter.MerchantId; tbl.fldOrederdetailed = payparameter.ProductName; tbl.fldRateCode = payparameter.PayType; tbl.fldRateName = rateName; tbl.fldChannelType = fldType; tbl.fldChannelID = fldUpstreamMerchantID; tbl.fldOrderInvalid = DateTime.Now; tbl.fldNotice = payparameter.Notifyurl; tbl.fldLaunchIP = ip; tbl.fldStaute = rerurnpram.message; tbl.fldchangstautetime = DateTime.Now; tbl.fldtransactiontime = DateTime.Now; tbl.fldSettlement = amount; tbl.fldServiceCharge = 0; int index = ordertables.Insert(tbl); if (index > 0) { } else { rerurnpram.message = "支付失败"; rerurnpram.urlcode = ""; rerurnpram.statecode = "500"; } return(rerurnpram); } catch (Exception e) { throw new InsertException(e.Message, "RulePayMethod", "Islegitimate", pramkey); } }
public rerurnpram trt(string url, string postData, string code, string channel, string transactionnum, string orderid) { HttpWebRequest request = null; Stream webStream = null; HttpWebResponse response = null; StreamReader reader = null; string responseString = ""; try { byte[] bf = Encoding.UTF8.GetBytes(postData); request = WebRequest.Create(url) as HttpWebRequest; request.Method = "POST"; request.ServicePoint.Expect100Continue = false; request.Timeout = 1000 * 3; request.ContentType = "application/json"; request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version11; request.ContentLength = bf.Length; webStream = request.GetRequestStream(); webStream.Write(bf, 0, bf.Length); response = (HttpWebResponse)request.GetResponse(); reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); responseString = reader.ReadToEnd(); } catch (Exception ex) { throw ex; } finally { request.Abort(); request = null; if (webStream != null) { webStream.Close(); } if (reader != null) { reader.Close(); } if (response != null) { response.Close(); response = null; } } //解析 JavaScriptSerializer jsonConvert = new JavaScriptSerializer(); dynamic responseObj = jsonConvert.DeserializeObject(responseString); if (responseObj is Dictionary <string, object> ) { Dictionary <string, object> jsonobj = (Dictionary <string, object>)responseObj; } rerurnpram rerurnpram = new rerurnpram(); return(rerurnpram); }