예제 #1
0
        public ActionResult Notify()
        {
            ResponseHandler resHandler = new ResponseHandler(HttpContext);

            string return_code = resHandler.GetParameter("return_code");
            string return_msg  = resHandler.GetParameter("return_msg");

            string res = null;

            resHandler.SetKey(TenPayV3Info.Key);
            //验证请求是否从微信发过来(安全)
            if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
            {
                res = "success"; //正确的订单处理
                                 //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
            }
            else
            {
                res = "wrong";//错误的订单处理
            }

            string xml = string.Format(@"<xml>
                                        <return_code><![CDATA[{0}]]></return_code>
                                        <return_msg><![CDATA[{1}]]></return_msg>
                                        </xml>", return_code, return_msg);

            return(Content(xml, "text/xml"));
        }
예제 #2
0
        public ActionResult Callback()
        {
            ResponseHandler resHandler = new ResponseHandler(null);

            string return_code = resHandler.GetParameter("return_code");
            string return_msg  = resHandler.GetParameter("return_msg");

            string res = null;

            resHandler.SetKey(TenPayV3Info.Key);
            //验证请求是否从微信发过来(安全)
            if (resHandler.IsTenpaySign())
            {
                res = "success";

                //正确的订单处理
                //商户在收到后台通知后根据通知ID向财付通发起验证确认,采用后台系统调用交互模式
                string notify_id = resHandler.GetParameter("notify_id");
                //取结果参数做业务处理
                string out_trade_no = resHandler.GetParameter("out_trade_no");
                //财付通订单号
                string transaction_id = resHandler.GetParameter("transaction_id");
                //金额,以分为单位
                string total_fee = resHandler.GetParameter("total_fee");
                //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
                string discount = resHandler.GetParameter("discount");
                //支付结果
                string result_code = resHandler.GetParameter("result_code");

                if (result_code == "SUCCESS")
                {
                    var buy = Config.Helper.CreateWhere <DbBuy>()
                              .Where(o => o.OrderNo == out_trade_no)
                              .SingleOrDefault();
                    if (buy != null)
                    {
                        buy.PayTime = DateTime.Now;
                        Config.Helper.Save(buy);
                    }
                }
            }
            else
            {
                res = "wrong";

                //错误的订单处理
            }

            var fileStream = System.IO.File.OpenWrite(Server.MapPath("~/1.txt"));

            fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));
            fileStream.Close();

            string xml = string.Format(@"<xml>
   <return_code><![CDATA[{0}]]></return_code>
   <return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);

            return(Content(xml, "text/xml"));
        }
예제 #3
0
 /// <summary>
 /// 统一下单回调
 /// </summary>
 /// <param name="context"></param>
 /// <param name="outTradeNo">返回的订单号</param>
 /// <returns></returns>
 public static bool PayNotifyUrl(HttpContext context, out string outTradeNo)
 {
     try
     {
         ResponseHandler resHandler = new ResponseHandler(context);
         Log.WriteLogToTxt("统一下单回调:" + resHandler.ParseXML(), LogType.Debug);
         string returnCode = resHandler.GetParameter("return_code");
         resHandler.GetParameter("return_msg");
         outTradeNo = "";
         resHandler.SetKey(MchIdkey);
         //验证请求是否从微信发过来(安全)
         if (resHandler.IsTenpaySign() && returnCode.ToUpper() == "SUCCESS")
         {
             outTradeNo = resHandler.GetParameter("out_trade_no");
             return(true);
             //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
         }
     }
     catch (Exception ex)
     {
         WxWriteLogError(ex);
     }
     outTradeNo = "";
     return(false);
 }
예제 #4
0
        /// <summary>
        /// 订单支付验证,
        /// 返回 XML 字符串, XML字符串将包含 SUCCESS 或者 FAIL
        /// </summary>
        /// <param name="successAction">传入接收到的的 orderNumber, orderGuid, Money 三个参数用来进行验证;
        ///  验证成功返回 null,,此时 XML字符串将包含 SUCCESS;
        ///  验证失败返回失败字符串,此时 XML字符串将包含 FAIL;
        /// </param>
        /// <returns></returns>
        public string VerifyPayResult(Func <string, string, int, string> successAction)
        {
            ResponseHandler resHandler  = new ResponseHandler(null);
            string          return_code = resHandler.GetParameter("return_code"); //支付的结果
            string          return_msg  = resHandler.GetParameter("return_msg");

            resHandler.SetKey(Config.TenPayKey);

            string verifyCode = "SUCCESS", verifyMsg = "OK";
            string resultXml = @"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>";

            //验证请求是否从微信发过来(安全)
            if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
            {
                //正确的订单处理
                //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
                var successFuncResult = successAction(resHandler.GetParameter("out_trade_no"),
                                                      resHandler.GetParameter("attach"),
                                                      Int32.Parse(resHandler.GetParameter("total_fee")));
                if (successFuncResult != null)
                {
                    verifyCode = "FAIL";
                    verifyMsg  = successFuncResult;
                }
            }
            return(string.Format(resultXml, verifyCode, verifyMsg));
        }
예제 #5
0
        public HttpResult PayNotifyUrl()
        {
            try
            {
                ResponseHandler resHandler = new ResponseHandler(HttpContext);

                string return_code = resHandler.GetParameter("return_code");
                string return_msg  = resHandler.GetParameter("return_msg");


                resHandler.SetKey(TenPayV3Info.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    //正确的订单处理
                    //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
                }
                else
                {
                    //错误的订单处理
                }

                /* 这里可以进行订单处理的逻辑 */

                //发送支付成功的模板消息
                try
                {
                    string appId        = Config.SenparcWeixinSetting.TenPayV3_AppId;//与微信公众账号后台的AppId设置保持一致,区分大小写。
                    string openId       = resHandler.GetParameter("openid");
                    var    templateData = new Weixin_PaySuccess("https://yufaquan.cn", "购买商品", "状态:" + return_code);

                    Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息参数", appId + " , " + openId);

                    var result = TemplateApi.SendTemplateMessage(appId, openId, templateData);
                }
                catch (Exception ex)
                {
                    Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息", ex.ToString());
                }

                #region 记录日志


                #endregion


                var res = new
                {
                    return_code,
                    return_msg
                };
                return(HttpResult.Success(res));
            }
            catch (Exception ex)
            {
                WeixinTrace.WeixinExceptionLog(new WeixinException(ex.Message, ex));
                throw;
            }
        }
예제 #6
0
        public ActionResult PayNotifyUrl()
        {
            try
            {
                ResponseHandler resHandler = new ResponseHandler(HttpContext);

                string return_code = resHandler.GetParameter("return_code");
                string return_msg  = resHandler.GetParameter("return_msg");

                string res = null;

                resHandler.SetKey(TenPyConfigRead.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    res = "success";//正确的订单处理
                    //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
                }
                else
                {
                    res = "wrong";//错误的订单处理
                }



                #region 记录日志

                var logDir = ServerUtility.ContentRootMapPath(string.Format("~/App_Data/TenPayNotify/{0}", SystemTime.Now.ToString("yyyyMMdd")));
                if (!Directory.Exists(logDir))
                {
                    Directory.CreateDirectory(logDir);
                }

                var logPath = Path.Combine(logDir, string.Format("{0}-{1}-{2}.txt", SystemTime.Now.ToString("yyyyMMdd"), SystemTime.Now.ToString("HHmmss"), Guid.NewGuid().ToString("n").Substring(0, 8)));

                using (var fileStream = System.IO.File.OpenWrite(logPath))
                {
                    var notifyXml = resHandler.ParseXML();
                    //fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));

                    fileStream.Write(Encoding.Default.GetBytes(notifyXml), 0, Encoding.Default.GetByteCount(notifyXml));
                    fileStream.Close();
                }

                #endregion


                string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
                return(Content(xml, "text/xml"));
            }
            catch (Exception ex)
            {
                WeixinTrace.WeixinExceptionLog(new WeixinException(ex.Message, ex));
                throw;
            }
        }
예제 #7
0
        //微信支付回调地址
        public ActionResult Notify()
        {
            LogHelper.AddLog("支付回调地址");//记录日志
            ResponseHandler rspHandler = new ResponseHandler(null);

            rspHandler.SetKey(WeixinConfig.Key);
            LogHelper.AddLog(rspHandler.ParseXML());//记录日志


            //SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 SUCCESS
            string return_code = rspHandler.GetParameter("return_code");
            string return_msg  = rspHandler.GetParameter("return_msg");

            if (rspHandler.IsTenpaySign())
            {
                if (return_code == "SUCCESS")
                {
                    //订单号
                    string       orderSn = rspHandler.GetParameter("out_trade_no");
                    OrdersEntity order   = ordersbll.GetEntityByOrderSn(orderSn);
                    if (order != null)
                    {
                        order.PayDate   = DateTime.Now;
                        order.PayStatus = (int)PayStatus.已支付;
                        order.Status    = (int)OrderStatus.未发货;
                        ordersbll.SaveForm(order.Id, order);
                    }
                    else
                    {
                        LogHelper.AddLog("订单号不存在:" + orderSn);
                    }

                    //不同步
                    TelphoneLiangH5Entity tel = tlbll.GetEntity(order.TelphoneID);//根据靓号id获取靓号,修改售出状态
                    if (tel != null)
                    {
                        tel.SellMark   = 1;
                        tel.SellerName = order.Host;
                    }
                    tlbll.SaveForm(tel.TelphoneID, tel);


                    //头条url回调
                    if (!string.IsNullOrEmpty(order.TouUrl))
                    {
                        TouTiaoApi(order.TouUrl);
                    }
                }
            }

            string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);

            return(Content(xml, "text/xml"));
        }
