Example #1
0
        /// <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);
        }
Example #2
0
        /// <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 <UnifiedorderReturn> Unifiedorder(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)
        {
            UnifiedorderReturn r = new UnifiedorderReturn();

            if (mchid != DB.MchId)
            {
                r.Type    = PayReturnType.Err;
                r.Content = "商户号不存在";
                return(r);
            }


            decimal fee = 0;

            decimal.TryParse(amount, out fee);

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

            Settle_mch 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()).First();

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

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

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

            if (DB.Context.Exists <Settle_order>(o => o.Order_id == orderid))
            {
                r.Type    = PayReturnType.Err;
                r.Content = "订单号已经存在";
                return(r);
            }

            Settle_order order = new Settle_order();

            order.Order_id         = orderid;
            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;


            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;
            }

            DB.Context.Save(order);
            return(r);
        }