/// <summary> /// 微信支付回调方法 /// 窦海超 /// 2015年5月13日 15:03:45 /// </summary> /// <returns></returns> public dynamic ReturnWxpay() { ResponseHandler resHandler = new ResponseHandler(System.Web.HttpContext.Current); try { string return_code = resHandler.getParameter("return_code"); string return_msg = resHandler.getParameter("return_msg"); string out_trade_no = resHandler.getParameter("out_trade_no"); //微信支付订单号 string transaction_id = resHandler.getParameter("transaction_id"); string openid = resHandler.getParameter("openid"); if (string.IsNullOrEmpty(out_trade_no) || !out_trade_no.Contains("_")) { LogHelper.LogWriter("订单号异常,微信单号为:" + transaction_id); return(new { return_code = "FAIL" }); } if (!string.IsNullOrEmpty(return_code) && return_code == "SUCCESS") { int productId = ParseHelper.ToInt(out_trade_no.Split('_')[0], 0); int orderId = ParseHelper.ToInt(out_trade_no.Split('_')[1], 0); int orderChildId = ParseHelper.ToInt(out_trade_no.Split('_')[2], 0); int payStyle = ParseHelper.ToInt(out_trade_no.Split('_')[3], 0); OrderChildFinishModel model = new OrderChildFinishModel() { orderChildId = orderChildId, orderId = orderId, payBy = openid, payStyle = payStyle, payType = PayTypeEnum.WeiXin.GetHashCode(), originalOrderNo = transaction_id }; if (orderChildDao.FinishPayStatus(model)) { //业务处理 return(new { return_code = "SUCCESS" }); } } } catch (Exception ex) { LogHelper.LogWriter(ex, "微信支付回调异常"); } return(new { return_code = "FAIL" }); }
/// <summary> /// 支付子订单完成 /// 窦海超 /// 2015年5月12日 15:36:34 /// </summary> /// <param name="orderId">订单ID</param> /// <param name="orderChildId">子订单ID</param> /// <param name="payStyle">支付方式(1 用户支付 2 骑士代付)</param> /// <returns></returns> public bool FinishPayStatus(OrderChildFinishModel model) { //return ChangePayStatus(EnumOrderChildStatus.YiWanCheng.GetHashCode(), EnumOrderChildStatus.ZhiFuZhong.GetHashCode(), payStyle, orderId, orderChildId); string sql = @" update OrderChild set PayStatus=@PayStatus,ThirdPayStatus=@PayStatus,PayStyle=@PayStyle,PayBy=@PayBy,PayTime=getdate(), PayType=@PayType , OriginalOrderNo=@OriginalOrderNo where OrderId=@OrderId and ChildId=@ChildId and ThirdPayStatus!=@PayStatus"; IDbParameters parm = DbHelper.CreateDbParameters(); parm.Add("PayStatus", DbType.Int32, 4).Value = PayStatusEnum.HadPay.GetHashCode();//变为已完成 parm.Add("PayStyle", DbType.Int32, 4).Value = model.payStyle; parm.Add("PayBy", DbType.String, 100).Value = model.payBy; parm.Add("PayType", DbType.Int32, 4).Value = model.payType; parm.Add("OriginalOrderNo", DbType.String, 265).Value = model.originalOrderNo; parm.Add("OrderId", SqlDbType.Int, 4).Value = model.orderId; parm.Add("ChildId", SqlDbType.Int, 4).Value = model.orderChildId; return(ParseHelper.ToInt(DbHelper.ExecuteNonQuery(SuperMan_Write, sql, parm), 0) > 0 ? true : false); }
/// <summary> /// 完成订单后发送jpush消息 /// 窦海超 /// 2015年5月13日 15:23:16 /// </summary> /// <param name="model"></param> private static void FinishOrderPushMessage(OrderChildFinishModel model) { OrderChildPayModel orderChildPayModel = new OrderDao().GetOrderById(model.orderId); if (orderChildPayModel == null) { return; } Task.Factory.StartNew(() => { JPushModel jpushModel = new JPushModel() { Alert = "订单支付完成!", City = string.Empty, Content = string.Concat(model.orderId, "_", model.orderChildId, "_", orderChildPayModel.PayStatus), RegistrationId = orderChildPayModel.clienterId.ToString(),//通过订单ID获取要发送的骑士ID TagId = 0, Title = "订单提醒" }; Ets.Service.Provider.MyPush.Push.PushMessage(jpushModel); }); }
/// <summary> /// 订单回调 /// 窦海超 /// 2015年5月12日 14:36:48 /// </summary> /// <returns></returns> public dynamic Notify() { try { #region 参数绑定 var request = System.Web.HttpContext.Current.Request; string sign = request["sign"]; string sign_type = request["sign_type"]; string notify_data = request["notify_data"]; AlipayNotifyData notify = new AlipayNotifyData(); if (!string.IsNullOrEmpty(notify_data)) { //如果是二维码支付 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(notify_data); notify.buyer_email = xmlDoc.SelectSingleNode("notify/buyer_email").InnerText; notify.trade_status = xmlDoc.SelectSingleNode("notify/trade_status").InnerText; notify.out_trade_no = xmlDoc.SelectSingleNode("notify/out_trade_no").InnerText; notify.trade_no = xmlDoc.SelectSingleNode("notify/trade_no").InnerText; } else { //否则是骑士代付 notify.buyer_email = request["buyer_email"]; notify.trade_status = request["trade_status"]; notify.out_trade_no = request["out_trade_no"]; notify.trade_no = request["trade_no"]; } #endregion //如果状态为空或状态不等于同步成功和异步成功就认为是错误 if (string.IsNullOrEmpty(notify.trade_status)) { string fail = string.Concat("错误啦trade_status:", notify.trade_status, "。sign:", sign, "。notify_data:", notify_data); LogHelper.LogWriter(fail); return("fail"); } #region 回调完成状态 if (notify.trade_status == "TRADE_SUCCESS" || notify.trade_status == "TRADE_FINISHED") { string orderNo = notify.out_trade_no; if (string.IsNullOrEmpty(orderNo) || !orderNo.Contains("_")) { string fail = string.Concat("错误啦orderNo:", orderNo); LogHelper.LogWriter(fail); return("fail"); } int productId = ParseHelper.ToInt(orderNo.Split('_')[0]); //产品编号 int orderId = ParseHelper.ToInt(orderNo.Split('_')[1]); //主订单号 int orderChildId = ParseHelper.ToInt(orderNo.Split('_')[2]); //子订单号 int payStyle = ParseHelper.ToInt(orderNo.Split('_')[3]); //支付方式(1 用户支付 2 骑士代付) if (orderId <= 0 || orderChildId <= 0) { string fail = string.Concat("错误啦orderId:", orderId, ",orderChildId:", orderChildId); LogHelper.LogWriter(fail); return("fail"); } OrderChildFinishModel model = new OrderChildFinishModel() { orderChildId = orderChildId, orderId = orderId, payBy = notify.buyer_email, payStyle = payStyle, payType = PayTypeEnum.ZhiFuBao.GetHashCode(), originalOrderNo = notify.trade_no, }; if (orderChildDao.FinishPayStatus(model)) { //jpush //Ets.Service.Provider.MyPush.Push.PushMessage(1, "订单提醒", "有订单被抢了!", "有超人抢了订单!", myorder.businessId.ToString(), string.Empty); FinishOrderPushMessage(model);//完成后发送jpush消息 string success = string.Concat("成功,当前订单OrderId:", orderId, ",OrderChild:", orderChildId); LogHelper.LogWriter(success); return("success"); } } #endregion } catch (Exception ex) { LogHelper.LogWriter(ex, "Alipay自动返回异常"); return("fail"); } return("fail"); }