예제 #8
0
        /// <summary>
        /// JS-SDK支付回调地址(在统一下单接口中设置notify_url)
        /// </summary>
        /// <returns></returns>
        public ActionResult PayNotifyUrl()
        {
            try
            {
                ResponseHandler resHandler = new ResponseHandler(null);

                string return_code = resHandler.GetParameter("return_code");
                string return_msg  = resHandler.GetParameter("return_msg");

                string res = null;

                resHandler.SetKey(TenPayV3Info.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign())
                {
                    res = "success";

                    //正确的订单处理
                }
                else
                {
                    res = "wrong";

                    //错误的订单处理
                }

                var logDir = Server.MapPath(string.Format("~/App_Data/TenPayNotify/{0}", DateTime.Now.ToString("yyyyMMdd")));
                if (!Directory.Exists(logDir))
                {
                    Directory.CreateDirectory(logDir);
                }
                var logPath = Path.Combine(logDir, string.Format("{0}-{1}-{2}.txt", DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), Guid.NewGuid().ToString("n").Substring(0, 8)));

                using (var fileStream = System.IO.File.OpenWrite(logPath))
                {
                    var notifyXml = resHandler.ParseXML();
                    //fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));

                    fileStream.Write(Encoding.Default.GetBytes(notifyXml), 0, Encoding.Default.GetByteCount(notifyXml));
                    fileStream.Close();
                }

                string xml = string.Format(@"<xml>
   <return_code><![CDATA[{0}]]></return_code>
   <return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
                return(Content(xml, "text/xml"));
            }
            catch (Exception ex)
            {
                new WeixinException(ex.Message, ex);
                throw;
            }
        }
예제 #9
0
        /// <summary>
        /// 支付成功后回调通知
        /// </summary>
        /// <returns></returns>
        public ActionResult PayNotifyUrl()
        {
            ResponseHandler resHandler = new ResponseHandler(null);

            string return_code = resHandler.GetParameter("return_code");
            string return_msg  = resHandler.GetParameter("return_msg");

            string res = null;

            resHandler.SetKey(TenPayV3Info.Key);
            //验证请求是否从微信发过来(安全)
            if (resHandler.IsTenpaySign())
            {
                res = "success";
                //正确的订单处理
                string orderno = resHandler.GetParameter("out_trade_no");
                var    item    = OrderService.LoadEntities(n => n.order_number == orderno).FirstOrDefault();
                if (item != null)
                {
                    PaySuccess(item.id);
                }
                else
                {
                    SaveSyslog($"order_number={orderno}的订单回调产生错误_未找到订单对象", SysLogType.前台日志, "支付系统");
                }
            }
            else
            {
                res = "wrong";

                //错误的订单处理
                SaveSyslog($"用户付款失败", SysLogType.前台日志, "支付系统");
            }

            try
            {
                var fileStream = System.IO.File.OpenWrite(Server.MapPath("~/1.txt"));
                fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));
                fileStream.Close();
            }
            catch (Exception)
            {
            }
            string xml = string.Format(@"<xml>
   <return_code><![CDATA[{0}]]></return_code>
   <return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);

            return(Content(xml, "text/xml"));
        }
예제 #10
0
        /// <summary>
        /// JS-SDK支付回调地址(在统一下单接口中设置notify_url)
        /// </summary>
        /// <returns></returns>
        public IActionResult Index()
        {
            try
            {
                ResponseHandler resHandler = new ResponseHandler(HttpContext);

                string return_code = resHandler.GetParameter("return_code");
                //string return_msg = res.Element("xml").Element("return_msg").Value;
                resHandler.SetKey(_senparcWeixinSetting.TenPayV3_Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    var resultCode = resHandler.GetParameter("result_code");
                    if (resultCode == "SUCCESS")
                    {
                        var model = new pay_history();
                        model.out_trade_no   = resHandler.GetParameter("out_trade_no");
                        model.transaction_id = resHandler.GetParameter("transaction_id");
                        model.openid         = resHandler.GetParameter("openid");
                        model.total_fee      = resHandler.GetParameter("total_fee").ToInt();
                        model.time_end       = resHandler.GetParameter("time_end").ToInt64();
                        model.pay_time       = DateTime.ParseExact(model.time_end.ToString(), "yyyyMMddHHmmss", CultureInfo.CurrentCulture);
                        model.device_info    = resHandler.GetParameter("device_info");
                        //string json = model.ToJson();
                        //LogNHelper.Info(json);
                    }
                }
                //else
                //{
                //   // _userApp.UpdatePayOrder(transaction_id, orderId.ToInt64(), openid);
                //    // res = "wrong";//错误的订单处理
                //}
                string success =
                    $"<xml>< return_code >< ![CDATA[SUCCESS]]></ return_code >< return_msg >< ![CDATA[ok]]></ return_msg ></ xml > ";


                return(Content(success, "text/xml"));
            }
            catch (Exception ex)
            {
                LogNHelper.Exception(ex);
                string err =
                    $"<xml>< return_code >< ![CDATA[FAIL]]></ return_code >< return_msg >< ![CDATA[f**k]]></ return_msg ></ xml > ";
                return(Content(err, "text/xml"));
            }
        }
예제 #11
0
        /// <summary>
        /// 回调处理
        /// </summary>
        /// <param name="wxKey">微信支付授权KEY</param>
        /// <param name="success"></param>
        /// <param name="fail"></param>
        /// <returns></returns>
        public static string ProcessNotify(string wxKey, NotifySuccess success, NotifyFail fail)
        {
            NotyfyResult    result     = new NotyfyResult();
            ResponseHandler resHandler = new ResponseHandler(null);

            try
            {
                result.Content = resHandler.ParseXML();
                string openid         = resHandler.GetParameter("openid");
                string out_trade_no   = resHandler.GetParameter("out_trade_no");
                string transaction_id = resHandler.GetParameter("transaction_id");
                string total_fee      = resHandler.GetParameter("total_fee");
                result = new NotyfyResult()
                {
                    Content        = resHandler.ParseXML(),
                    out_trade_no   = out_trade_no,
                    openid         = openid,
                    transaction_id = transaction_id,
                    total_fee      = total_fee,
                    appid          = resHandler.GetParameter("appid"),
                    fee_type       = resHandler.GetParameter("fee_type"),
                    is_subscribe   = resHandler.GetParameter("is_subscribe"),
                    mch_id         = resHandler.GetParameter("mch_id"),
                    result_code    = resHandler.GetParameter("result_code"),
                    time_end       = resHandler.GetParameter("time_end"),
                };
                resHandler.SetKey(wxKey);
                bool signResult = resHandler.IsTenpaySign();
                if (signResult)
                {
                    success(result);
                    return("success");
                }
                else
                {
                    fail(result);
                    return("error");
                }
            }
            catch (Exception ex)
            {
                result.Content = ex.Message;
                fail(result);
                return("error");
            }
        }
예제 #12
0
        public ActionResult PayNotifyUrl()
        {
            ResponseHandler resHandler = new ResponseHandler(null);
            //string result_code = resHandler.GetParameter("result_code");
            //string appid = resHandler.GetParameter("appid");
            //string mch_id = resHandler.GetParameter("mch_id");
            //string device_info = resHandler.GetParameter("device_info");
            //string nonce_str = resHandler.GetParameter("nonce_str");
            //string sign = resHandler.GetParameter("sign");
            //string err_code = resHandler.GetParameter("err_code");
            //string err_code_des = resHandler.GetParameter("err_code_des");
            //string openid = resHandler.GetParameter("openid");
            //string is_subscribe = resHandler.GetParameter("is_subscribe");
            //string trade_type = resHandler.GetParameter("trade_type");
            //string bank_type = resHandler.GetParameter("bank_type");
            //string total_fee = resHandler.GetParameter("total_fee");
            //string coupon_fee = resHandler.GetParameter("coupon_fee");
            //string fee_type = resHandler.GetParameter("fee_type");
            //string transaction_id = resHandler.GetParameter("transaction_id");
            //string out_trade_no = resHandler.GetParameter("out_trade_no");
            //string attach = resHandler.GetParameter("attach");
            //string time_end = resHandler.GetParameter("time_end");

            string res = null;

            resHandler.SetKey(TenPayV3Info.Key);
            //验证请求是否从微信发过来(安全)
            if (resHandler.IsTenpaySign())
            {
                res = "success";

                //正确的订单处理
            }
            else
            {
                res = "wrong";

                //错误的订单处理
            }

            var fileStream = System.IO.File.OpenWrite(Server.MapPath("~/1.txt"));

            fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));
            fileStream.Close();
            return(Content("success"));
        }
