using POSV.Card; using POSV.HttpApi; using POSV.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace POSV.QiMai { public class QiMaiUtils { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); protected static Dictionary _errorDesc = new Dictionary(); static QiMaiUtils() { //------------------------------------------------------ //系统没有定义的错误代码 _errorDesc.Add("9999", "应答的报文解析异常"); } /// /// 门店信息 /// /// /// public static Tuple> QiMaiShopQuery(QiMaiShopQueryRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.shop.query"); parameters.Add("storeId", request.StoreId); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信门店信息获取异常"); result = new Tuple>(false, "微信门店信息获取异常,请检查网络连接", null); } return result; } /// /// 企迈小程序待处理订单查询,这个接口只返回外卖订单,堂食订单默认已经接单 /// /// /// public static Tuple> QiMaiQrderHandle(QiMaiQrderHandleRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.order.handle"); parameters.Add("storeId", request.StoreId); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "待处理企迈订单查询异常"); result = new Tuple>(false, "待处理订单询异常,本次操作无效", null); } return result; } /// /// 美团历史订单查询 /// /// /// public static Tuple> QiMaiQrderList(QiMaiQrderListRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.order.list"); parameters.Add("storeId", request.StoreId); parameters.Add("pageNumber", string.Format("{0}", request.PageNumber)); parameters.Add("pageSize", string.Format("{0}", request.PageSize)); parameters.Add("orderDate", request.OrderDate); parameters.Add("type", string.Format("{0}", request.Type)); var ignoreParameters = new List(); ignoreParameters.Add("pageNumber"); ignoreParameters.Add("pageSize"); ignoreParameters.Add("orderDate"); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters, ignoreParameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信订单查询异常"); result = new Tuple>(false, "微信订单询异常,本次操作无效", null); } return result; } /// /// 门店状态变更 /// /// /// public static Tuple> QiMaiShopStatus(QiMaiShopStatusRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.shop.status"); parameters.Add("storeId", request.StoreId); parameters.Add("status", request.Status); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信门店状态更改异常"); result = new Tuple>(false, "微信门店状态更改异常,请检查网络连接", null); } return result; } /// /// 拒绝退单 /// /// /// public static Tuple> QiMaiOrderRefuseRefund(QiMaiOrderRefuseRefundRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); List ignoreParameters = new List(); parameters.Add("method", "qimai.order.refuserefund"); parameters.Add("storeId", request.StoreId); parameters.Add("orderId", request.OrderId); parameters.Add("reason", request.Reason); ignoreParameters.Add("reason"); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters, ignoreParameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信拒绝退单异常"); result = new Tuple>(false, "微信拒绝退单异常,请检查网络连接", null); } return result; } /// /// 订单同意退单(主动) /// /// /// public static Tuple> QiMaiOrderRefund(QiMaiOrderRefundRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.order.refund"); parameters.Add("storeId", request.StoreId); parameters.Add("orderId", request.OrderId); parameters.Add("orderNo", request.OrderNo); parameters.Add("amount", string.Format("{0}", request.Amount));//zhangy 2020-04-02 Edit,不再以这个字段为准,企迈:wallte_amount+amount,接口修改兼容逻辑 List ignoreParameters = new List(); ignoreParameters.Add("amount"); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters, ignoreParameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信同意退单异常"); result = new Tuple>(false, "微信同意退单异常,请检查网络连接", null); } return result; } /// /// 同意退单 /// /// /// public static Tuple> QiMaiOrderAgreeRefund(QiMaiOrderAgreeRefundRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.order.agreerefund"); parameters.Add("storeId", request.StoreId); parameters.Add("orderId", request.OrderId); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信同意退单异常"); result = new Tuple>(false, "微信同意退单异常,请检查网络连接", null); } return result; } /// /// 订单拒单 /// /// /// public static Tuple> QiMaiOrderRefuseReceive(QiMaiOrderRefuseReceiveRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.order.refusereceive"); parameters.Add("storeId", request.StoreId); parameters.Add("orderId", request.OrderId); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信订单拒单异常"); result = new Tuple>(false, "微信订单拒单异常,请检查网络连接", null); } return result; } /// /// 订单接单 /// /// /// public static Tuple> QiMaiOrderReceive(QiMaiOrderReceiveRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.order.receive"); parameters.Add("storeId", request.StoreId); parameters.Add("orderId", request.OrderId); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信订单接单异常"); result = new Tuple>(false, "微信订单接单异常,请检查网络连接", null); } return result; } /// /// 订单信息 /// /// /// public static Tuple> QiMaiOrderInfo(QiMaiOrderRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.WaiMai); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "qimai.order.query"); parameters.Add("storeId", request.StoreId); parameters.Add("orderId", request.OrderId); parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters)); string response = HttpClientUtils.PostAsync(api, api.Url, parameters); //获取成功 if (Constant.IsSuccessful(response)) { var data = JsonUtils.Deserialize>(response); if (data.Status == 1) { result = new Tuple>(true, data.Message, data); } else { result = new Tuple>(false, data.ErrMessage, data); } } else { string errorMessage = PaserErrors(response); result = new Tuple>(false, errorMessage, null); } } catch (Exception ex) { logger.Error(ex, "微信订单查询异常"); result = new Tuple>(false, "微信订单查询异常,请检查网络连接", null); } return result; } protected static string PaserErrors(string response) { string result = string.Empty; try { logger.Error(response); Errors mainError = JsonUtils.Deserialize(response); if (_errorDesc.ContainsKey(mainError.Code)) { result = _errorDesc[mainError.Code]; } else { result = mainError.Message; } List subError = mainError.SubErrors; if (subError != null && subError.Count > 0) { SubErrors error = subError[0]; if (_errorDesc.ContainsKey(error.Code)) { result = _errorDesc[error.Code]; } else { result = error.Message; } } } catch (Exception ex) { logger.Error(ex, "非法的错误信息格式"); result = _errorDesc["9999"]; } return result; } } }