using System; using System.Collections.Generic; using System.Linq; using System.Text; using POSV.HttpApi; using POSV.Utils; using POSV.Stock; using POSV.WeiXin; using POSV.Entity.WeiXinDc; namespace POSV.Card { public class WeiXinOrderUtils { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); protected static Dictionary _errorDesc = new Dictionary(); static WeiXinOrderUtils() { //------------------------------------------------------ //系统没有定义的错误代码 _errorDesc.Add("9999" , "应答的报文解析异常"); } /// /// 微信点餐商品停售 /// /// /// public static Tuple> WxdcGoodsSellOut(WxdcGoodsSellOutRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.goods.sellout"); parameters.Add("storeId", request.StoreId); parameters.Add("productIds", request.ProductIds); var ignoreParameters = new List(); ignoreParameters.Add("productIds"); 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> WxdcGoodsSellin(WxdcGoodsSellinRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.goods.sellin"); parameters.Add("storeId", request.StoreId); parameters.Add("productIds", request.ProductIds); var ignoreParameters = new List(); ignoreParameters.Add("productIds"); 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> WxdcGoodsCategory(WxdcGoodsCategoryListRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.goods.category"); 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> WxdcGoods(WxdcGoodsListRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.goods.list"); parameters.Add("storeId", request.StoreId); parameters.Add("categoryId", request.CategoryId); parameters.Add("property", request.Property); parameters.Add("keyword", request.Keyword); parameters.Add("pageNumber", string.Format("{0}", request.PageNumber)); parameters.Add("pageSize", string.Format("{0}", request.PageSize)); var ignoreParameters = new List(); ignoreParameters.Add("categoryId"); ignoreParameters.Add("property"); ignoreParameters.Add("keyword"); ignoreParameters.Add("pageNumber"); ignoreParameters.Add("pageSize"); 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> WeiXinOrderRefundRefuse(WeiXinOrderRefundRefuseRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.order.refund.store.refuse"); parameters.Add("erpStoreId", request.StoreId); parameters.Add("ticketId", request.TicketId); parameters.Add("refuseReason", request.RefuseReason); var ignoreParameters = new List(); ignoreParameters.Add("refuseReason"); 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> WeiXinOrderRefundAgree(WeiXinOrderRefundAgreeRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.order.refund.store.agree"); parameters.Add("erpStoreId", request.StoreId); parameters.Add("ticketId", request.TicketId); 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> WeiXinShopOpen(WeiXinShopOpenRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.store.open.status.update"); parameters.Add("erpStoreId", request.StoreId); parameters.Add("openStatus", string.Format("{0}", request.OpenStatus)); 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> WeiXinShopInfo(WeiXinShopInfoRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.store.info"); parameters.Add("erpStoreId", 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> WeiXinOrderCancel(WeiXinOrderCancelRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.store.order.cancel"); parameters.Add("erpStoreId", request.StoreId); parameters.Add("ticketId", request.TicketId); parameters.Add("cancelReason", request.CancelReason); var ignoreParameters = new List(); ignoreParameters.Add("cancelReason"); 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> WeiXinOrderConfirm(WeiXinOrderConfirmRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.store.order.confirm"); parameters.Add("erpStoreId", request.StoreId); parameters.Add("ticketId", request.TicketId); 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> WeiXinOrder(WeiXinOrderRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.sales.order.info"); parameters.Add("erpStoreId", request.StoreId); parameters.Add("ticketId", request.TicketId); parameters.Add("memberId", request.MemberId); 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> QueryWeiXinOrder(WeiXinOrderListRequest request) { Tuple> result = null; try { OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business); SortedList parameters = OpenApiUtils.Instance.NewParameters(api); parameters.Add("method", "wxdc.store.order.list"); parameters.Add("erpStoreId", request.StoreId); if (request.Status!=-1) { parameters.Add("status", string.Format("{0}", request.Status)); } parameters.Add("startDate", request.StartDate); parameters.Add("endDate", request.EndDate); parameters.Add("orderField", request.OrderField); parameters.Add("orderType", request.OrderType); parameters.Add("pageNumber", string.Format("{0}", request.PageNumber)); parameters.Add("pageSize", string.Format("{0}", request.PageSize)); var ignoreParameters = new List(); ignoreParameters.Add("pageNumber"); ignoreParameters.Add("pageSize"); 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; } 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; } } }