예제 #13
0
        public async Task <ContentResult> PayNotify()
        {
            ResponseHandler responseHandler = new ResponseHandler(null);
            string          return_code     = responseHandler.GetParameter("return_code");
            string          return_msg      = responseHandler.GetParameter("return_msg");
            string          openid          = responseHandler.GetParameter("openid");

            using (CurrentUnitOfWork.DisableFilter(DataFilters.MayHaveTenant))
            {
                UserLogin    userLogin    = _userLoginRepository.GetAll().Where(model => model.ProviderKey == openid).FirstOrDefault();
                TenPayV3Info tenPayV3Info = await GetTenPayV3Info(userLogin.TenantId.Value);

                responseHandler.SetKey(tenPayV3Info.Key);
            }

            //验证请求是否从微信发过来(安全)
            if (responseHandler.IsTenpaySign())
            {
                if (return_code == "SUCCESS")
                {
                    string result_code = responseHandler.GetParameter("result_code");

                    if (result_code == "SUCCESS")
                    {
                        string out_trade_no = responseHandler.GetParameter("out_trade_no");

                        using (CurrentUnitOfWork.DisableFilter(DataFilters.MustHaveTenant, DataFilters.MayHaveTenant))
                        {
                            Order order = _orderRepository.GetAll().Where(model => model.Number == out_trade_no).FirstOrDefault();

                            if (order.PaymentStatus == PaymentStatus.ToPay)
                            {
                                await OrderManager.PayCallback(order, PayType.WeChat);
                            }
                        }
                    }
                }
            }
            string xml = string.Format(
                @"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>",
                return_code,
                return_msg);

            return(Content(xml, "text/xml"));
        }
예제 #14
0
        public ActionResult PayNotifyUrl()
        {
            var returntmpl = @"<xml>
   <return_code><![CDATA[{0}]]></return_code>
   <return_msg><![CDATA[{1}]]></return_msg>
</xml>";

            try
            {
                ResponseHandler resHandler  = new ResponseHandler(null);
                string          return_code = resHandler.GetParameter("return_code");
                string          return_msg  = resHandler.GetParameter("return_msg");
                if (return_code == "SUCCESS")
                {
                    string mpid         = resHandler.GetParameter("attach");
                    string openid       = resHandler.GetParameter("openid");
                    string out_trade_no = resHandler.GetParameter("out_trade_no");
                    string total_fee    = resHandler.GetParameter("total_fee");

                    #region 校验公众号
                    var account = GetAccount(mpid);
                    if (account == null)
                    {
                        LogWriter.Info(string.Format("mpid为“{0}”的收款回调验证失败,原因:公众号不存在", mpid));
                        return(Content(string.Format(returntmpl, "FAIL", "Validate Error"), "text/xml"));
                    }
                    #endregion

                    resHandler.SetKey(account.WxPayAppSecret);
                    //验证请求是否从微信发过来(安全)
                    if (resHandler.IsTenpaySign())
                    {
                        return(Content(string.Format(returntmpl, return_code, return_msg), "text/xml"));
                    }
                }
                return(Content(string.Format(returntmpl, "FAIL", "Validate Error"), "text/xml"));
            }
            catch (Exception ex)
            {
                LogWriter.Error(ex, "微信支付回调验证失败");
                return(Content(string.Format(returntmpl, "FAIL", "System Error"), "text/xml"));
            }
        }
예제 #15
0
        public ActionResult PayNotifyUrl()
        {
            ResponseHandler resHandler = new ResponseHandler(null);

            string return_code = resHandler.GetParameter("return_code");
            string return_msg  = resHandler.GetParameter("return_msg");

            string res = null;

            resHandler.SetKey(TenPayV3Info.Key);
            //验证请求是否从微信发过来(安全)
            if (resHandler.IsTenpaySign())
            {
                res = "success";

                //正确的订单处理
            }
            else
            {
                res = "wrong";

                //错误的订单处理
            }

            var resXml           = resHandler.ParseXML();
            var pay_jsapi_notify = Senparc.Weixin.XmlUtility.XmlUtility.Deserialize <pay_jsapi_notify>(resXml);
            var cbll             = new CoinBLL();

            cbll.Resolve(pay_jsapi_notify.AsDictionary());


            var fileStream = System.IO.File.OpenWrite(Server.MapPath("~/1.txt"));

            fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));
            fileStream.Close();

            //return Content("SUCCESS");
            string xml = string.Format(@"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>", "SUCCESS", "OK");

            return(Content(xml, "text/xml"));
        }
예제 #16
0
        public ActionResult PayNotifyUrl()
        {
            ResponseHandler resHandler = new ResponseHandler(null);

            string return_code = resHandler.GetParameter("return_code");
            string return_msg  = resHandler.GetParameter("return_msg");


            string res = null;

            resHandler.SetKey(TenPayV3Info.Key);
            //验证请求是否从微信发过来(安全)
            if (resHandler.IsTenpaySign())
            {
                res = "success";

                //正确的订单处理
            }
            else
            {
                res = "wrong";

                //错误的订单处理
            }

            var fileStream = System.IO.File.OpenWrite(Server.MapPath("~/1.txt"));

            fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));
            fileStream.Close();

            string xml = string.Format(@"<xml>
   <return_code><![CDATA[{0}]]></return_code>
   <return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);

            return(Content(xml, "text/xml"));
        }
        /// <summary>
        /// 支付结果通知
        /// </summary>
        /// <returns></returns>
        public string Notify()
        {
            ResponseHandler responseHandler = new ResponseHandler(Cat.Foundation.CatContext.HttpContext);
            string          return_code     = responseHandler.GetParameter("return_code");
            string          return_msg      = responseHandler.GetParameter("return_msg");

            AllLogService.SysActionLogService.AddLog(Log.Services.Enum.LogLevel.INFO, string.Format("return_msg={0},return_msg={1}", return_code, return_msg), "支付结果通知");

            try
            {
                responseHandler.SetKey(WechatAppConfig.Mch_id_secret);
                if (responseHandler.IsTenpaySign())
                {
                    if (return_code.ToUpper() == "SUCCESS")
                    {
                        string out_trade_no = responseHandler.GetParameter("out_trade_no");
                        //检查数据库中订单状态
                        var instance = AllPublicService.WechatPayOrderService.GetByOutTradeNo(out_trade_no);
                        if (instance != null && instance.IsPaySuccessed != true)
                        {
                            instance.IsPaySuccessed = true;
                            instance.PayResult      = "requestPayment:ok";
                            instance.Update_Time    = DateTime.Now;
                            AllPublicService.WechatPayOrderService.Update(instance);
                            //ServiceRepository.SysActionLogRepository.AddLog("支付结果通知", "SUCCESS", string.Empty);
                            var user = AllServices.BookUserService.GetSingle(instance.Openid);
                            var MM_Currency_Ratio = Foundation.ConfigManager.BookSettings.Currency_Ratio;
                            var MM_Currency       = instance.TotalFee * 0.01 * MM_Currency_Ratio;
                            //新增充值记录
                            AllServices.BookUserRechargeService.Add(user.Openid, (int)Cat.Enums.Book.RechargeType.微信支付充值, (int)MM_Currency, "微信支付充值");
                            //调整用户账户余额
                            user.Currency = user.Currency + (int)MM_Currency;
                            AllServices.BookUserService.Update(user);
                        }
                        else
                        {
                            AllLogService.SysActionLogService.AddLog(Log.Services.Enum.LogLevel.ERROR, "找不到订单out_trade_no:" + out_trade_no, "支付结果通知-失败");
                        }
                    }
                    else
                    {
                        AllLogService.SysActionLogService.AddLog(Log.Services.Enum.LogLevel.ERROR, string.Format("return_msg={0},return_msg={1}", return_code, return_msg), "支付结果通知-失败");
                    }
                }
                else
                {
                    AllLogService.SysActionLogService.AddLog(Log.Services.Enum.LogLevel.ERROR, "签名不对", "支付结果通知-失败");
                }
            }
            catch (Exception ex)
            {
                AllLogService.SysExceptionLogService.AddLog(Log.Services.Enum.ExceptionType.BussinessException, ex, "支付结果通知-异常");
            }

            var res = @"<xml>
                          <return_code><![CDATA[SUCCESS]]></return_code>
                          <return_msg><![CDATA[OK]]></return_msg>
                        </xml>";

            return(res);
        }
