JuheIpAddressUtils.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using JiaZhiQuan.Common.JuheAPI.PhoneNumber;
  2. using Newtonsoft.Json;
  3. using System.Net.Http;
  4. using System.Threading.Tasks;
  5. using System;
  6. using Wicture.DbRESTFul;
  7. namespace JiaZhiQuan.Common.JuheAPI.IpAddress
  8. {
  9. /// <summary>
  10. /// IP归属地查询
  11. /// </summary>
  12. public class JuheIpAddressUtils
  13. {
  14. const string JUHE_IP_KEY = "fe8483723642e2ec7df225caf4ae7889";
  15. /// <summary>
  16. /// 调用聚合API查询IP信息
  17. /// <return>Item1:是不是需要保存结果到ES,Item2:拼接的地址信息,Item3:省,Item4:市</return>
  18. /// </summary>
  19. public static async Task<(bool, string, string, string)> GetIpAddressAsync(string ip, HttpClient client)
  20. {
  21. try
  22. {
  23. var res = await client.GetStringAsync($"http://apis.juhe.cn/ip/ipNewV3?ip={ip}&key={JUHE_IP_KEY}");
  24. var obj = JsonConvert.DeserializeObject<JuheResponseModel<JuheMobileAddressResultDetails>>(res);
  25. if (obj.ResultCode == "200" && obj.ErrorCode == 0)
  26. {
  27. string province = string.IsNullOrEmpty(obj.Result.Province) ? "未知" : obj.Result.Province,
  28. city = string.IsNullOrEmpty(obj.Result.City) ? "未知" : obj.Result.City;
  29. string addr = !province.Equals(city) ? $"{province}{city}" : province;
  30. return (true, addr, province, city);
  31. }
  32. // 查询无结果
  33. else if (obj.ResultCode == "200" && (obj.ErrorCode == 200103 || obj.ErrorCode == 200105))
  34. {
  35. return (true, "未知", "未知", "未知");
  36. }
  37. else
  38. {
  39. LoggerManager.Logger.Error($"调用聚合IP归属地API失败,请求结果:" + res);
  40. return (false, "未知", "未知", "未知");
  41. }
  42. }
  43. catch (Exception ex)
  44. {
  45. LoggerManager.Logger.Error(ex, $"调用聚合IP归属地API报错:" + ex.Message);
  46. return (false, "未知", "未知", "未知");
  47. }
  48. }
  49. }
  50. public class JuheMobileAddressResultDetails
  51. {
  52. public string Country { get; set; }
  53. public string Province { get; set; }
  54. public string City { get; set; }
  55. public string District { get; set; }
  56. public string Isp { get; set; }
  57. }
  58. }