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}", OnlineSettle.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 Settle_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) { SettlePlat p = OnlineSettle.GetPlat(pid); SettleMch m = OnlineSettle.GetMch(mid); OnlineSettle onlinepay = (OnlineSettle)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m); NotifyReturnModel r = await onlinepay.CallBack(Request); if (r.IsCheck) { if (r.IsPay == 1) { SettleOrder order = DbContext._.Db.From <SettleOrder>().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.Returnmsg = r.ReturnMsg; DbContext._.Db.Save(order); } } } } if (string.IsNullOrEmpty(r.OrderNumber)) { SettleOrder order = DbContext._.Db.From <SettleOrder>().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}", OnlineSettle.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, OnlineSettle.GetParamSrc(para))); } } return(r); }
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)); }
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 <string> SendNotify(string orderid, bool isSystem = true, bool isAsyn = true) { SettleOrder o = DbContext._.Db.From <SettleOrder>().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("订单通知地址不误"); } 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("msg", o.Returnmsg); para.Add("status", o.Status.ToString()); string sign = string.Format("{0}&key={1}", OnlineSettle.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); } }
public async Task <string> SendNotify(string orderid) { Settle_order o = DB.Context.From <Settle_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("msg", o.Returnmsg); para.Add("status", o.Status.ToString()); string sign = string.Format("{0}&key={1}", OnlineSettle.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); }