예제 #18
0
        //微信支付回调地址
        public ActionResult Notify()
        {
            LogHelper.AddLog("支付回调地址");//记录日志
            ResponseHandler rspHandler = new ResponseHandler(null);

            rspHandler.SetKey(WeixinConfig.Key);
            LogHelper.AddLog(rspHandler.ParseXML());//记录日志


            //SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 SUCCESS
            string return_code = rspHandler.GetParameter("return_code");
            string return_msg  = rspHandler.GetParameter("return_msg");

            if (rspHandler.IsTenpaySign())
            {
                if (return_code == "SUCCESS")
                {
                    //订单号
                    string orderSn = rspHandler.GetParameter("out_trade_no");
                    if (orderSn.Contains("LX-"))
                    {
                        OrdersEntity order = ordersbll.GetEntityByOrderSn(orderSn);
                        if (order != null)
                        {
                            order.PayDate   = DateTime.Now;
                            order.PayStatus = (int)PayStatus.已支付;
                            order.Status    = (int)OrderStatus.未发货;
                            ordersbll.SaveForm(order.Id, order);
                        }
                        else
                        {
                            LogHelper.AddLog("订单号不存在:" + orderSn);
                        }

                        //同步下架
                        TelphoneLiangH5Entity tel = tlbll.GetEntity(order.TelphoneID);//根据靓号id获取靓号,修改售出状态
                        if (tel != null)
                        {
                            tel.SellMark   = 1;
                            tel.SellerName = order.Host;
                        }
                        tlbll.SaveForm(tel.TelphoneID, tel);
                        LogHelper.AddLog("同步下架:" + tel.Telphone);


                        //头条url回调
                        if (!string.IsNullOrEmpty(order.TouUrl))
                        {
                            TouTiaoApi(order.TouUrl);
                        }
                    }
                    else if (orderSn.Contains("JM-"))//加盟订单
                    {
                        var order = ordersJMbll.GetEntityByOrderSn(orderSn);
                        if (order != null)
                        {
                            LogHelper.AddLog("微信支付加盟订单FX-异步调用orderSn:" + orderSn);
                            //支付成功,修改加盟订单表
                            order.PayDate   = DateTime.Now;
                            order.PayStatus = (int)PayStatus.已支付;
                            ordersJMbll.SaveForm(order.Id, order);

                            //修改会员表级别
                            var agent = agentbll.GetEntityByOpenId(order.OpenId);//订单里面的OpenId,不是当前微信OpenId
                            if (agent != null)
                            {
                                agent.LV = order.LV;
                                agentbll.SaveForm(agent.Id, agent);

                                decimal direct   = 0;
                                decimal indirect = 0;

                                //上级不等于本身,才进行返佣,如果上级就是自己则为顶级
                                if (agent.Pid != agent.Id)
                                {
                                    Wechat_AgentEntity agentPid = agentbll.GetEntity(agent.Pid);//上级
                                    if (agentPid != null)
                                    {
                                        Wechat_AgentEntity agentPid2 = agentbll.GetEntity(agentPid.Pid);//上上级
                                        if (agentPid2 != null)
                                        {
                                            //如果父级不等于上上级,则对上上级进行返佣
                                            if (agent.Pid != agentPid2.Id)
                                            {
                                                //获取返佣规则金额
                                                DirectHelper.getJMDirect(order.LV, agentPid.LV, agentPid2.LV, out direct, out indirect);
                                                //上级返佣
                                                agentPid.profit += direct;
                                                agentbll.SaveForm(agentPid.Id, agentPid);

                                                //直接返佣日志
                                                ComissionLogEntity logEntity = new ComissionLogEntity()
                                                {
                                                    agent_id         = agentPid.Id,
                                                    agent_name       = agentPid.nickname,
                                                    indirect         = 0,
                                                    invited_agent_id = order.AgentId,
                                                    phonenum         = order.LV,
                                                    profit           = direct,
                                                    status           = 2,//已入账
                                                    orderno          = order.OrderSn
                                                };
                                                comissionLogBll.SaveForm(null, logEntity);
                                                LogHelper.AddLog("升级订单直接返佣:" + direct);

                                                //上上级返佣
                                                agentPid2.profit += indirect;
                                                agentbll.SaveForm(agentPid2.Id, agentPid2);

                                                //间接返佣日志
                                                ComissionLogEntity logEntity2 = new ComissionLogEntity()
                                                {
                                                    agent_id         = agentPid2.Id,
                                                    agent_name       = agentPid2.nickname,
                                                    indirect         = 1,
                                                    invited_agent_id = order.AgentId,
                                                    phonenum         = order.LV,
                                                    profit           = indirect,
                                                    status           = 2,//已入账
                                                    orderno          = order.OrderSn
                                                };
                                                comissionLogBll.SaveForm(null, logEntity2);
                                                LogHelper.AddLog("升级订单间接返佣:" + indirect);
                                            }
                                            else
                                            {
                                                //获取返佣规则金额
                                                DirectHelper.getJMDirect(order.LV, agentPid.LV, null, out direct, out indirect);
                                                //上级返佣
                                                agentPid.profit += direct;
                                                agentbll.SaveForm(agentPid.Id, agentPid);

                                                //直接返佣日志
                                                ComissionLogEntity logEntity = new ComissionLogEntity()
                                                {
                                                    agent_id         = agentPid.Id,
                                                    agent_name       = agentPid.nickname,
                                                    indirect         = 0,
                                                    invited_agent_id = order.AgentId,
                                                    phonenum         = order.LV,
                                                    profit           = direct,
                                                    status           = 2,//已入账
                                                    orderno          = order.OrderSn
                                                };
                                                comissionLogBll.SaveForm(null, logEntity);
                                                LogHelper.AddLog("升级订单上级和顶级同一人只直接返佣:" + direct);
                                            }
                                        }
                                        else
                                        {
                                            //获取返佣规则金额
                                            DirectHelper.getJMDirect(order.LV, agentPid.LV, null, out direct, out indirect);
                                            //上级返佣
                                            agentPid.profit += direct;
                                            agentbll.SaveForm(agentPid.Id, agentPid);

                                            //直接返佣日志
                                            ComissionLogEntity logEntity = new ComissionLogEntity()
                                            {
                                                agent_id         = agentPid.Id,
                                                agent_name       = agentPid.nickname,
                                                indirect         = 0,
                                                invited_agent_id = order.AgentId,
                                                phonenum         = order.LV,
                                                profit           = direct,
                                                status           = 2,//已入账
                                                orderno          = order.OrderSn
                                            };
                                            comissionLogBll.SaveForm(null, logEntity);
                                            LogHelper.AddLog("升级订单上上级为空只返上级直接返佣:" + direct);
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            LogHelper.AddLog("订单号不存在:" + orderSn);
                        }
                    }
                    else if (orderSn.Contains("FX-"))//分销销售
                    {
                        OrdersEntity order = ordersbll.GetEntityByOrderSn(orderSn);
                        if (order != null)
                        {
                            LogHelper.AddLog("微信支付分销订单FX-异步调用orderSn:" + orderSn);
                            //支付成功,修改加盟订单表
                            order.PayDate   = DateTime.Now;
                            order.PayStatus = (int)PayStatus.已支付;
                            ordersbll.SaveForm(order.Id, order);

                            //同步下架
                            TelphoneLiangH5Entity tel = tlbll.GetEntity(order.TelphoneID);//根据靓号id获取靓号,修改售出状态
                            if (tel != null)
                            {
                                tel.SellMark   = 1;
                                tel.SellerName = order.Host;
                            }
                            tlbll.SaveForm(tel.TelphoneID, tel);
                            LogHelper.AddLog("同步下架:" + tel.Telphone);

                            var logList = comissionLogBll.GetList("{\"orderno\":\"" + orderSn + "\"}");
                            if (logList.Count() > 0)
                            {
                                foreach (var item in logList)
                                {
                                    LogHelper.AddLog(item.agent_id + "支付状态修改1已支付,佣金:" + item.profit);
                                    //返佣?不能直接返佣,需要等到开卡之后再返佣
                                    item.status = 1;//已支付,不入账
                                    comissionLogBll.SaveForm(item.id, item);
                                }
                            }
                        }
                        else
                        {
                            LogHelper.AddLog("订单号不存在:" + orderSn);
                        }
                    }
                }
            }

            string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);

            LogHelper.AddLog("正常返回回调xml信息:" + xml);
            return(Content(xml, "text/xml"));
        }
예제 #19
0
        public ActionResult PayNotifyUrl()
        {
            ResponseHandler resHandler = new ResponseHandler(null);

            resHandler.Init();
            resHandler.SetKey(TenPayInfo.Key, TenPayInfo.AppKey);

            string message;

            //判断签名
            if (resHandler.IsTenpaySign())
            {
                if (resHandler.IsWXsign())
                {
                    //商户在收到后台通知后根据通知ID向财付通发起验证确认,采用后台系统调用交互模式
                    string notify_id = resHandler.GetParameter("notify_id");
                    //取结果参数做业务处理
                    string out_trade_no = resHandler.GetParameter("out_trade_no");
                    //财付通订单号
                    string transaction_id = resHandler.GetParameter("transaction_id");
                    //金额,以分为单位
                    string total_fee = resHandler.GetParameter("total_fee");
                    //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
                    string discount = resHandler.GetParameter("discount");
                    //支付结果
                    string trade_state = resHandler.GetParameter("trade_state");

                    string payMessage = null;

                    //即时到账
                    if ("0".Equals(trade_state))
                    {
                        //------------------------------
                        //处理业务开始
                        //------------------------------

                        //处理数据库逻辑
                        //注意交易单不要重复处理
                        //注意判断返回金额

                        //------------------------------
                        //处理业务完毕
                        //------------------------------

                        //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知
                        payMessage = "success 后台通知成功";
                    }
                    else
                    {
                        payMessage = "支付失败";
                    }
                    ViewData["payMessage"] = payMessage;
                    //回复服务器处理成功
                    message = "success";
                }

                else
                {//SHA1签名失败
                    message = "SHA1签名失败" + resHandler.GetDebugInfo();
                }
            }

            else
            {//md5签名失败
                message = "md5签名失败" + resHandler.GetDebugInfo();
            }
            ViewData["message"] = message;

            return(Content("Success"));
        }
예제 #20
0
        // GET: Pay
        public ActionResult PayNotify()
        {
            try
            {
                ResponseHandler resHandler = new ResponseHandler(null);

                string return_code = resHandler.GetParameter("return_code");
                string return_msg  = resHandler.GetParameter("return_msg");

                string res = null;

                var payInfo = TenPayV3InfoCollection.Data[System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"]];
                resHandler.SetKey(payInfo.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    res = "success";//正确的订单处理
                    //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
                    var orderCode   = resHandler.GetParameter("out_trade_no");
                    var wxOrderCode = resHandler.GetParameter("transaction_id");
                    var fee         = resHandler.GetParameter("total_fee");

                    var vipFee = _dal.Get <VipFee>(orderCode);
                    if (vipFee != null)
                    {
                        vipFee.FeeTime     = DateTime.Now;
                        vipFee.WXFee       = decimal.Parse(fee);
                        vipFee.WXOrderCode = wxOrderCode;
                        vipFee.Status      = 1;
                        vipFee.UpdatedBy   = "paycallback";
                        vipFee.Remark      = "支付成功";
                        _dal.Update(vipFee);

                        var vip = _dal.Get <Vip>(vipFee.VipId);
                        if (vip != null)
                        {
                            vip.FeeStatus  = (int)PayStatus.支付成功;
                            vip.ExpireDate = vip.ExpireDate == null?DateTime.Now.AddYears(1) : vip.ExpireDate.Value.AddYears(1);

                            //vip.WXStatus = (int)WXStatus.待审核;
                            _dal.Update(vip);
                        }
                    }
                }
                else
                {
                    res = "wrong";//错误的订单处理
                }

                #region 注释
                /* 这里可以进行订单处理的逻辑 */

                //发送支付成功的模板消息
                //try
                //{
                //    string appId = AppConfig.Instance.AppId;//与微信公众账号后台的AppId设置保持一致,区分大小写。
                //    string openId = resHandler.GetParameter("openid");
                //    var templateData = new WeixinTemplate_PaySuccess("https://weixin.senparc.com", "购买商品", "状态:" + return_code);

                //    Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息参数", appId + " , " + openId);

                //    var result = AdvancedAPIs.TemplateApi.SendTemplateMessage(appId, openId, templateData);
                //}
                //catch (Exception ex)
                //{
                //    Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息", ex.ToString());
                //}
                #endregion

                #region 记录日志

                var logDir = Server.MapPath(string.Format("~/App_Data/TenPayNotify/{0}", DateTime.Now.ToString("yyyyMMdd")));
                if (!Directory.Exists(logDir))
                {
                    Directory.CreateDirectory(logDir);
                }

                var logPath = Path.Combine(logDir, string.Format("{0}-{1}-{2}.txt", DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), Guid.NewGuid().ToString("n").Substring(0, 8)));

                using (var fileStream = System.IO.File.OpenWrite(logPath))
                {
                    var notifyXml = resHandler.ParseXML();
                    //fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));

                    fileStream.Write(Encoding.Default.GetBytes(notifyXml), 0, Encoding.Default.GetByteCount(notifyXml));
                    fileStream.Close();
                }

                #endregion


                string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
                return(Content(xml, "text/xml"));
            }
            catch (Exception ex)
            {
                new WeixinException(ex.Message, ex);
                throw;
            }
        }
예제 #21
0
    protected void Page_Load(object sender, EventArgs e)
    {
        ResponseHandler resHandler = new ResponseHandler(Context);

        resHandler.Init();
        resHandler.SetKey(WeixinPayUtil.Key, WeixinPayUtil.AppKey);

        //判断签名
        if (resHandler.IsTenpaySign())
        {
            if (resHandler.IsWXsign())
            {
                //商户在收到后台通知后根据通知ID向财付通发起验证确认,采用后台系统调用交互模式
                string notify_id = resHandler.GetParameter("notify_id");
                //取结果参数做业务处理
                string out_trade_no = resHandler.GetParameter("out_trade_no");
                //财付通订单号
                string transaction_id = resHandler.GetParameter("transaction_id");
                //金额,以分为单位
                string total_fee = resHandler.GetParameter("total_fee");
                //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
                string discount = resHandler.GetParameter("discount");
                //支付结果
                string trade_state = resHandler.GetParameter("trade_state");

                //即时到账
                if ("0".Equals(trade_state))
                {
                    //------------------------------
                    //处理业务开始
                    //------------------------------

                    //处理数据库逻辑
                    //注意交易单不要重复处理
                    //注意判断返回金额

                    //------------------------------
                    //处理业务完毕
                    //------------------------------

                    //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知
                    Response.Write("success 后台通知成功");
                }
                else
                {
                    Response.Write("支付失败");
                }
                //回复服务器处理成功
                Response.Write("success");
            }

            else
            {//SHA1签名失败
                Response.Write("fail -SHA1 failed");
                Response.Write(resHandler.GetDebugInfo());
            }
        }

        else
        {//md5签名失败
            Response.Write("fail -md5 failed");
            Response.Write(resHandler.GetDebugInfo());
        }
    }
예제 #22
0
    protected void Page_Load(object sender, EventArgs e)
    {
        ResponseHandler resHandler  = new ResponseHandler(null);
        string          return_code = resHandler.GetParameter("return_code");
        string          return_msg  = resHandler.GetParameter("return_msg");

        resHandler.SetKey(TenPayV3Info.Key);

        //写日志
        StringBuilder sb = new StringBuilder();

        sb.Append("\r\n 测试日志 微信支付支付 异步通知消息 notify_url -----------------------------------------------------------------------------------");
        sb.Append("\r\n out_trade_no=" + resHandler.GetParameter("out_trade_no"));
        sb.Append("\r\n return_code=" + resHandler.GetParameter("return_code"));
        sb.Append("\r\n return_msg=" + resHandler.GetParameter("return_msg"));
        sb.Append("\r\n result_code=" + resHandler.GetParameter("result_code"));
        sb.Append("\r\n total_fee=" + resHandler.GetParameter("total_fee"));
        sb.Append("\r\n--------------------------------------------------------------------------------------------------");
        SimonLog.WriteLog(sb.ToString(), "/Log/", "log_Weixinpay_" + DateTime.Now.ToString("yyyyMMdd"));

        string xmlfmt = @"<xml>
                            <return_code><![CDATA[{0}]]></return_code>
                            <return_msg><![CDATA[{1}]]></return_msg>
                          </xml>";

        if (!resHandler.IsTenpaySign() || return_code != "SUCCESS")
        {
            ResponseStr(string.Format(xmlfmt, "FAIL", "FAIL"), "text/xml");
        }

        string result_code = resHandler.GetParameter("result_code");

        if (result_code == "SUCCESS")
        {
            //交易成功
            string out_trade_no = resHandler.GetParameter("out_trade_no");
            string total_fee    = resHandler.GetParameter("total_fee");
            total_fee = (decimal.Parse(total_fee) / 100).ToString(); //单位分转换为单位元

            DataTable RMBCostDT = SimonDB.DataTable(@"select * from Web_RMBCost where OrderID=@OrderID", new DbParameter[] {
                SimonDB.CreDbPar("@OrderID", out_trade_no)
            });
            if (RMBCostDT.Rows.Count <= 0)
            {
                Response.Write("订单不存在");
                return;
            }
            DataRow RMBCostDR = RMBCostDT.Rows[0];
            if (RMBCostDR["UpdateFlag"].ToString() == "1")
            {
                Response.Write("订单已处理");
                return;
            }
            if (Convert.ToInt32(decimal.Parse(RMBCostDR["PayMoney"].ToString())) != Convert.ToInt32(decimal.Parse(total_fee)))
            {
                Response.Write("充值金额不符");
                return;
            }
            //判断玩家账号是否存在
            DbParameter[] userparms = new DbParameter[] { SimonDB.CreDbPar("@userid", RMBCostDR["Users_ids"]) };
            DataTable     UserDT    = SimonDB.DataTable(@"select * from TUsers as a inner join TUserInfo as b on a.userid=b.userid where a.userid=@userid", userparms);
            if (UserDT.Rows.Count <= 0)
            {
                Response.Write("用户不存在");
                return;
            }
            DataRow UserDR = UserDT.Rows[0];
            //判断充值兑换率
            DataTable RechargeRateDT = SimonDB.DataTable(@"select * from RechargeRate where RechargeRMB=@RechargeRMB", new DbParameter[] {
                SimonDB.CreDbPar("@RechargeRMB", RMBCostDR["PayMoney"].ToString())
            });
            if (RechargeRateDT.Rows.Count <= 0)
            {
                Response.Write("此充值金额的金币兑换率不存在");
                return;
            }
            DataRow RechargeRateDR = RechargeRateDT.Rows[0];

            //充值动作
            SimonDB.ExecuteNonQuery(@"update TUserInfo set WalletMoney=WalletMoney+@ChangeMoney where UserID=@UserID", new DbParameter[] {
                SimonDB.CreDbPar("@ChangeMoney", RechargeRateDR["RechargeGold"].ToString()),
                SimonDB.CreDbPar("@UserID", UserDR["UserID"].ToString())
            });

            //金币日志
            SimonDB.ExecuteNonQuery(@"insert into Web_MoneyChangeLog (UserID,UserName,StartMoney,ChangeMoney,ChangeType,DateTime,Remark)
                                                              values (@UserID,@UserName,@StartMoney,@ChangeMoney,2,getdate(),@Remark)", new DbParameter[] {
                SimonDB.CreDbPar("@UserID", UserDR["UserID"].ToString()),
                SimonDB.CreDbPar("@UserName", UserDR["UserName"].ToString()),
                SimonDB.CreDbPar("@StartMoney", UserDR["WalletMoney"].ToString()),
                SimonDB.CreDbPar("@ChangeMoney", RechargeRateDR["RechargeGold"].ToString()),
                SimonDB.CreDbPar("@Remark", "微信充值,订单号:" + out_trade_no)
            });

            //充值赠送金币
            SimonDB.ExecuteNonQuery(@"update TUserInfo set WalletMoney=WalletMoney+@ChangeMoney where UserID=@UserID", new DbParameter[] {
                SimonDB.CreDbPar("@ChangeMoney", RechargeRateDR["RegiveGold"].ToString()),
                SimonDB.CreDbPar("@UserID", UserDR["UserID"].ToString())
            });

            //充值赠送金币日志
            SimonDB.ExecuteNonQuery(@"insert into Web_MoneyChangeLog (UserID,UserName,StartMoney,ChangeMoney,ChangeType,DateTime,Remark)
                                                                  values (@UserID,@UserName,@StartMoney,@ChangeMoney,2,getdate(),@Remark)", new DbParameter[] {
                SimonDB.CreDbPar("@UserID", UserDR["UserID"].ToString()),
                SimonDB.CreDbPar("@UserName", UserDR["UserName"].ToString()),
                SimonDB.CreDbPar("@StartMoney", UserDR["WalletMoney"].ToString()),
                SimonDB.CreDbPar("@ChangeMoney", RechargeRateDR["RegiveGold"].ToString()),
                SimonDB.CreDbPar("@Remark", "充值赠送金币,关联微信订单号:" + out_trade_no)
            });

            ResponseStr(string.Format(xmlfmt, "SUCCESS", "OK"), "text/xml");
        }
        else
        {
            ResponseStr(string.Format(xmlfmt, "FAIL", "FAIL"), "text/xml");
        }
    }
예제 #23
0
        /// <summary>
        /// JS-SDK支付回调地址(在统一下单接口中设置notify_url)
        /// </summary>
        /// <returns></returns>
        public ActionResult PayNotifyUrl()
        {
            try
            {
                ResponseHandler resHandler = new ResponseHandler(null);

                string return_code = resHandler.GetParameter("return_code");
                string return_msg  = resHandler.GetParameter("return_msg");

                string res = null;

                resHandler.SetKey(TenPayV3Info.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    res = "success";//正确的订单处理
                    //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
                    string channelOrderID = resHandler.GetParameter("out_trade_no");
                    string wxOrderID      = resHandler.GetParameter("transaction_id");
                    try
                    {
                        dynamic job = new OrderService().UPdateOrderByOrderID(channelOrderID, wxOrderID, 1, resHandler.GetParameter("attach"));
                    }
                    catch (Exception ex)
                    {
                        res = "wrong";//错误的订单处理
                    }
                }
                else
                {
                    res = "wrong";//错误的订单处理
                }

                #region 记录日志

                var logDir = Server.MapPath(string.Format("~/App_Data/TenPayNotify/{0}", DateTime.Now.ToString("yyyyMMdd")));
                if (!Directory.Exists(logDir))
                {
                    Directory.CreateDirectory(logDir);
                }
                var logPath = Path.Combine(logDir, string.Format("{0}-{1}-{2}.txt", DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), Guid.NewGuid().ToString("n").Substring(0, 8)));

                using (var fileStream = System.IO.File.OpenWrite(logPath))
                {
                    var notifyXml = resHandler.ParseXML();
                    //fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));

                    fileStream.Write(Encoding.Default.GetBytes(notifyXml), 0, Encoding.Default.GetByteCount(notifyXml));
                    fileStream.Close();
                }

                #endregion

                string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
                return(Content(xml, "text/xml"));
            }
            catch (Exception ex)
            {
                new WeixinException(ex.Message, ex);
                throw;
            }
        }
