package cn.lili.common.utils; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.http.HttpUtil; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; /** * ip工具 * * @author Chopper */ @Slf4j @Component public class IpHelper { /** * qq lbs 地区查询key */ @Value("${lili.lbs.key}") private String key; /** * qq lbs 地区查询key */ @Value("${lili.lbs.sk}") private String sk; private static final String API = "https://apis.map.qq.com"; /** * 获取IP返回地理信息 * * @param request 请求参数 * @return 城市信息 */ public String getIpCity(HttpServletRequest request) { String url = "/ws/location/v1/ip?key=" + key + "&ip=" + IpUtils.getIpAddress(request); String sign = SecureUtil.md5(url + sk); url = API + url + "&sign=" + sign; String result = "未知"; try { String json = HttpUtil.get(url, 3000); JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject(); String status = jsonObject.get("status").getAsString(); if ("0".equals(status)) { JsonObject address = jsonObject.get("result").getAsJsonObject().get("ad_info").getAsJsonObject(); String nation = address.get("nation").getAsString(); String province = address.get("province").getAsString(); String city = address.get("city").getAsString(); String district = address.get("district").getAsString(); if (StrUtil.isNotBlank(nation) && StrUtil.isBlank(province)) { result = nation; } else { result = province; if (StrUtil.isNotBlank(city)) { result += " " + city; } if (StrUtil.isNotBlank(district)) { result += " " + district; } } } } catch (Exception e) { log.info("获取IP地理信息失败"); } return result; } }