コード例 #1
0
        public async Task <UnifiedOrderReturnModel> PayUnifiedorder(string Platid, string Money, string Userid, string Paytype)
        {
            //Response.Redirect("//www.baidu.com",true);
            var    mchModel  = PayMchBll._.GetModelAsync(d => d.Plat_id == Convert.ToInt32(Platid)).Result.data;
            var    platModel = PayPlatBll._.GetModelAsync(p => p.Plat_id == Convert.ToInt32(Platid)).Result.data;
            string mchid     = mchModel.Mch_id;
            //string orderid = "Paytest" + DateTime.Now.ToString("yyyyMMddHHmmss");
            string orderid            = DateTime.Now.ToString("yyyyMMddHHmmss");
            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();

            r = await PayOrderBll._.Unifiedorder(mchid, orderid, "body", Convert.ToInt32(Paytype), Money, "attach", "ip", "callbackurl", "callbackurl");

            //HttpContext.Response.Redirect(r.Content,true);
            return(r);
        }
コード例 #2
0
        public async Task <UnifiedOrderReturnModel> Unifiedorder([FromForm] SettleOrderModel settleOrder)
        {
            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

            para.Add("appid", settleOrder.AppId); //约定好的id
            para.Add("mchid", settleOrder.MchId); //传输过来的商户标识ID
            para.Add("orderid", settleOrder.OrderId);
            para.Add("bank_name", settleOrder.Bank_Name);
            para.Add("bank_branch", settleOrder.Bank_Branch);
            para.Add("bank_card_number", settleOrder.Bank_Card_Number);
            para.Add("bank_account", settleOrder.Bank_Account);
            para.Add("amount", settleOrder.Amount);
            para.Add("attach", settleOrder.Attach);
            para.Add("ip", settleOrder.Ip);
            para.Add("callbackurl", settleOrder.CallBackUrl);
            para.Add("notifyurl", settleOrder.NotifyUrl);

            string temp = string.Format("{0}&key={1}", OnlineSettle.GetParamSrc(para), WebConfig.MchKey);

            Dos.Common.LogHelper.Debug(temp);

            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();

            if (settleOrder.AppId != WebConfig.MchId)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "商户号不存在";
                return(r);
            }

            string cusSign = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8");

            if (cusSign.ToLower() != settleOrder.Sign.ToLower())
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "签名错误";
                return(r);
            }

            return(await SettleOrderBll._.Unifiedorder(settleOrder.AppId, settleOrder.MchId, settleOrder.OrderId, settleOrder.Bank_Name, settleOrder.Bank_Branch, settleOrder.Bank_Card_Number, settleOrder.Bank_Account, settleOrder.Amount, settleOrder.Attach, settleOrder.Ip, settleOrder.CallBackUrl, settleOrder.NotifyUrl));
        }
コード例 #3
0
ファイル: PayController.cs プロジェクト: kucenchen/ASP.NET
        public async Task <UnifiedOrderReturnModel> Unifiedorder([FromForm] PayOrderModel payOrder)
        {
            //string mchid, string orderid, string body, int paytype, string amount, string attach, string ip, string callbackurl, string notifyurl, string sign
            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

            para.Add("mchid", payOrder.MchId);
            para.Add("orderid", payOrder.OrderId);
            para.Add("body", payOrder.Body);
            para.Add("paytype", payOrder.PayType.ToString());
            para.Add("amount", payOrder.Amount);
            para.Add("attach", payOrder.Attach);
            para.Add("ip", payOrder.Ip);
            para.Add("callbackurl", payOrder.CallBackUrl);
            para.Add("notifyurl", payOrder.NotifyUrl);

            string temp = string.Format("{0}&key={1}", OnlinePay.GetParamSrc(para), WebConfig.MchKey);

            Dos.Common.LogHelper.Debug(temp);

            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();

            if (payOrder.MchId != WebConfig.MchId)
            {
                Dos.Common.LogHelper.Debug("商户号不存在");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "商户号不存在";
                return(r);
            }
            string cusSign = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8");

            if (cusSign.ToLower() != payOrder.Sign.ToLower())
            {
                Dos.Common.LogHelper.Debug("签名错误");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "签名错误";
                return(r);
            }
            return(await PayOrderBll._.Unifiedorder(payOrder.MchId, payOrder.OrderId, payOrder.Body, payOrder.PayType, payOrder.Amount, payOrder.Attach, payOrder.Ip, payOrder.CallBackUrl, payOrder.NotifyUrl));
        }