예제 #24
0
        public ContentResult WexinPayNotify()
        {
            ResponseHandler resHandler = new ResponseHandler(null);

            string return_code = resHandler.GetParameter("return_code");
            string return_msg  = resHandler.GetParameter("return_msg");

            resHandler.SetKey(PayKey);
            string res = null;

            //TODO:这里需要验证签名

            ////验证请求是否从微信发过来(安全)
            //logger.Info("IsTenpaySign:" + resHandler.IsTenpaySign());
            if (resHandler.IsTenpaySign())
            {
                try
                {
                    //订单处理
                    if (return_code.ToLower() == "SUCCESS".ToLower())
                    {
                        string out_trade_no = resHandler.GetParameter("out_trade_no");
                        long   orderId      = 0;
                        if (!string.IsNullOrEmpty(out_trade_no))
                        {
                            orderId = Convert.ToInt64(out_trade_no);
                        }
                        logger.Info("orderId:" + orderId + "|out_trade_no=" + out_trade_no);
                        //判断老订单和预售订单
                        var flag = OrderService.CheckOrderExist(orderId);
                        if (flag)
                        {
                            OrderService.UpdateOrderPay(new OrderPayModel()
                            {
                                OrdeId = orderId,
                                //long.Parse(resHandler.GetParameter("out_trade_no")),
                                Status = OrderStatus.Paid.GetHashCode()
                            });
                        }
                        else
                        {
                            PreSaleOrderService.ModifyPreOrder(new PreSaleOrder()
                            {
                                OrderId = orderId, Status = 1
                            });
                            var preOrder = PreSaleOrderService.GetPreSaleOrder(orderId);
                            var mobile   = preOrder.Phone;
                            SMSService.SendSMSPreOrderCreated(mobile, "12月19日");
                        }
                    }

                    res = "SUCCESS";
                }
                catch (Exception e)
                {
                    logger.Error("微信支付回调错误:" + e);
                    res = "FAIL";
                }
                string xml = string.Format(@"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>",
                                           res, return_msg);
                return(Content(xml, "text/xml"));
            }
            else
            {
                return(Content(""));
            }
        }
