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, string sign) { SortedDictionary <string, string> para = new SortedDictionary <string, string>(); para.Add("mchid", mchid); para.Add("orderid", orderid); para.Add("bank_name", bank_name); para.Add("bank_branch", bank_branch); para.Add("bank_card_number", bank_card_number); para.Add("bank_account", bank_account); para.Add("amount", amount); para.Add("attach", attach); para.Add("ip", ip); para.Add("callbackurl", callbackurl); para.Add("notifyurl", notifyurl); string temp = string.Format("{0}&key={1}", OnlineSettle.GetParamSrc(para), DB.MchKey); Dos.Common.LogHelper.Debug(temp); UnifiedorderReturn r = new UnifiedorderReturn(); if (mchid != DB.MchId) { r.Type = PayReturnType.Err; r.Content = "商户号不存在"; return(r); } temp = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8"); if (temp != sign) { r.Type = PayReturnType.Err; r.Content = "签名错误"; return(r); } return(await Settle_OrderBll.Instance.Unifiedorder(mchid, orderid, bank_name, bank_branch, bank_card_number, bank_account, amount, attach, ip, callbackurl, 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 <UnifiedorderReturn> Unifiedorder(string mchid, string orderid, string body, int paytype, 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); } Pay_mch m = null; try { m = 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()).First(); } catch (Exception ex) { string b = ex.ToString(); } if (m == null) { r.Type = PayReturnType.Err; r.Content = "平台没有可用的支付渠道"; return(r); } Pay_plat p = OnlinePay.GetPlat(m.Plat_id); if (p == null) { r.Type = PayReturnType.Err; r.Content = "平台支付渠道有误"; return(r); } if (DB.Context.Exists <Pay_order>(o => o.Order_id == orderid)) { r.Type = PayReturnType.Err; r.Content = "订单号已经存在"; return(r); } Pay_order order = new Pay_order(); order.Order_id = orderid; order.Mch_id = m.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; order.Attach(EntityState.Added); OnlinePay onlinepay = null; try { string vDllName = "PayProject"; //System.Reflection.Assembly tempAssembly = System.Reflection.Assembly.LoadFrom(vDllName); System.Reflection.Assembly tempAssembly = System.Reflection.Assembly.Load(vDllName); //Type _type = Type.GetType("PayProject.Pay." + p.Plat_class); Type _type = tempAssembly.GetType("PayProject.Pay." + p.Plat_class); onlinepay = (OnlinePay)Activator.CreateInstance(_type); onlinepay.setInfo(p.Plat_id, m.Mch_id); //onlinepay = (OnlinePay)tempAssembly.CreateInstance("PayProject.Pay." + p.Plat_class); // onlinepay = (OnlinePay)Activator.CreateInstance(typeof(plat_class), new object[] { p.Plat_id, m.Mch_id }); } catch (Exception ex) { string a = ex.ToString(); } r = await onlinepay.Unifiedorder(orderid, paytype.ToString(), fee, ip, body, attach); if (r.Type != 0) { order.Plat_order_id = r.SerialNumber; order.Pay_amount = decimal.Parse(r.RealPrice); } DB.Context.Save(order); 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 <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); }