示例#1
0
        /// <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);
        }
示例#4
0
        /// <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);
            }
        }
示例#5
0
        /// <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);
        }
示例#7
0
        /// <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);
        }
示例#8
0
        /// <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());
            }
        }
示例#11
0
        /// <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());
            }
        }
示例#12
0
        /// <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);
            }
        }
示例#13
0
        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);
        }