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.

250 lines
9.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using POSV.Entity;
using POSV.HttpResponse;
using POSV.Utils;
namespace POSV.HttpApi
{
/// <summary>
/// POS相关API
/// </summary>
public class PosApi:BaseApi
{
protected static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
/// <summary>
/// POS注册码验证
/// </summary>
/// <param name="tenantNo"></param>
/// <param name="authCode"></param>
/// <returns></returns>
public static Tuple<bool , string , PollCode> ValidatePollCode(string tenantNo , string authCode)
{
bool isException = false;
try
{
//调用业务系统开放平台
var api = OpenApiUtils.Instance.NextApi(ApiType.Business);
//构建请求参数
SortedList<string , string> parameters = new SortedList<string , string>();
parameters.Add("type" , "pollcode");
parameters.Add("tenantId" , tenantNo);
parameters.Add("pollcode" , authCode);
//收到应答
var response = HttpClientUtils.PostAsync(api , api.Open , parameters);
if (Constant.IsSuccessful(response))
{
//转换应答结果为对象
var result = JsonUtils.Deserialize<OpenResponse<PollCode>>(response);
//请求通过
if ("1".Equals(result.Status))
{
var pollCode = result.Data;
pollCode.TenantId = tenantNo;
pollCode.AuthCode = authCode;
return new Tuple<bool , string , PollCode>(true , result.Message , pollCode);
}
else
{
return new Tuple<bool , string , PollCode>(false , result.Message , null);
}
}
else
{
string errMessage = PaserErrors(response);
return new Tuple<bool , string , PollCode>(false , errMessage , null);
}
}
catch (Exception ex)
{
isException = true;
logger.Error(ex , ex.Message);
return new Tuple<bool , string , PollCode>(false , "注册码验证异常" , null);
}
finally
{
//如果POS注冊成功,同步會員系統
if (!isException)
{
}
}
}
public static Tuple<bool , string> MemberRegister(PollCode poll , Authc authc)
{
bool isException = false;
try
{
//调用业务系统开放平台
var api = OpenApiUtils.Instance.NextApi(ApiType.Card);
//构建请求参数
SortedList<string , string> parameters = new SortedList<string , string>();
parameters.Add("type" , "posregister");
parameters.Add("tenantId" , authc.TenantId);
parameters.Add("busNo" , authc.TenantId + "00");
parameters.Add("shopId" , authc.StoreId);
parameters.Add("shopNo" , authc.StoreNo);
parameters.Add("shopName" , authc.StoreName);
var storeType = poll.Response.StoreType;
parameters.Add("shopTypeId" , storeType == null ? string.Empty : storeType.Id);
parameters.Add("shopTypeNo" , storeType == null ? string.Empty : storeType.No);
parameters.Add("shopTypeSign" , storeType == null ? string.Empty : storeType.Sign);
parameters.Add("shopTypeName" , storeType == null ? string.Empty : storeType.Name);
parameters.Add("shopAddress" , storeType == null ? string.Empty : storeType.Address);
parameters.Add("posId" , authc.PosId);
parameters.Add("posNo" , authc.PosNo);
parameters.Add("computerName" , authc.CompterName);
parameters.Add("MACAddress" , authc.MacAddress);
parameters.Add("serialNumber" , authc.DiskSerialNumber);
parameters.Add("cpuNumber" , authc.CpuSerialNumber);
var ignore = new List<string>();
ignore.Add("shopAddress");
ignore.Add("posId");
ignore.Add("computerName");
ignore.Add("MACAddress");
ignore.Add("serialNumber");
ignore.Add("cpuNumber");
parameters.Add("sign" , OpenApiUtils.Instance.Sign(api , parameters , ignore));
//收到应答
var response = HttpClientUtils.PostAsync(api , api.Open , parameters);
if (Constant.IsSuccessful(response))
{
//转换应答结果为对象
var result = JsonUtils.Deserialize<OpenResponse<NullObject>>(response);
//请求通过
if ("1".Equals(result.Status))
{
return new Tuple<bool , string>(true , result.Message);
}
else
{
return new Tuple<bool , string>(false , result.Message);
}
}
else
{
string errMessage = PaserErrors(response);
return new Tuple<bool , string>(false , errMessage);
}
}
catch (Exception ex)
{
isException = true;
logger.Error(ex , ex.Message);
return new Tuple<bool , string>(false , "会员POS注册异常");
}
finally
{
}
}
/// <summary>
/// POS注册
/// </summary>
/// <param name="authc"></param>
/// <param name="pollCode"></param>
/// <returns></returns>
public static Tuple<bool , string , Authc> PosRegister(Authc authc , PollCode pollCode)
{
try
{
//连接开放平台
OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business);
//重置当前的应用密钥
api.AppKey = pollCode.Response.AppKey;
api.AppSecret = pollCode.Response.AppSecret;
//构建请求参数
SortedList<string , string> parameters = OpenApiUtils.Instance.NewParameters(api);
parameters.Add("method" , "pos.register");
parameters.Add("appSign" , Constant.APP_SIGN);
parameters.Add("terminalType" , Constant.TERMINAL_TYPE);
parameters.Add("pollcode" , pollCode.AuthCode);
parameters.Add("name" , authc.CompterName);
parameters.Add("MACAddress" , authc.MacAddress);
parameters.Add("serialNumber" , authc.DiskSerialNumber);
parameters.Add("cpuNumber" , authc.CpuSerialNumber);
var ignore = new List<string>();
ignore.Add("name");
ignore.Add("MACAddress");
ignore.Add("serialNumber");
ignore.Add("cpuNumber");
parameters.Add("sign" , OpenApiUtils.Instance.Sign(api , parameters , ignore));
string response = HttpClientUtils.PostAsync(api , api.Url , parameters);
if (Constant.IsSuccessful(response))
{
var result = JsonUtils.Deserialize<EntityResponse<PosRegister>>(response);
//成功
if(result.Status == 1)
{
authc.TenantId = pollCode.TenantId;
authc.StoreId = result.Data.StoreId;
authc.StoreNo = result.Data.StoreNo;
authc.StoreName = result.Data.StoreName;
authc.PosNo = result.Data.PosNo;
authc.PosId = result.Data.PosId;
var storeType = pollCode.Response.StoreType;
authc.StroeTypeId = storeType != null ? storeType.Id : string.Empty;
authc.StroeTypeNo = storeType != null ? storeType.No : string.Empty;
authc.StroeTypeName = storeType != null ? storeType.Name : string.Empty;
authc.StroeTypeSign = storeType != null ? storeType.Sign : string.Empty;
authc.StroeAddress = storeType != null ? storeType.Address : string.Empty;
return new Tuple<bool , string , Authc>(true , result.Message , authc);
}
else
{
return new Tuple<bool , string , Authc>(false , result.Message , null);
}
}
else
{
string errMessage = PaserErrors(response);
return new Tuple<bool , string , Authc>(false , errMessage , null);
}
}
catch (Exception ex)
{
logger.Error(ex , ex.Message);
return new Tuple<bool , string , Authc>(false , "POS注册异常" , null);
}
}
}
}