コード例 #1
0
ファイル: SelfServiceEquipment.cs プロジェクト: ghbylmt/LsPay
        /// <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
        }
コード例 #2
0
ファイル: SelfServiceEquipment.cs プロジェクト: ghbylmt/LsPay
        /// <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);
        }
コード例 #3
0
        /// <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);
        }