KDNiaoHelper.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Net.Http;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Wicture.DbRESTFul;
  7. namespace JiaZhiQuan.Common.KDNiao
  8. {
  9. /// <summary>
  10. /// 快递鸟帮助类
  11. /// </summary>
  12. public static class KDNiaoHelper
  13. {
  14. /// <summary>
  15. /// 轨迹订阅地址
  16. /// </summary>
  17. private static string trackApiUrl = "https://api.kdniao.com/api/dist";
  18. private static string trackInfoApiUrl = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
  19. /// <summary>
  20. /// 轨迹订阅接口
  21. /// </summary>
  22. /// <param name="request"></param>
  23. /// <param name="httpClient"></param>
  24. /// <returns></returns>
  25. public static async Task<KDNiaoTrackResponse> SubscribeTrack(KDNiaoRequest request, IHttpClientFactory httpClientFactory)
  26. {
  27. var res = new KDNiaoTrackResponse();
  28. try
  29. {
  30. using (var httpClient = httpClientFactory.CreateClient())
  31. {
  32. var content = new StringContent($"RequestData={request.RequestData}&RequestType={(int)request.RequestType}&EBusinessID={request.EBusinessID}&DataSign={request.DataSign}&DataType={request.DataType}", Encoding.UTF8, "application/x-www-form-urlencoded");
  33. var response = await httpClient.PostAsync(trackApiUrl, content);
  34. if (response.IsSuccessStatusCode)
  35. {
  36. string responseContent = await response.Content.ReadAsStringAsync();
  37. res = JsonConvert.DeserializeObject<KDNiaoTrackResponse>(responseContent);
  38. }
  39. else
  40. {
  41. LoggerManager.Logger.Error($"调用快递鸟轨迹订阅失败: {response}");
  42. }
  43. }
  44. return res;
  45. }
  46. catch (System.Exception ex)
  47. {
  48. LoggerManager.Logger.Error($"调用快递鸟轨迹订阅失败: {ex.Message}");
  49. return res;
  50. }
  51. }
  52. /// <summary>
  53. /// 即时查询、快递查询接口 RequestType不同
  54. /// </summary>
  55. /// <param name="request"></param>
  56. /// <param name="httpClient"></param>
  57. /// <returns></returns>
  58. public static async Task<KDNiaoTrackDataItem> QueryTrackingInfo(KDNiaoRequest request, IHttpClientFactory httpClientFactory)
  59. {
  60. var res = new KDNiaoTrackDataItem();
  61. try
  62. {
  63. using (var httpClient = httpClientFactory.CreateClient())
  64. {
  65. var content = new StringContent($"RequestData={request.RequestData}&RequestType={(int)request.RequestType}&EBusinessID={request.EBusinessID}&DataSign={request.DataSign}&DataType={request.DataType}", Encoding.UTF8, "application/x-www-form-urlencoded");
  66. var response = await httpClient.PostAsync(trackInfoApiUrl, content);
  67. if (response.IsSuccessStatusCode)
  68. {
  69. string responseContent = await response.Content.ReadAsStringAsync();
  70. res = JsonConvert.DeserializeObject<KDNiaoTrackDataItem>(responseContent);
  71. }
  72. else
  73. {
  74. LoggerManager.Logger.Error($"调用快递鸟即时查询接口失败: {response}");
  75. }
  76. }
  77. return res;
  78. }
  79. catch (System.Exception ex)
  80. {
  81. LoggerManager.Logger.Error($"调用快递鸟即时查询接口失败: {ex.Message}");
  82. return res;
  83. }
  84. }
  85. /// <summary>
  86. /// 快递在途查询
  87. /// </summary>
  88. /// <param name="LogisticCode">快递单号</param>
  89. /// <param name="ShipperCode">快递公司编码,需维护进系统</param>
  90. /// <param name="receivePhone">收货人手机号码,会自动截取为后4位</param>
  91. /// <returns></returns>
  92. public static async Task<KDNiaoTrackDataItem> QueryLogistics(string LogisticCode,
  93. string ShipperCode,string receivePhone, string EBusinessID, string ApiKey,
  94. IHttpClientFactory httpClientFactory) {
  95. var resp = new KDNiaoTrackDataItem();
  96. string CustomerName = null;
  97. try {
  98. if ("SF".Equals(ShipperCode)) {
  99. if (receivePhone == null || receivePhone.Length < 4) {
  100. throw new System.Exception("当ShipperCode为顺风时,需提供收货人手机号后4位");
  101. }
  102. CustomerName = receivePhone[^4..];
  103. }
  104. var requestData = new {
  105. LogisticCode,
  106. ShipperCode,
  107. CustomerName
  108. };
  109. var data = JsonConvert.SerializeObject(requestData);
  110. KDNiaoRequest request = new KDNiaoRequest(EBusinessID, ApiKey,
  111. data, KDNiaoRequestType.即时查询_增值版);
  112. resp = await QueryTrackingInfo(request, httpClientFactory);
  113. } catch(Exception ex) {
  114. LoggerManager.Logger.Error("快递查询失败:" + ex.Message);
  115. }
  116. if (null == resp.Traces) { resp.Traces = new System.Collections.Generic.List<KDNiaoTrace>(); }
  117. return resp;
  118. }
  119. }
  120. }