基于腾讯位置服务IP定位API接口实现根据IP定位功能

2022-06-29 12:30 栏目:技术开发 查看(10877)

在很多场景我们需要判断用户当前所处城市位置,但如果是直接获取用户的地理坐标虽然更为精确,不管是app还是网页都需要取得用户授权。某些场景下,我们希望不打扰用户,同时对精确度要求也不高,只需要市一级或者区县一级的精度即可,这个时候我们就可以用户的网络IP进行定位。

利用用户的IP进行定位在网络上有很多开放的接口服务,今天我们以腾讯的位置服务来分享。腾讯位置服务IP定位API接口有如下特点:

1、不仅支持IPv4,IP定位支持IPv6地址定位;

2、可自动识别局域网内网ip;

3、IP定位精度范围不是固定的,最高精确到区/县,最低精确到国家(国内ip基本全部能精确到区/县);

4、免费配额较高,个人账号日免费请求次数最高为1万(并发5),企业账号日免费请求次数最高为30万(500并发),且注册为企业账号非常简单,只需要提供营业执照副本即可。

接口地址:

https://apis.map.qq.com/ws/location/v1/ip

请求参数:

QQ截图20220628155930

返回参数:

QQ截图20220628160026

返回示例:

QQ截图20220628160114

下面分享一段示例代码:

class QqMap{
   private $url='https://apis.map.qq.com';
   private $key='key';
   private $sk='sk';

   /**
   * ip定位
   * @param string $ip ip地址
   * @return string
   */
   public function ip2area($ip){
        $path='/ws/location/v1/ip';
        $data=[
           'ip'=>$ip,
           'key'=>$this->key
        ];
        $data['sig']=$this->sign($path,$data);
        $url=$this->url.$path.'?'.$this->formatBizQueryParaMap($data);
        $res=@file_get_contents($url);
   }

   /**
   * 得到签名
   * @param string $path 路径
   * @param array $data 请求参数
   * @return string
   */
   private function sign($path,$data){
      $string=$this->formatBizQueryParaMap($data);
      return md5($path.'?'.$string.$this->sk);
   }

   /**
   * 将数组转成url字符串
   * @param array $paraMap
   * @return string
   */
   function formatBizQueryParaMap($paraMap){
     $buff = "";
     ksort($paraMap);
     foreach ($paraMap as $k => $v){
         $buff .= strtolower($k) . "=" . $v . "&";
     }
     $reqPar='';
     if (strlen($buff) > 0){
        $reqPar = substr($buff, 0, strlen($buff)-1);
     }
     return $reqPar;
 }

}

上述示例代码应用于如下在创建应用key时选择“签名校验”的场景,所以需要签名,如果使用域名白名单或授权IP方式就不需要进行签名。

QQ截图20220628161447

如何创建应用获取应用key?

1、第一步:进去应用管理端,地址为:https://lbs.qq.com/dev/console/application/mine。

2、第二步:创建一个应用。

QQ截图20220628162116

QQ截图20220628162159

3、第三步:添加Key。

QQ截图20220628162316

其中WebServiceAPI可以有三种安全机制,分别如下:

a、域名白名单:就是填写域名白名单,仅白名单内的域名才可以发起请求,如果不填就不限制。

b、授权IP:就是填写IP白名单,仅白名单内的IP才可以发起请求,如果不填就不限制。

c、签名校验:如上述示例代码就是使用这种方式,需要通过SK参与生成签名,然后再通过签名发起网络请求。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:基于腾讯位置服务IP定位API接口实现根据IP定位功能 - 微构网络
分享: