public async Task <QueryReturnModel> Query(string mchid, string orderid, string sign) { QueryReturnModel r = new QueryReturnModel(); SortedDictionary <string, string> para = new SortedDictionary <string, string>(); para.Add("mchid", mchid); para.Add("orderid", orderid); string temp = string.Format("{0}&key={1}", OnlinePay.GetParamSrc(para), WebConfig.MchKey); Dos.Common.LogHelper.Debug(temp); if (mchid != WebConfig.MchId) { Dos.Common.LogHelper.Debug(" Query 商户号不存在"); r.ReturnMsg = "商户号不存在"; return(r); } string cusSign = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8"); if (cusSign.ToLower() != sign.ToLower()) { Dos.Common.LogHelper.Debug(" Query 签名错误"); r.ReturnMsg = "签名错误"; return(r); } return(await PayOrderBll._.Query(mchid, orderid)); }
/// <summary> /// 通知接口 /// </summary> /// <param name="pid"></param> /// <param name="mid"></param> /// <param name="Request"></param> /// <returns></returns> public async Task <NotifyReturn> Notify(int pid, int mid, Microsoft.AspNetCore.Http.HttpRequest Request) { Pay_plat p = OnlinePay.GetPlat(pid); Pay_mch m = OnlinePay.GetMch(mid); OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m); NotifyReturn r = await onlinepay.Notify(Request); if (r.IsCheck) { if (r.IsPay) { Pay_order order = DB.Context.From <Pay_order>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault(); if (order != null && !string.IsNullOrEmpty(order.Order_id)) { if (order.Status == 0) { order.Status = 1; order.Finish_time = DateTime.Now.ToTimeStamp(); order.Pay_amount = r.Totalfee; order.Notify_status = 0; order.Notify_times = 0; order.Notify_lasttime = DateTime.Now.ToTimeStamp(); DB.Context.Save(order); } } } return(r); } else { return(r); } }
public async Task <QueryReturn> Query(string mchid, string orderid, string sign) { QueryReturn r = new QueryReturn(); SortedDictionary <string, string> para = new SortedDictionary <string, string>(); para.Add("mchid", mchid); para.Add("orderid", orderid); string temp = string.Format("{0}&key={1}", OnlinePay.GetParamSrc(para), DB.MchKey); Dos.Common.LogHelper.Debug(temp); if (mchid != DB.MchId) { r.ReturnMsg = "商户号不存在"; return(r); } temp = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8"); if (temp != sign) { r.ReturnMsg = "签名错误"; return(r); } return(await Pay_OrderBll.Instance.Query(mchid, orderid)); }
/// <summary> /// 回调接口 /// </summary> /// <param name="pid"></param> /// <param name="mid"></param> /// <param name="Request"></param> /// <param name="Response"></param> /// <returns></returns> public async Task <NotifyReturnModel> CallBack(int pid, int mid, Microsoft.AspNetCore.Http.HttpRequest Request, Microsoft.AspNetCore.Http.HttpResponse Response) { PayPlat p = OnlinePay.GetPlat(pid); PayMch m = OnlinePay.GetMch(mid); OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m); NotifyReturnModel r = await onlinepay.CallBack(Request); if (r.IsCheck) { if (r.IsPay) { PayOrder order = DbContext._.Db.From <PayOrder>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault(); if (order != null && string.IsNullOrEmpty(order.Order_id)) { if (order.Status == 0) { order.Attach(EntityState.Modified); order.Status = 1; order.Finish_time = DateTime.Now.ToTimeStamp(); order.Pay_amount = r.Totalfee; order.Notify_status = 0; order.Notify_times = 0; order.Notify_lasttime = DateTime.Now.ToTimeStamp(); DbContext._.Db.Save(order); } } } } if (string.IsNullOrEmpty(r.OrderNumber)) { PayOrder order = DbContext._.Db.From <PayOrder>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault(); if (order != null && !string.IsNullOrEmpty(order.Order_id) && !string.IsNullOrEmpty(order.Callback_url)) { SortedDictionary <string, string> para = new SortedDictionary <string, string>(); para.Add("mchid", WebConfig.MchId); para.Add("orderid", order.Order_id); para.Add("serialid", order.Plat_order_id); para.Add("amount", order.Pay_amount.ToString()); para.Add("attach", order.Attach); para.Add("status", order.Status.ToString()); string sign = string.Format("{0}&key={1}", OnlinePay.GetParamSrc(para), WebConfig.MchKey); sign = Dos.Common.EncryptHelper.MD5EncryptWeChat(sign, "utf-8"); para.Add("sign", sign); Response.Redirect(string.Format("{0}?{1}", order.Callback_url, OnlinePay.GetParamSrc(para))); } } return(r); }
/// <summary> /// 通知接口 /// </summary> /// <param name="pid"></param> /// <param name="mid"></param> /// <param name="Request"></param> /// <returns></returns> public async Task <NotifyReturnModel> Notify(int pid, int mid, Microsoft.AspNetCore.Http.HttpRequest Request) { NotifyReturnModel r = null; try { PayPlat p = OnlinePay.GetPlat(pid); PayMch m = OnlinePay.GetMch(mid); OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m); r = await onlinepay.Notify(Request); } catch (Exception ex) { Dos.Common.LogHelper.Debug("第三方回调初始化失败:" + ex.Message); throw ex; } if (r.IsCheck) { if (r.IsPay) { PayOrder order = DbContext._.Db.From <PayOrder>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault(); if (order != null && !string.IsNullOrEmpty(order.Order_id)) { if (order.Status == 0) { order.Attach(EntityState.Modified); order.Status = 1; order.Finish_time = DateTime.Now.ToTimeStamp(); order.Pay_amount = r.Totalfee; order.Notify_status = 0; order.Notify_times = 0; order.Notify_lasttime = DateTime.Now.ToTimeStamp(); order.Plat_order_id = r.SerialNumber; int res = DbContext._.Db.Save(order); } } } return(r); } else { return(r); } }
public async Task <UnifiedorderReturn> Unifiedorder(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", mchid); para.Add("orderid", orderid); para.Add("body", body); para.Add("paytype", paytype.ToString()); 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}", OnlinePay.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 Pay_OrderBll.Instance.Unifiedorder(mchid, orderid, body, paytype, amount, attach, ip, callbackurl, 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)); }
protected void Button1_Click(object sender, EventArgs e) { this.Label1.Text = ""; this.Label2.Text = ""; string alipayPaymentNumber = ""; string returnDescription = ""; OnlinePay pay = new OnlinePay(); DataTable table = new Views.V_UserPayDetails().Open("ID, Name, DateTime, Money, PayType, FormalitiesFees, UserID", "Result = 1", ""); double num2 = 0.0; foreach (DataRow row in table.Rows) { alipayPaymentNumber = ""; if ((pay.Query(row["PayType"].ToString().Trim(), row["ID"].ToString(), ref alipayPaymentNumber, ref returnDescription) != 0) && (returnDescription == "等待买家付款")) { num2 += _Convert.StrToDouble(row["Money"].ToString(), 0.0); string text = this.Label1.Text; this.Label1.Text = text + "用户名:" + row["Name"].ToString() + ", 用户ID:" + row["UserID"].ToString() + ", 系统交易号:" + row["ID"].ToString() + ", 金额:" + row["Money"].ToString() + "<br />"; } } this.Label2.Text = "合计总金额:" + num2.ToString(); }
/// <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); }
public async Task <string> SendNotify(string orderid) { Pay_order o = DB.Context.From <Pay_order>().Where(p => p.Order_id == orderid).First(); if (o == null || o.Order_id != orderid) { return("订单不存在"); } if (o.Notify_url.Length < 7) { return("订单通知地址不误"); } SortedDictionary <string, string> para = new SortedDictionary <string, string>(); para.Add("mchid", DB.MchId); para.Add("orderid", o.Order_id); para.Add("serialid", o.Plat_order_id); para.Add("amount", o.Pay_amount.ToString()); para.Add("attach", o.Attach); para.Add("status", o.Status.ToString()); string sign = string.Format("{0}&key={1}", OnlinePay.GetParamSrc(para), DB.MchKey); sign = Dos.Common.EncryptHelper.MD5EncryptWeChat(sign, "utf-8"); para.Add("sign", sign); string msg = Task.Run(() => { string r; try { r = Dos.Common.HttpHelper.Post( new Dos.Common.HttpParam { Url = o.Notify_url, Encoding = System.Text.Encoding.UTF8, ParamType = Dos.Common.EnumHelper.HttpParamType.Form, GetParam = para } ); } catch (Exception ee) { r = ee.ToString(); } return(r); }).Result; if (o.Notify_status < 2) { if (msg == "ok") { o.Notify_status = 2; } else { o.Notify_status = 1; } if (o.Notify_times == null) { o.Notify_times = 0; } o.Notify_times = o.Notify_times + 1; o.Notify_lasttime = DateTime.Now.ToTimeStamp(); if (o.Notify_status != 2) { switch (o.Notify_times) { case 1: Publish(DB.MchId, o.Order_id, 60); break; //1分钟后再次通知 case 2: Publish(DB.MchId, o.Order_id, 300); break; //5分钟后再次通知 case 3: Publish(DB.MchId, o.Order_id, 900); break; //15分钟后再次通知 case 4: Publish(DB.MchId, o.Order_id, 7200); break; //2小时后再次通知 case 5: Publish(DB.MchId, o.Order_id, 21600); break; //6小时后再次通知 default: break; } } DB.Context.Save(o); } return(msg); }
/// <summary> /// 查询接口 /// </summary> /// <param name="mchid"></param> /// <param name="orderid"></param> /// <param name="sign"></param> /// <returns></returns> public async Task <QueryReturn> Query(string mchid, string orderid) { QueryReturn r = new QueryReturn(); if (mchid != DB.MchId) { r.ReturnMsg = "商户号不存在"; return(r); } Pay_order order = DB.Context.From <Pay_order>().Where(p => p.Order_id == orderid).ToFirstDefault(); if (order == null || string.IsNullOrEmpty(order.Order_id)) { r.ReturnMsg = "订单不存在"; return(r); } if (order.Status == 1) { r.ReturnMsg = "ok"; r.IsPay = true; r.OrderNumber = order.Order_id; r.SerialNumber = order.Plat_order_id; r.Totalfee = order.Pay_amount; r.Attach = order.Attach; return(r); } else { Pay_mch mch = OnlinePay.GetMch(order.Mch_id); if (mch == null) { r.ReturnMsg = "平台商户信息错误"; return(r); } Pay_plat plat = OnlinePay.GetPlat(mch.Plat_id); if (plat == null) { r.ReturnMsg = "平台渠道信息错误"; return(r); } OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(plat.Plat_class), plat, mch); r = await onlinepay.OrderQuery(order.Order_id); if (r.ReturnMsg == "ok" && r.IsPay) { order.Status = 1; if (r.Totalfee > 0) { order.Pay_amount = r.Totalfee; } order.Finish_time = DateTime.Now.ToTimeStamp(); DB.Context.Save(order); } return(r); } }
protected void g_ItemCommand(object source, DataGridCommandEventArgs e) { if (((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) || (e.Item.ItemType == ListItemType.EditItem)) { string str6; int num = -9999; long userID = _Convert.StrToLong(e.Item.Cells[9].Text, 0L); string text = e.Item.Cells[10].Text; double money = _Convert.StrToDouble(e.Item.Cells[3].Text, 0.0); double formalitiesFees = _Convert.StrToDouble(e.Item.Cells[5].Text, 0.0); string paymentNumber = e.Item.Cells[8].Text; string payBank = this.getBankName(text); _Convert.StrToDateTime(e.Item.Cells[2].Text, DateTime.Now.ToString("yyyyMMdd")); string str4 = _Convert.StrToDateTime(e.Item.Cells[2].Text, DateTime.Now.ToString("yyyyMMdd")).ToString("yyyyMMdd"); int returnValue = -1; string returnDescription = ""; if ((e.CommandName == "Query") && ((str6 = text.Split(new char[] { '_' })[0].ToUpper()) != null)) { if (str6 == "ALIPAY") { string alipayPaymentNumber = ""; OnlinePay pay = new OnlinePay(); try { num = pay.Query(e.Item.Cells[10].Text.Trim(), paymentNumber, ref alipayPaymentNumber, ref returnDescription); } catch { JavaScript.Alert(this.Page, "查询失败,可能是网络通讯故障。请重试一次。"); return; } if (num < 0) { JavaScript.Alert(this.Page, "支付号为 " + paymentNumber + " 的支付记录没有充值成功,描述:" + returnDescription); return; } string memo = "系统交易号:" + paymentNumber + ",支付宝交易号:" + alipayPaymentNumber; returnDescription = ""; if (Procedures.P_UserAddMoney(base._Site.ID, userID, money, formalitiesFees, paymentNumber, payBank, memo, ref returnValue, ref returnDescription) < 0) { JavaScript.Alert(this.Page, "数据库读写错误"); return; } if (returnValue < 0) { JavaScript.Alert(this.Page, returnDescription); return; } JavaScript.Alert(this.Page, "此笔充值记录已到帐并已处理成功!"); } else if (str6 == "51ZFK") { this.frmmain.Attributes.Add("src", "../Home/Room/OnlinePay/ZhiFuKa/PayQuery.aspx?sdcustomno=" + paymentNumber); } else if (str6 == "TENPAY") { this.frmmain.Attributes.Add("src", "../Home/Room/OnlinePay/Tenpay/PayQuery.aspx?sp_billno=" + paymentNumber + "&date=" + str4); } else if (str6 == "007KA") { this.frmmain.Attributes.Add("src", "../Home/Room/OnlinePay/007ka/PayQuery.aspx?OrderID=" + paymentNumber); } else if (str6 == "99BILL") { string dealID = ""; string errorMessage = ""; if (this.Check99BillPay(long.Parse(paymentNumber), ref dealID, ref errorMessage) && (errorMessage == "")) { string str11 = "系统交易号:" + paymentNumber + ",快钱交易号:" + dealID; returnDescription = ""; returnValue = -1; if (Procedures.P_UserAddMoney(base._Site.ID, userID, money, formalitiesFees, paymentNumber, payBank, str11, ref returnValue, ref returnDescription) < 0) { JavaScript.Alert(this.Page, string.Concat(new object[] { "数据库读写错误:", base._Site.ID, " , ", userID, " , ", money, " , ", formalitiesFees, " , ", paymentNumber, " , ", payBank, " , ", str11 })); return; } if (returnValue < 0) { JavaScript.Alert(this.Page, returnDescription); return; } JavaScript.Alert(this.Page, "此笔充值记录已到帐并已处理成功!"); this.BindData(); } else { JavaScript.Alert(this.Page, errorMessage); } } } if (e.CommandName == "Accept") { string str12 = "手动处理充值" + ((TextBox)e.Item.Cells[4].FindControl("tbDescription")).Text.Trim(); num = -1; if (Procedures.P_UserAddMoney(base._Site.ID, userID, money, formalitiesFees, paymentNumber, payBank, str12, ref returnValue, ref returnDescription) < 0) { returnDescription = "数据库读写错误"; return; } if (returnValue < 0) { JavaScript.Alert(this.Page, returnDescription); } JavaScript.Alert(this.Page, "此笔充值处理成功!"); } if (e.CommandName == "Del") { try { new Tables.T_UserPayDetails().Delete("ID=" + paymentNumber + " and Result = 0"); } catch { JavaScript.Alert(this.Page, "此笔充值删除失败!"); } JavaScript.Alert(this.Page, "此笔充值删除成功!"); } this.BindData(); } }
/// <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); }
/// <summary> /// 发送通知 /// </summary> /// <param name="orderid"></param> /// <param name="isSystem"></param> /// <returns></returns> public async Task <string> SendNotify(string orderid, bool isSystem = true, bool isAsyn = true) { PayOrder o = DbContext._.Db.From <PayOrder>().Where(p => p.Order_id == orderid).First(); if (o == null || o.Order_id != orderid) { return("订单不存在"); } if (o.Status != 1) { return("订单状态还未成功"); } if (o.Notify_status == 1) { return("订单异步通知已成功"); } if (o.Notify_url.Length < 7) { return("订单通知地址不误"); } //AopDictionary para = new AopDictionary(); SortedDictionary <string, string> para = new SortedDictionary <string, string>(); para.Add("mchid", WebConfig.MchId); para.Add("orderid", o.Order_id); para.Add("serialid", o.Plat_order_id); para.Add("amount", o.Pay_amount.ToString()); para.Add("attach", o.Attach); para.Add("status", o.Status.ToString()); string sign = string.Format("{0}&key={1}", OnlinePay.GetParamSrc(para), WebConfig.MchKey); sign = Dos.Common.EncryptHelper.MD5EncryptWeChat(sign, "utf-8"); para.Add("sign", sign); string msg = "异步通知发送中..."; if (isAsyn) { msg = Task.Run(() => { string r; try { r = WebUtils.Post(o.Notify_url, WebUtils.BuildQuery(para, "utf-8")); } catch (Exception ee) { r = ee.ToString(); } if (o.Notify_status != 1) { o.Attach(EntityState.Modified); if (r == "ok") { o.Notify_status = 1; } else { o.Notify_status = 2; } if (o.Notify_times == null) { o.Notify_times = 0; } o.Notify_times = o.Notify_times + 1; o.Notify_lasttime = DateTime.Now.ToTimeStamp(); if (isSystem) { if (o.Notify_status != 1) { switch (o.Notify_times) { case 1: Publish(WebConfig.MchId, o.Order_id, 60); break; //1分钟后再次通知 case 2: Publish(WebConfig.MchId, o.Order_id, 300); break; //5分钟后再次通知 case 3: Publish(WebConfig.MchId, o.Order_id, 900); break; //15分钟后再次通知 case 4: Publish(WebConfig.MchId, o.Order_id, 7200); break; //2小时后再次通知 case 5: Publish(WebConfig.MchId, o.Order_id, 21600); break; //6小时后再次通知 default: break; } } } DbContext._.Db.Save(o); } return(r); }).Result; return(msg); } else { string r; try { r = WebUtils.Post(o.Notify_url, WebUtils.BuildQuery(para, "utf-8")); } catch (Exception ee) { r = ee.ToString(); } if (o.Notify_status != 1) { o.Attach(EntityState.Modified); if (r == "ok") { o.Notify_status = 1; } else { o.Notify_status = 2; } if (o.Notify_times == null) { o.Notify_times = 0; } o.Notify_times = o.Notify_times + 1; o.Notify_lasttime = DateTime.Now.ToTimeStamp(); if (isSystem) { if (o.Notify_status != 1) { switch (o.Notify_times) { case 1: Publish(WebConfig.MchId, o.Order_id, 60); break; //1分钟后再次通知 case 2: Publish(WebConfig.MchId, o.Order_id, 300); break; //5分钟后再次通知 case 3: Publish(WebConfig.MchId, o.Order_id, 900); break; //15分钟后再次通知 case 4: Publish(WebConfig.MchId, o.Order_id, 7200); break; //2小时后再次通知 case 5: Publish(WebConfig.MchId, o.Order_id, 21600); break; //6小时后再次通知 default: break; } } } DbContext._.Db.Save(o); } return(r); } #region //if (o.Notify_status != 1) //{ // o.Attach(EntityState.Modified); // if (msg == "ok") // { // o.Notify_status = 1; // } // else // { // o.Notify_status = 2; // } // if (o.Notify_times == null) { o.Notify_times = 0; } // o.Notify_times = o.Notify_times + 1; // o.Notify_lasttime = DateTime.Now.ToTimeStamp(); // if (isSystem) // { // if (o.Notify_status != 1) // { // switch (o.Notify_times) // { // case 1: Publish(WebConfig.MchId, o.Order_id, 60); break; //1分钟后再次通知 // case 2: Publish(WebConfig.MchId, o.Order_id, 300); break; //5分钟后再次通知 // case 3: Publish(WebConfig.MchId, o.Order_id, 900); break; //15分钟后再次通知 // case 4: Publish(WebConfig.MchId, o.Order_id, 7200); break; //2小时后再次通知 // case 5: Publish(WebConfig.MchId, o.Order_id, 21600); break; //6小时后再次通知 // default: break; // } // } // } // DbContext._.Db.Save(o); //} #endregion }
/// <summary> /// 查询接口 /// </summary> /// <param name="mchid"></param> /// <param name="orderid"></param> /// <param name="sign"></param> /// <returns></returns> public async Task <QueryReturnModel> Query(string mchid, string orderid) { QueryReturnModel r = new QueryReturnModel(); if (mchid != WebConfig.MchId) { Dos.Common.LogHelper.Debug("商户号不存在"); r.ReturnMsg = "商户号不存在"; return(r); } PayOrder order = DbContext._.Db.From <PayOrder>().Where(p => p.Order_id == orderid.SqlFilters()).ToFirstDefault(); if (order == null || string.IsNullOrEmpty(order.Order_id)) { Dos.Common.LogHelper.Debug("订单不存在"); r.ReturnMsg = "订单不存在"; return(r); } if (order.Status == 1) { r.ReturnMsg = "ok"; r.IsPay = true; r.OrderNumber = order.Order_id; r.SerialNumber = order.Plat_order_id; r.Totalfee = order.Pay_amount; r.Attach = order.Attach; return(r); } else { PayMch mch = OnlinePay.GetMch(order.Mch_id); if (mch == null) { Dos.Common.LogHelper.Debug("平台商户信息错误"); r.ReturnMsg = "平台商户信息错误"; return(r); } PayPlat plat = OnlinePay.GetPlat(mch.Plat_id); if (plat == null) { Dos.Common.LogHelper.Debug("平台渠道信息错误"); r.ReturnMsg = "平台渠道信息错误"; return(r); } try { OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(plat.Plat_class), plat, mch); r = await onlinepay.OrderQuery(order.Order_id); } catch (Exception ex) { Dos.Common.LogHelper.Debug("第三方查询下单失败1:" + ex.Message); throw ex; } try { if (r.ReturnMsg == "ok" && r.IsPay) { order.Attach(EntityState.Modified); order.Status = 1; if (r.Totalfee > 0) { order.Pay_amount = r.Totalfee; } order.Finish_time = DateTime.Now.ToTimeStamp(); DbContext._.Db.Save(order); } else { Dos.Common.LogHelper.Debug("第三方查询结果:ReturnMsg " + r.ReturnMsg + "## IsPay " + r.IsPay); } } catch (Exception ex) { Dos.Common.LogHelper.Debug("第三方查询下单失败2:" + ex.Message); throw ex; } return(r); } }