예제 #25
0
        public override async Task <PayResult> PayResultNotify(
            IEnumerable <KeyValuePair <string, string> > query,
            IDictionary <string, string> header,
            IDictionary <string, string> form,
            Stream body)
        {
            var notifyResult = new PayResult()
            {
                Success = false
            };

            string xml = await body.ReadToStringAsync();

            if (xml.IsNullOrWhiteSpace())
            {
                notifyResult.Message = "微信支付回调,xml请求数据为空!";
                Logger.LogError(notifyResult.Message);
                return(notifyResult);
            }

            ResponseHandler  resHandler;
            OrderQueryResult result;

            try
            {
                // 获取微信回调数据
                // ResponseHandler读取body时没有seek,先seek下
                HttpContextAccessor.HttpContext.Request.Body.Seek(0, SeekOrigin.Begin);
                resHandler = new ResponseHandler(HttpContextAccessor.HttpContext);

                Logger.LogInformation($"微信支付回调:" + xml);
                // 转换为对象
                result = new OrderQueryResult(xml);
            }
            catch (XmlException)
            {
                // xml格式异常直接不管
                notifyResult.Message = "微信支付回调,xml数据异常!";
                //logger.LogError(notifyResult.Message);
                return(notifyResult);
            }
            catch (Exception ex)
            {
                notifyResult.Message = "微信支付回调,数据解析错误!";
                Logger.LogError(ex, notifyResult.Message);
                return(notifyResult);
            }

            var secret = MchOptions.Value.Get(result.mch_id)?.MchKey;

            if (secret.IsNullOrWhiteSpace())
            {
                notifyResult.Message = $"微信支付回调,未找到商户密钥,mchId:{result.mch_id},result:{xml}";
                return(notifyResult);
            }

            // 设置appkey,用于验证参数签名
            resHandler.SetKey(secret);
            // 参数签名验证
            if (!resHandler.IsTenpaySign())
            {
                notifyResult.Message = $"微信支付回调:签名错误,result:{xml}";
                Logger.LogError(notifyResult.Message);
                return(notifyResult);
            }

            // 支付回调结果是否正确
            if (!result.IsReturnCodeSuccess() || !result.IsResultCodeSuccess())
            {
                notifyResult.Message = $"微信支付回调,支付失败:return error,result:{xml}";
                Logger.LogError(notifyResult.Message);
                return(notifyResult);
            }

            notifyResult.Success       = true;
            notifyResult.RealPayAmount = notifyResult.Amount = result.total_fee.ConvertTo <int>();
            notifyResult.LocalTradeNo  = result.out_trade_no;
            notifyResult.TransactionId = result.transaction_id;
            notifyResult.Attach        = result.attach;
            notifyResult.TraderId      = result.openid;
            notifyResult.PayData       = xml;
            notifyResult.MchId         = result.mch_id;
            notifyResult.AppId         = result.appid;

            return(await Task.FromResult(notifyResult));
        }
