Example #1
0
        /// <summary>
        /// 线程执行关闭订单
        /// </summary>
        /// <param name="o"></param>

        public void CloselOrderRetry(object o)
        {
            List <object> param         = o as List <object>;
            string        out_trade_no  = param[0].ToString();
            var           sceneryDomain = param[1] as SceneryDomain;
            int           retryCount    = 50;

            for (int i = 0; i < retryCount; ++i)
            {
                Thread.Sleep(10000);
                WxPayData data = new WxPayData();
                data.SetValue("out_trade_no", out_trade_no);                             //随机字符串
                WxPayData result      = WxPayApi.CloseOrder(data, sceneryDomain.WeChat); //调用统一下单接口
                string    return_code = result.GetValue("return_code").ToString();       //获得统一下单接口返回的二维码链接

                //|| (return_code == "SUCCESS" && result.GetValue("err_code").ToString() == "SYSTEMERROR")
                if (return_code == "FAIL")
                {
                    LogHelper.WeChatLog(string.Format("取消-结果:{0},请求内容:{1}", return_code, result.GetValue("return_msg")));
                }
                if (return_code == "SUCCESS")
                {
                    LogHelper.WeChatLog(string.Format("wx:取消-结果:{0}", "SUCCESS"));

                    break;
                }

                if (i == retryCount - 1)
                {
                    // 处理到最后一次,还是未撤销成功,需要在商户数据库中对此单最标记,人工介入处理
                    //lblMessage.Text = cancelResponse.Body;
                    LogHelper.WeChatLog(string.Format("处理到最后一次,还是未撤销成功,需要在商户数据库中对此单最标记,人工介入处理,请求内容:{0}", out_trade_no));
                }
            }
        }
Example #2
0
        /// <summary>
        /// 取消订单
        /// </summary>
        /// <param name="out_trade_no"></param>
        /// <returns></returns>
        public string CloseOrder(string out_trade_no, SceneryDomain sceneryDomain)
        {
            string return_code = "";

            try
            {
                LogHelper.WeChatLog(string.Format("wx:正在取消订单:{0}", out_trade_no));
                WxPayData data = new WxPayData();
                data.SetValue("out_trade_no", out_trade_no);                        //随机字符串
                WxPayData result = WxPayApi.CloseOrder(data, sceneryDomain.WeChat); //调用统一下单接口
                return_code = result.GetValue("return_code").ToString();            //获得统一下单接口返回的二维码链接
                LogHelper.WeChatLog(string.Format("wx:取消-结果:{0}-{1}", return_code, result.GetValue("return_msg")));
                //失败 或者 成功时但err_code =SYSTEMERROR 时, 系统异常,请重新调用该API
                if (result.GetValue("return_code").ToString() == "SUCCESS" &&
                    result.GetValue("result_code").ToString() == "SUCCESS")
                {
                    LogHelper.WeChatLog("wx:开启线程");
                    ParameterizedThreadStart ParStart = new ParameterizedThreadStart(CloselOrderRetry);
                    Thread        myThread            = new Thread(ParStart);
                    List <object> objs = new List <object>();
                    objs.Add(out_trade_no);
                    objs.Add(sceneryDomain);
                    myThread.Start(objs);
                }
            }
            catch (Exception ex)
            {
                LogHelper.WeChatLog(string.Format("wx:正在取消订单", ex.Message));
            }
            return(return_code);
        }
Example #3
0
        public WxPayData GetUnifiedOrderResult(string OrderNum, string openid, int totalPrice)
        {
            var NewOrder = WxPayApi.GetOutNewOrder(OrderNum);
            //统一下单
            WxPayData data = new WxPayData();

            data.SetValue("body", "华体健康");
            //data.SetValue("attach", "购物款");//附加数据
            data.SetValue("out_trade_no", NewOrder);
            //data.SetValue("out_trade_no", DateTime.Now.Millisecond + "$" + models.Ordernum+"JS");
            data.SetValue("total_fee", totalPrice);
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
            //data.SetValue("goods_tag", "test");//商品标记,代金券或立减优惠功能的参数
            data.SetValue("trade_type", "JSAPI");
            data.SetValue("openid", openid);

            WxPayData result = WxPayApi.UnifiedOrder(data);//统一下单

            if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "")
            {
                WxPayApi.CloseOrder(data);//如果报错,关闭当前订单
                Log.Error(this.GetType().ToString(), "UnifiedOrder response error!");
                throw new WxPayException("UnifiedOrder response error!");
            }

            unifiedOrderResult = result;
            return(result);
        }
