/// <summary> /// 微信刷卡支付 /// </summary> /// <param name="micropayModel">刷卡支付请求</param> /// <param name="payOverCallBack">支付结束回调函数</param> /// <param name="payStateChangeCallBack">支付状态改变回调函数</param> public void Micropay(MicropayModel micropayModel, Action <bool, MicropayResponseModel> payOverCallBack, Action <bool, OrderQueryResponseModel> payStateChangeCallBack) { MicropayResponseModel response = ServiceUtil.WxPayClient.Micropay(micropayModel); ServiceUtil.WxPayClient.Close(); if (response.result_code == ResultCode.SUCCESS) {//接口调用成功,业务成功 payOverCallBack(true, response); return; } #region 1.业务结果确定处理失败 if (response.err_code != ErrorCode.SYSTEMERROR && response.err_code != ErrorCode.USERPAYING) { payOverCallBack(false, response); return; } #endregion #region 2.不能确定是否失败,需查单 //用商户订单号去查单 string out_trade_no = response.out_trade_no; OrderQueryResponseModel orderQueryResponse = new OrderQueryResponseModel(); orderQueryResponse = OrderQuery(new WxpayModel.OrderQueryModel() { out_trade_no = out_trade_no }, payStateChangeCallBack); #endregion }
/// <summary> /// 订单查询 /// </summary> /// <param name="queryModel">订单查询请求参数</param> /// <param name="payStateChangeCallBack">支付状态改变回调函数</param> /// <returns></returns> public OrderQueryResponseModel OrderQuery(WxpayModel.OrderQueryModel queryModel, Action <bool, OrderQueryResponseModel> payStateChangeCallBack) { OrderQueryResponseModel response = ServiceUtil.WxPayClient.OrderQuery(queryModel); ServiceUtil.AliPayClient.Close(); if (response.return_code == ReturnCode.SUCCESS) { switch (response.trade_state) { case TradeState.NOTPAY: case TradeState.USERPAYING: payStateChangeCallBack(false, response); Thread.Sleep(3000); //间隔3s请求一次 response = OrderQuery(queryModel, payStateChangeCallBack); break; case TradeState.SUCCESS: payStateChangeCallBack(true, response); break; case TradeState.CLOSED: case TradeState.REFUND: case TradeState.REVOKED: default: payStateChangeCallBack(false, response); break; } } else { switch (response.err_code) { case ErrorCode.ORDERPAID: payStateChangeCallBack(true, response); break; case ErrorCode.SYSTEMERROR: payStateChangeCallBack(false, response); Thread.Sleep(3000); //间隔3s请求一次 response = OrderQuery(queryModel, payStateChangeCallBack); break; default: payStateChangeCallBack(false, response); break; } } return(response); }
/// <summary> /// 订单查询 /// </summary> /// <param name="requestModel">请求实体</param> /// <returns></returns> public static OrderQueryResponseModel OrderQuery(OrderQueryModel requestModel) { WxPayData data = new WxPayData(); if (!string.IsNullOrEmpty(requestModel.transaction_id)) {//如果微信订单号存在,则以微信订单号为准 data.SetValue("transaction_id", requestModel.transaction_id); } else {//微信订单号不存在,才根据商户订单号去查单 data.SetValue("out_trade_no", requestModel.out_trade_no); } LogUtil.WriteWxpayLog("订单查询请求", "请求参数", data.ToJson()); //提交订单查询请求给API,接收返回数据 WxPayData result = WxPayApi.OrderQuery(data); OrderQueryResponseModel response = LitJson.JsonMapper.ToObject <OrderQueryResponseModel>(result.ToJson()); LogUtil.WriteWxpayLog("订单查询响应", "响应参数", result.ToJson()); //Log.Info("OrderQuery", "OrderQuery process complete, result : " + result.ToXml()); return(response); }