예제 #26
0
        /// <summary>
        /// JS-SDK支付回调地址(在统一下单接口中设置notify_url)
        /// </summary>
        /// <returns></returns>
        public ActionResult PayNotifyUrl(bool isWxOpenPay = false)//注意:统一下单接口中不能带参数!
        {
            WeixinTrace.SendCustomLog("微信支付回调", "来源:" + (isWxOpenPay ? "微信支付" : "小程序支付"));

            try
            {
                ResponseHandler resHandler = new ResponseHandler(null);

                string return_code = resHandler.GetParameter("return_code");
                string return_msg  = resHandler.GetParameter("return_msg");

                bool paySuccess = false;

                resHandler.SetKey(TenPayV3Info.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    paySuccess = true;//正确的订单处理
                    //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
                }
                else
                {
                    paySuccess = false;//错误的订单处理
                }

                if (paySuccess)
                {
                    /* 这里可以进行订单处理的逻辑 */

                    //发送支付成功的模板消息
                    try
                    {
                        string appId  = Config.SenparcWeixinSetting.WeixinAppId;//与微信公众账号后台的AppId设置保持一致,区分大小写。
                        string openId = resHandler.GetParameter("openid");

                        if (isWxOpenPay)
                        {
                            //DPBMARK MiniProgram
                            var cacheStrategy           = CacheStrategyFactory.GetObjectCacheStrategyInstance();
                            var unifiedorderRequestData = cacheStrategy.Get <TenPayV3UnifiedorderRequestData>($"WxOpenUnifiedorderRequestData-{openId}"); //获取订单请求信息缓存
                            var unifedorderResult       = cacheStrategy.Get <UnifiedorderResult>($"WxOpenUnifiedorderResultData-{openId}");               //获取订单信息缓存

                            if (unifedorderResult != null || !string.IsNullOrEmpty(unifedorderResult.prepay_id))
                            {
                                Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息参数(小程序)", appId + " , " + openId);

                                //小程序支付,发送小程序模板消息
                                var templateData = new WxOpenTemplateMessage_PaySuccessNotice(
                                    "在线购买(小程序支付)测试", SystemTime.Now, "小程序支付 | 注意:这条消息来自微信服务器异步回调,官方证明支付成功! | prepay_id:" + unifedorderResult.prepay_id,
                                    unifiedorderRequestData.OutTradeNo, unifiedorderRequestData.TotalFee, "400-031-8816", "https://weixin.senparc.com");

                                //微信官方已停用此接口
                                //Senparc.Weixin.WxOpen.AdvancedAPIs
                                //    .Template.TemplateApi
                                //    .SendTemplateMessage(
                                //        Config.SenparcWeixinSetting.WxOpenAppId, openId, templateData.TemplateId, templateData, unifedorderResult.prepay_id, "pages/index/index", "图书", "#fff00");
                            }
                            else
                            {
                                Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息参数(小程序)", "prepayId未记录:" + appId + " , " + openId);
                            }
                            //DPBMARK_END
                        }
                        else
                        {
                            //微信公众号支付
                            var templateData = new WeixinTemplate_PaySuccess("https://weixin.senparc.com", "购买商品", "状态:" + return_code);

                            Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息参数(公众号)", appId + " , " + openId);

                            var result = AdvancedAPIs.TemplateApi.SendTemplateMessage(appId, openId, templateData);
                        }
                    }
                    catch (Exception ex)
                    {
                        WeixinTrace.WeixinExceptionLog(new WeixinException("支付成功模板消息异常", ex));
                        //WeixinTrace.SendCustomLog("支付成功模板消息", ex.ToString());
                    }

                    WeixinTrace.SendCustomLog("PayNotifyUrl回调", "支付成功");
                }
                else
                {
                    Senparc.Weixin.WeixinTrace.SendCustomLog("PayNotifyUrl回调", "支付失败");
                }



                #region 记录日志

                var logDir = ServerUtility.ContentRootMapPath(string.Format("~/App_Data/TenPayNotify/{0}", SystemTime.Now.ToString("yyyyMMdd")));
                if (!Directory.Exists(logDir))
                {
                    Directory.CreateDirectory(logDir);
                }

                var logPath = Path.Combine(logDir, string.Format("{0}-{1}-{2}.txt", SystemTime.Now.ToString("yyyyMMdd"), SystemTime.Now.ToString("HHmmss"), Guid.NewGuid().ToString("n").Substring(0, 8)));

                using (var fileStream = System.IO.File.OpenWrite(logPath))
                {
                    var notifyXml = resHandler.ParseXML();
                    //fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));

                    fileStream.Write(Encoding.Default.GetBytes(notifyXml), 0, Encoding.Default.GetByteCount(notifyXml));
                    fileStream.Close();
                }

                #endregion


                string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
                return(Content(xml, "text/xml"));
            }
            catch (Exception ex)
            {
                WeixinTrace.WeixinExceptionLog(new WeixinException(ex.Message, ex));
                throw;
            }
        }
예제 #27
0
        /// <summary>
        /// JS-SDK支付回调地址(在统一下单接口中设置notify_url)
        /// </summary>
        /// <returns></returns>
        public async Task <ActionResult> PayNotifyUrl(Guid id)
        {
            try
            {
                ResponseHandler resHandler = new ResponseHandler(HttpContext);

                string return_code = resHandler.GetParameter("return_code");
                string return_msg  = resHandler.GetParameter("return_msg");
                resHandler.SetKey(TenPayV3Info.Key);
                bool succeed = resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS";

                /* 这里可以进行订单处理的逻辑 */
                string out_trade_no = resHandler.GetParameter("out_trade_no");
                var    pay          = _paySrv.UpdatePaymentResult(GuidEncoder.Decode(out_trade_no), succeed);
                if (succeed)
                {
                    var result = await ExecuteOrder((Guid)pay.OrderId, pay.Id, true);
                }

                //发送支付成功的模板消息
                try
                {
                    string appId        = Config.SenparcWeixinSetting.TenPayV3_AppId;//与微信公众账号后台的AppId设置保持一致,区分大小写。
                    string openId       = resHandler.GetParameter("openid");
                    var    templateData = new WeixinTemplate_PaySuccess(_siteUrl, "购买商品", "状态:" + return_code);

                    Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息参数", appId + " , " + openId);

                    // var result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(appId, openId, templateData);
                }
                catch (Exception ex)
                {
                    Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息", ex.ToString());
                }

                #region 记录日志

                var logDir = ServerUtility.ContentRootMapPath(string.Format("~/App_Data/TenPayNotify/{0}", SystemTime.Now.ToString("yyyyMMdd")));
                if (!Directory.Exists(logDir))
                {
                    Directory.CreateDirectory(logDir);
                }

                var logPath = Path.Combine(logDir, string.Format("{0}-{1}-{2}.txt", SystemTime.Now.ToString("yyyyMMdd"), SystemTime.Now.ToString("HHmmss"), Guid.NewGuid().ToString("n").Substring(0, 8)));

                using (var fileStream = System.IO.File.OpenWrite(logPath))
                {
                    var notifyXml = resHandler.ParseXML();
                    //fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));

                    fileStream.Write(Encoding.Default.GetBytes(notifyXml), 0, Encoding.Default.GetByteCount(notifyXml));
                    fileStream.Close();
                }

                #endregion


                string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
                return(Content(xml, "text/xml"));
            }
            catch (Exception ex)
            {
                WeixinTrace.WeixinExceptionLog(new WeixinException(ex.Message, ex));
                throw;
            }
        }
