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