You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
12 KiB
C#

using POSV.HttpApi;
using POSV.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace POSV.GuangChang
{
public class GuangChangUtils
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
protected static Dictionary<string, string> _errorDesc = new Dictionary<string, string>();
static GuangChangUtils()
{
//------------------------------------------------------
//系统没有定义的错误代码
_errorDesc.Add("9999", "应答的报文解析异常");
}
/// <summary>
/// 订单退款部分退款
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>> VposOrderRefundPart(VposOrderRefundPartRequest request)
{
Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>> result = null;
try
{
string jsonString = JsonUtils.Serialize(request.RefundPart);
OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business);
SortedList<string, string> parameters = OpenApiUtils.Instance.NewParameters(api);
parameters.Add("method", "vpos.order.refund.part");
parameters.Add("storeId", request.StoreId);
parameters.Add("tradeNo", request.TradeNo);
parameters.Add("payRefundNo", request.PayRefundNo);
parameters.Add("jsonString", jsonString);
var ignoreParameters = new List<string>();
ignoreParameters.Add("tradeNo");
ignoreParameters.Add("payRefundNo");
ignoreParameters.Add("jsonString");
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<GuangChangEntityResponse<VposOrderRefund>>(response);
if (data.Status == 1)
{
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>>(true, data.Message, data);
}
else
{
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>>(false, data.ErrMessage, data);
}
}
else
{
string errorMessage = PaserErrors(response);
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>>(false, errorMessage, null);
}
}
catch (Exception ex)
{
logger.Error(ex, "订单退款异常");
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>>(false, "订单退款异常,请检查网络连接", null);
}
return result;
}
/// <summary>
/// 订单退款
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>> VposOrderRefund(VposOrderRefundRequest request)
{
Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>> result = null;
try
{
OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business);
SortedList<string, string> parameters = OpenApiUtils.Instance.NewParameters(api);
parameters.Add("method", "vpos.order.refund");
parameters.Add("storeId", request.StoreId);
parameters.Add("tradeNo", request.TradeNo);
parameters.Add("payRefundNo", request.PayRefundNo);
var ignoreParameters = new List<string>();
ignoreParameters.Add("tradeNo");
ignoreParameters.Add("payRefundNo");
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<GuangChangEntityResponse<VposOrderRefund>>(response);
if (data.Status == 1)
{
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>>(true, data.Message, data);
}
else
{
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>>(false, data.ErrMessage, data);
}
}
else
{
string errorMessage = PaserErrors(response);
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>>(false, errorMessage, null);
}
}
catch (Exception ex)
{
logger.Error(ex, "订单退款异常");
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderRefund>>(false, "订单退款异常,请检查网络连接", null);
}
return result;
}
/// <summary>
/// 美食广场订单明细
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Tuple<bool, string, GuangChangEntityResponse<VposOrderDetail>> VposOrderDetail(VposOrderDetailRequest request)
{
Tuple<bool, string, GuangChangEntityResponse<VposOrderDetail>> result = null;
try
{
OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business);
SortedList<string, string> parameters = OpenApiUtils.Instance.NewParameters(api);
parameters.Add("method", "vpos.order.detail");
parameters.Add("storeId", request.StoreId);
parameters.Add("tradeNo", request.TradeNo);
var ignoreParameters = new List<string>();
ignoreParameters.Add("tradeNo");
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<GuangChangEntityResponse<VposOrderDetail>>(response);
if (data.Status == 1)
{
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderDetail>>(true, data.Message, data);
}
else
{
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderDetail>>(false, data.ErrMessage, data);
}
}
else
{
string errorMessage = PaserErrors(response);
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderDetail>>(false, errorMessage, null);
}
}
catch (Exception ex)
{
logger.Error(ex, "订单详情信息获取异常");
result = new Tuple<bool, string, GuangChangEntityResponse<VposOrderDetail>>(false, "订单详情获取异常,请检查网络连接", null);
}
return result;
}
/// <summary>
/// 美食广场订单列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Tuple<bool, string, GuangChangPagerResponse<VposOrder>> VposOrderList(VposOrderListRequest request)
{
Tuple<bool, string, GuangChangPagerResponse<VposOrder>> result = null;
try
{
OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business);
SortedList<string, string> parameters = OpenApiUtils.Instance.NewParameters(api);
parameters.Add("method", "vpos.order.list");
parameters.Add("storeId", request.StoreId);
parameters.Add("pageNumber", string.Format("{0}", request.PageNumber));
parameters.Add("pageSize", string.Format("{0}", request.PageSize));
if (request.Mobile!=null &&!"".Equals(request.Mobile)) {
parameters.Add("mobile", request.Mobile);
}
if (request.SeqNo != null && !"".Equals(request.SeqNo))
{
parameters.Add("seqNo", request.SeqNo);
}
parameters.Add("startTime", request.StartTime);
parameters.Add("endTime", request.EndTime);
parameters.Add("status", string.Format("{0}", request.Status));
var ignoreParameters = new List<string>();
ignoreParameters.Add("pageNumber");
ignoreParameters.Add("pageSize");
ignoreParameters.Add("mobile");
ignoreParameters.Add("seqNo");
ignoreParameters.Add("startTime");
ignoreParameters.Add("endTime");
ignoreParameters.Add("status");
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<GuangChangPagerResponse<VposOrder>>(response);
if (data.Status == 1)
{
result = new Tuple<bool, string, GuangChangPagerResponse<VposOrder>>(true, data.Message, data);
}
else
{
result = new Tuple<bool, string, GuangChangPagerResponse<VposOrder>>(false, data.ErrMessage, data);
}
}
else
{
string errorMessage = PaserErrors(response);
result = new Tuple<bool, string, GuangChangPagerResponse<VposOrder>>(false, errorMessage, null);
}
}
catch (Exception ex)
{
logger.Error(ex, "订单查询异常");
result = new Tuple<bool, string, GuangChangPagerResponse<VposOrder>>(false, "订单询异常,请检查网络连接", null);
}
return result;
}
protected static string PaserErrors(string response)
{
string result = string.Empty;
try
{
logger.Error(response);
Errors mainError = JsonUtils.Deserialize<Errors>(response);
if (_errorDesc.ContainsKey(mainError.Code))
{
result = _errorDesc[mainError.Code];
}
else
{
result = mainError.Message;
}
List<SubErrors> 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;
}
}
}