/// <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)); } } }
/// <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); }
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); }
/// <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); }
/// <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); } }
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); }