예제 #28
0
        public string GetPaymentResult(ResponseHandler resHandler)
        {
            string return_code = "";
            string return_msg  = "";

            try
            {
                return_code = resHandler.GetParameter("return_code");
                return_msg  = resHandler.GetParameter("return_msg");
                string openid         = resHandler.GetParameter("openid");
                string total_fee      = resHandler.GetParameter("total_fee");
                string time_end       = resHandler.GetParameter("time_end");
                string out_trade_no   = resHandler.GetParameter("out_trade_no");
                string transaction_id = resHandler.GetParameter("transaction_id");

                Console.WriteLine();
                Console.WriteLine("return_code:" + return_code);
                Console.WriteLine("out_trade_no:" + out_trade_no);
                Console.WriteLine("openId:" + openid);
                Console.WriteLine("total_fee:" + total_fee);
                Console.WriteLine("time_end:" + time_end);
                Console.WriteLine("transaction_id:" + transaction_id);
                Console.WriteLine("------------------------------------------");

                resHandler.SetKey(tenPayV3Info.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    /* 这里可以进行订单处理的逻辑 */
                    // transaction_id:微信支付单号
                    // out_trade_no:商城实际订单号
                    // openId:用户信息
                    // total_fee:实际支付价格

                    if (pDao.checkOrderTotalPrice(out_trade_no, Convert.ToDouble(total_fee)))
                    {
                        if (pDao.updateOrderForPay(out_trade_no, transaction_id))
                        {
                            pDao.insertPayLog(out_trade_no, transaction_id, total_fee, openid, "支付完成-成功");
                        }
                        else
                        {
                            pDao.insertPayLog(out_trade_no, transaction_id, total_fee, openid, "支付完成-修改订单状态失败");
                        }
                    }
                    else
                    {
                        pDao.insertPayLog(out_trade_no, transaction_id, total_fee, openid, "支付完成-支付金额与订单总金额不符");
                    }
                }
                else
                {
                    return_code = "FAIL";
                    return_msg  = "签名失败";
                }
                return(string.Format(@"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>", return_code, return_msg));
            }
            catch (Exception ex)
            {
                return_code = "FAIL";
                return_msg  = "签名失败";
                return(string.Format(@"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>", return_code, return_msg));
            }
        }
예제 #29
0
        /// <summary>
        /// JS-SDK支付回调地址(在统一下单接口中设置notify_url)
        /// </summary>
        /// <returns></returns>
        public ActionResult PayNotifyUrl()
        {
            try
            {
                ResponseHandler resHandler = new ResponseHandler(HttpContext);

                string return_code = resHandler.GetParameter("return_code");
                string return_msg  = resHandler.GetParameter("return_msg");

                string res = null;

                resHandler.SetKey(TenPayV3Info.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    res = "success";//正确的订单处理
                    //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
                }
                else
                {
                    res = "wrong";//错误的订单处理
                }

                /* 这里可以进行订单处理的逻辑 */

                //发送支付成功的模板消息
                try
                {
                    string appId        = Config.SenparcWeixinSetting.TenPayV3_AppId;//与微信公众账号后台的AppId设置保持一致,区分大小写。
                    string openId       = resHandler.GetParameter("openid");
                    var    templateData = new WeixinTemplate_PaySuccess("https://weixin.senparc.com", "购买商品", "状态:" + return_code);

                    Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息参数", appId + " , " + openId);

                    var result = AdvancedAPIs.TemplateApi.SendTemplateMessage(appId, openId, templateData);
                }
                catch (Exception ex)
                {
                    Senparc.Weixin.WeixinTrace.SendCustomLog("支付成功模板消息", ex.ToString());
                }

                #region 记录日志

                var logDir = ServerUtility.ContentRootMapPath(string.Format("~/App_Data/TenPayNotify/{0}", SystemTime.Now.ToString("yyyyMMdd")));
                if (!Directory.Exists(logDir))
                {
                    Directory.CreateDirectory(logDir);
                }

                var logPath = Path.Combine(logDir, string.Format("{0}-{1}-{2}.txt", SystemTime.Now.ToString("yyyyMMdd"), SystemTime.Now.ToString("HHmmss"), Guid.NewGuid().ToString("n").Substring(0, 8)));

                using (var fileStream = System.IO.File.OpenWrite(logPath))
                {
                    var notifyXml = resHandler.ParseXML();
                    //fileStream.Write(Encoding.Default.GetBytes(res), 0, Encoding.Default.GetByteCount(res));

                    fileStream.Write(Encoding.Default.GetBytes(notifyXml), 0, Encoding.Default.GetByteCount(notifyXml));
                    fileStream.Close();
                }

                #endregion


                string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
                return(Content(xml, "text/xml"));
            }
            catch (Exception ex)
            {
                WeixinTrace.WeixinExceptionLog(new WeixinException(ex.Message, ex));
                throw;
            }
        }
예제 #30
0
        /// <summary>
        /// 微信支付异步通知
        /// </summary>
        /// <returns></returns>
        public IActionResult notify()
        {
            XTrace.WriteLine("微信支付异步通知开始:");
            try
            {
                ResponseHandler resHandler  = new ResponseHandler(null);
                string          return_code = resHandler.GetParameter("return_code");
                string          return_msg  = resHandler.GetParameter("return_msg");

                //配置
                Core.Config cfg        = Core.Config.GetSystemConfig();
                string      appId      = cfg.WXAppId;     // ConfigurationManager.AppSettings["WeixinAppId"];
                string      appSecrect = cfg.WXAppSecret; // ConfigurationManager.AppSettings["WeixinAppSecrect"];
                string      wxmchId    = cfg.MCHId;       // ConfigurationManager.AppSettings["WeixinMCHId"];
                string      wxmchKey   = cfg.MCHKey;      // ConfigurationManager.AppSettings["WeixinMCHKey"];

                TenPayV3Info TenPayV3Info = new TenPayV3Info(appId, appSecrect, wxmchId, wxmchKey, Utils.GetServerUrl() + "/wxpayment/notify", Utils.GetServerUrl() + "/wxpayment/notify");
                string       res          = null;

                resHandler.SetKey(TenPayV3Info.Key);
                //验证请求是否从微信发过来(安全)
                if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
                {
                    res = "success";                                               //正确的订单处理
                                                                                   //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
                    string out_trade_no = resHandler.GetParameter("out_trade_no"); //商户订单号
                    XTrace.WriteLine("微信异步通知订单号:" + out_trade_no + ";" + JsonConvert.SerializeObject(resHandler));

                    OnlinePayOrder payOrder = OnlinePayOrder.Find(OnlinePayOrder._.PayOrderNum == out_trade_no);
                    if (payOrder == null)
                    {
                        XTrace.WriteLine($"支付成功,但是支付订单不存在:{out_trade_no}");
                        res = "wrong";//错误的订单处理
                    }
                    else
                    {
                        if (payOrder.PaymentStatus == Utils.PaymentState[0])
                        {
                            //更新支付订单
                            payOrder.PaymentStatus = Utils.PaymentState[1];
                            payOrder.ReceiveTime   = DateTime.Now;
                            payOrder.IsOK          = 1;
                            payOrder.Update();

                            //获取订单
                            Order order = Order.Find(Order._.OrderNum == payOrder.OrderNum);
                            if (order != null)
                            {
                                order.PaymentStatus = Utils.PaymentState[1];
                                order.PayType       = "微信支付";
                                if (order.MyType == (int)Utils.MyType.分销商认证)
                                {
                                    order.OrderStatus = Utils.OrdersState[2];
                                }
                                order.Update();
                                //如果是属于升级会员的,那要修改会员状态
                                if (order.MyType == (int)Utils.MyType.分销商认证 && order.OrderType > 0)
                                {
                                    Member he = Member.FindById(order.UId);
                                    if (he.RoleId != order.OrderType)
                                    {
                                        he.RoleId          = order.OrderType;
                                        he.IsVerifySellers = 1;
                                        he.Update();
                                    }
                                }
                                //写入订单记录
                                OrderLog log = new OrderLog();
                                log.AddTime  = DateTime.Now;
                                log.OrderId  = order.Id;
                                log.OrderNum = order.OrderNum;
                                log.UId      = order.UId;
                                log.Actions  = "微信支付成功;订单号:" + order.OrderNum + ";金额:" + order.TotalPay.ToString("N2");
                                log.Insert();
                            }
                        }
                    }
                }
                else
                {
                    res = "wrong";//错误的订单处理
                }

                #region 记录日志
                XTrace.WriteLine($"微信支付回调处理结果:{res}");
                #endregion

                string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
                return(Content(xml, "text/xml"));
            }
            catch (Exception ex)
            {
                new WeixinException(ex.Message, ex);
                throw;
            }
        }