using BBWYB.Common.Http; using BBWYB.Common.Models; using Newtonsoft.Json; using SDKAdapter; namespace BBWYB.Server.Business { public class KuaiDi100Manager : IDenpendency { private RestApiService restApiService; private ExpressCompanyNameConverter expressCompanyNameConverter; public IList KuaiDi100PushStateList_ZaiTu = new List() { 0, 1001, 1002, 1003 }; public IList KuaiDi100PushStateList_LanShou = new List() { 1, 101, 102, 103 }; public IList KuaiDi100PushStateList_QianShou = new List() { 3, 301, 302, 303, 304 }; public IList KuaiDi100PushStateList_PaiJian = new List() { 5, 501 }; public KuaiDi100Manager(RestApiService restApiService, ExpressCompanyNameConverter expressCompanyNameConverter) { this.restApiService = restApiService; this.expressCompanyNameConverter = expressCompanyNameConverter; } private void ThrowSubscribeError(string waybillno, string sourceExpressName, string kuaidi100CompanyCode, string error) { throw new Exception($"订阅快递100失败 waybillno:{waybillno} sourceExpressName:{sourceExpressName} kuaidi100CompanyCode:{kuaidi100CompanyCode} error:{error}"); } /// /// 订阅快递100 /// /// /// /// /// public void SubscribeKuaiDi100(string waybillno, string sourceExpressName, string kuaidi100CompanyCode, string callbackUrl) { if (string.IsNullOrEmpty(sourceExpressName) && string.IsNullOrEmpty(kuaidi100CompanyCode)) ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, "原始快递公司名称和快递100公司编码必须任意一个有值"); if (string.IsNullOrEmpty(kuaidi100CompanyCode)) { kuaidi100CompanyCode = expressCompanyNameConverter.ConverterToKuaiDi100CompanyCode(sourceExpressName); if (string.IsNullOrEmpty(kuaidi100CompanyCode)) ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, "无翻译结果"); } var paramStr = JsonConvert.SerializeObject(new { company = kuaidi100CompanyCode, number = waybillno, key = "SdcRPzxo8802", parameters = new { callbackurl = callbackUrl, salt = Guid.NewGuid(), resultv2 = "4" } }); var subscribeResult = restApiService.SendRequest("https://poll.kuaidi100.com", "poll", $"schema=json¶m={paramStr}", null, HttpMethod.Post, RestApiService.ContentType_Form); if (subscribeResult.StatusCode != System.Net.HttpStatusCode.OK) ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, subscribeResult.Content); var subscribeResponse = JsonConvert.DeserializeObject(subscribeResult.Content); if (!subscribeResponse.result) ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, subscribeResponse.message); } /// /// 获取物流状态 ZaiTu LanShou QianShou PaiJian Unknow /// /// /// public string GetExpressState(int kuaidi100State) { if (KuaiDi100PushStateList_ZaiTu.Contains(kuaidi100State)) return "ZaiTu"; if (KuaiDi100PushStateList_LanShou.Contains(kuaidi100State)) return "LanShou"; if (KuaiDi100PushStateList_QianShou.Contains(kuaidi100State)) return "QianShou"; if (KuaiDi100PushStateList_PaiJian.Contains(kuaidi100State)) return "PaiJian"; return "Unknow"; } } public class KuaiDi100Response { public bool result { get; set; } public int returnCode { get; set; } public string message { get; set; } } }