Example #4
0
        /// <summary>
        /// 关闭订单
        /// </summary>
        /// <param name="requestModel">请求对象</param>
        /// <returns></returns>
        public static CloseOrderResponseModel CloseOrder(CloseOrderModel requestModel)
        {
            WxPayData data = new WxPayData();

            data.SetValue("out_trade_no", requestModel.out_trade_no);
            LogUtil.WriteWxpayLog("关闭订单请求", "请求参数", data.ToJson());
            //提交订单查询请求给API,接收返回数据
            WxPayData result = WxPayApi.CloseOrder(data);

            LogUtil.WriteWxpayLog("关闭订单响应", "响应参数", result.ToJson());
            CloseOrderResponseModel response = LitJson.JsonMapper.ToObject <CloseOrderResponseModel>(result.ToJson());

            //Log.Info("OrderQuery", "OrderQuery process complete, result : " + result.ToXml());
            return(response);
        }
Example #5
0
        /// <summary>
        /// 关闭订单
        /// </summary>
        /// <param name="closeOrder">关闭订单实体</param>
        /// <param name="closeOrderBack">关闭订单返回实体</param>
        /// <param name="message">错误信息</param>
        /// <returns>交易是否成功</returns>
        internal bool CloseOrder(CloseOrder closeOrder, out CloseOrderBack closeOrderBack, out string message)
        {
            _log.Info("关闭订单 CloseOrder 开始执行");
            var data = new WxPayData();

            if (string.IsNullOrEmpty(closeOrder.Out_Trade_No))
            {
                message = "商户订单号 不能为空";
                _log.Error(message);
                closeOrderBack = null;
                return(false);
            }
            data.SetValue("out_trade_no", closeOrder.Out_Trade_No);
            //关闭订单
            _log.Info("WxPayApi.CloseOrder");
            var result = WxPayApi.CloseOrder(data);

            _log.Info("CloseOrder", "CloseOrder process complete, result : " + result.ToXml());
            var return_code = result.GetValue("return_code")?.ToString().ToUpper();
            var result_code = result.GetValue("result_code")?.ToString().ToUpper();

            if (return_code == "SUCCESS" && result_code == "SUCCESS")
            {
                _log.Info("关闭订单成功!");
                closeOrderBack = new CloseOrderBack()
                {
                    Err_Code     = result.GetValue("err_code")?.ToString(),
                    Err_Code_Des = result.GetValue("err_code_des")?.ToString(),
                    Result_Code  = result.GetValue("return_code")?.ToString(),
                    Result_Msg   = result.GetValue("return_msg")?.ToString(),
                    Return_Code  = result.GetValue("result_code")?.ToString(),
                    Return_Msg   = result.GetValue("result_msg")?.ToString()
                };
                message = "";
                return(true);
            }
            else
            {
                var return_msg   = result.GetValue("return_msg");
                var err_code_des = result.GetValue("err_code_des");
                message = $"{return_msg},{err_code_des}";
                _log.Error($"关闭订单失败:{message}");
                closeOrderBack = null;
                return(false);
            }
        }
Example #6
0
        public NormalResult ClosePayOrder(string outTradeNo, AuthorizerPayConfig config)
        {
            NormalResult result = new NormalResult();

            if (config == null)
            {
                result.Success = false;
                result.Message = "当前公众号没有微信支付所需配置信息。";
                return(result);
            }

            WeixinPayCloseOrderArgs closeOrderArgs = new WeixinPayCloseOrderArgs();

            closeOrderArgs.AppId      = config.AppId;
            closeOrderArgs.MchId      = config.MchId;
            closeOrderArgs.OutTradeNo = outTradeNo;

            WxPayArgs wxPayArgs = config.GetWxPayArgs(false);

            RequestPayApiResult <WeixinPayCloseOrderResult> closeOrderResult =
                WxPayApi.CloseOrder(closeOrderArgs, wxPayArgs);

            if (closeOrderResult.Success == false)
            {
                _log.Write("CloseOrder 失败",
                           closeOrderResult.Message + "\r\n"
                           + JsonHelper.Serializer(closeOrderArgs) + " "
                           + JsonHelper.Serializer(closeOrderResult),
                           TraceEventType.Warning);

                result.Success = false;
                result.Message = closeOrderResult.Message;
                return(result);
            }

            result.Success = true;
            return(result);
        }