コード例 #4
0
ファイル: SettleOrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <summary>
        /// 统一下单
        /// </summary>
        /// <param name="mchid"></param>
        /// <param name="orderid"></param>
        /// <param name="body"></param>
        /// <param name="paytype"></param>
        /// <param name="amount"></param>
        /// <param name="attach"></param>
        /// <param name="ip"></param>
        /// <param name="callbackurl"></param>
        /// <param name="notifyurl"></param>
        /// <param name="sign"></param>
        /// <returns></returns>
        public async Task <UnifiedOrderReturnModel> Unifiedorder(string appid, string mchid, string orderid, string Bank_name, string Bank_branch, string Bank_card_number, string Bank_account, string amount, string attach, string ip, string callbackurl, string notifyurl)
        {
            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();

            if (appid != WebConfig.MchId)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "约定的appid错误";
                return(r);
            }


            decimal fee = 0;

            decimal.TryParse(amount, out fee);

            if (fee <= 0)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "打款金额必须大于0";
                return(r);
            }

            //SettleMch m = OnlineSettle.MchList.FindAll(pp => pp.Nullity == false && ("" + pp.BankList + ",").Contains("," + Bank_name.Trim() + ",")
            // && (pp.Max_money == 0 || pp.Max_money >= fee) && (pp.Min_money == 0 || pp.Min_money <= fee)).OrderBy(i => Guid.NewGuid()).FirstOrDefault();
            SettleMch m = OnlineSettle.MchList.FindAll(pp => pp.Id == Convert.ToInt32(mchid) && pp.Nullity == false && ("," + pp.BankList + ",").Contains("," + Bank_name.Trim() + ",") &&
                                                       (pp.Max_money >= fee) && (pp.Min_money <= fee)).OrderBy(i => Guid.NewGuid()).FirstOrDefault();

            if (m == null)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "平台没有可用的打款渠道";
                return(r);
            }

            SettlePlat p = OnlineSettle.GetPlat(m.Plat_id);

            if (p == null)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "平台支付渠道有误";
                return(r);
            }

            if (DbContext._.Db.Exists <SettleOrder>(o => o.Order_id == orderid))
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "订单号已经存在";
                return(r);
            }

            SettleOrder order = new SettleOrder();

            order.Order_id         = orderid;
            order.Plat_order_id    = "";
            order.Mch_id           = m.Id;
            order.Order_amount     = fee;
            order.Pay_amount       = 0;
            order.Bank_name        = Bank_name.Trim();
            order.Bank_branch      = Bank_branch.Trim();
            order.Bank_card_number = Bank_card_number.Trim();
            order.Bank_account     = Bank_account.Trim();
            order.Status           = 0;
            order.Callback_url     = callbackurl;
            order.Notify_url       = notifyurl;
            order.Create_time      = DateTime.Now.ToTimeStamp();
            order.Update_time      = order.Create_time;
            order.Finish_time      = order.Update_time;
            order.Notify_status    = 0;
            order.Notify_lasttime  = order.Update_time;
            order.Notify_times     = 0;
            order.Attach           = attach;

            bool isSuccess = false;

            try
            {
                isSuccess = DbContext._.Db.Insert <SettleOrder>(order) > 0;
            }
            catch (Exception e)
            {
                string err = e.Message;
                throw;
            }

            OnlineSettle onlinepay = (OnlineSettle)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m);


            r = await onlinepay.Unifiedorder(orderid, Bank_name, Bank_branch, Bank_card_number, Bank_account, fee, ip, attach);

            if (r.Type != 0)
            {
                order.Plat_order_id = r.SerialNumber;
                order.Pay_amount    = decimal.Parse(r.RealPrice);
                order.Returnmsg     = r.Content;
            }
            return(r);
        }
コード例 #5
0
ファイル: PayOrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <summary>
        /// 统一下单
        /// </summary>
        /// <param name="mchid"></param>
        /// <param name="orderid"></param>
        /// <param name="body"></param>
        /// <param name="paytype"></param>
        /// <param name="amount"></param>
        /// <param name="attach"></param>
        /// <param name="ip"></param>
        /// <param name="callbackurl"></param>
        /// <param name="notifyurl"></param>
        /// <param name="sign"></param>
        /// <returns></returns>
        public async Task <UnifiedOrderReturnModel> Unifiedorder(string mchid, string orderid, string body, int paytype, string amount, string attach, string ip, string callbackurl, string notifyurl)
        {
            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();
            //if (mchid != WebConfig.MchId)
            //{
            //    Dos.Common.LogHelper.Debug("商户号不存在");
            //    r.Type = PayReturnTypeEnum.Err;
            //    r.Content = "商户号不存在";
            //    return r;
            //}

            decimal fee = 0;

            decimal.TryParse(amount, out fee);

            if (fee <= 0)
            {
                Dos.Common.LogHelper.Debug("支付金额必须大于0");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "支付金额必须大于0";
                return(r);
            }

            PayMch payMchModel = OnlinePay.MchList.FindAll(pp => pp.Nullity == false && ("," + pp.Open_time + ",").Contains("," + DateTime.Now.Hour.ToString() + ",") && ("," + pp.Open_pay_type_list + ",").Contains("," + paytype + ",") && ("," + pp.Pay_money_list + ",").Contains("," + amount + ",")).OrderBy(i => Guid.NewGuid()).FirstOrDefault();

            if (payMchModel == null)
            {
                Dos.Common.LogHelper.Debug("平台没有可用的支付渠道");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "平台没有可用的支付渠道";
                return(r);
            }
            //1:随机加减0-9分 2:随机加减0-9元
            if (payMchModel.Israndom == 1)
            {
                int randomNum = new Random().Next(-9, 10);
                if (randomNum != 0)
                {
                    fee += Convert.ToDecimal(randomNum) / 100;
                }
            }
            else if (payMchModel.Israndom == 2)
            {
                int randomNum = new Random().Next(-9, 10);
                if (randomNum != 0)
                {
                    fee += Convert.ToDecimal(randomNum);
                }
            }

            if (fee <= 0)
            {
                Dos.Common.LogHelper.Debug("支付金额必须大于0  2");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "支付金额必须大于0";
                return(r);
            }

            PayPlat payPlatModel = OnlinePay.GetPlat(payMchModel.Plat_id);

            if (payPlatModel == null)
            {
                Dos.Common.LogHelper.Debug("平台支付渠道有误");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "平台支付渠道有误";
                return(r);
            }

            if (DbContext._.Db.Exists <PayOrder>(d => d.Order_id == orderid.SqlFilters()))
            {
                Dos.Common.LogHelper.Debug("订单号已经存在");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "订单号已经存在";
                return(r);
            }

            PayOrder order = new PayOrder();

            order.Order_id        = orderid;
            order.Plat_order_id   = "";
            order.Mch_id          = payMchModel.Id;
            order.Order_amount    = fee;
            order.Pay_amount      = 0;
            order.Pay_type        = paytype;
            order.Status          = 0;
            order.Callback_url    = callbackurl;
            order.Notify_url      = notifyurl;
            order.Create_time     = DateTime.Now.ToTimeStamp();
            order.Update_time     = order.Create_time;
            order.Finish_time     = order.Update_time;
            order.Notify_status   = 0;
            order.Notify_lasttime = order.Update_time;
            order.Notify_times    = 0;
            order.Attach          = attach;
            bool isSuccess = false;

            try
            {
                isSuccess = DbContext._.Db.Insert <PayOrder>(order) > 0;
            }
            catch (Exception e)
            {
                Dos.Common.LogHelper.Debug("创建订单失败:" + e.Message);
                string err = e.Message;
                throw;
            }

            if (!isSuccess)
            {
                Dos.Common.LogHelper.Debug("创建订单失败02");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "创建订单失败";
                return(r);
            }

            try
            {
                OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(payPlatModel.Plat_class), payPlatModel, payMchModel);
                r = await onlinepay.Unifiedorder(orderid, paytype.ToString(), fee, ip, body, attach);
            }
            catch (Exception ex)
            {
                string err = ex.Message;
                Dos.Common.LogHelper.Debug("选用支付API接口失败:" + err);
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = err;
                return(r);
            }

            if (r.Type != 0)
            {
                order.Plat_order_id = r.SerialNumber;
                order.Pay_amount    = decimal.Parse(r.RealPrice);
            }
            return(r);
        }