Skip to content

手机号归属地查询接口 ​

更新时间:2026-09-18

接口说明 ​

手机号归属地查询接口,通过 bizContent 中的 mobile 参数查询手机号归属地信息,包括省份、城市和运营商。。

接口信息

  • 适用对象:间连商户
  • 请求 URL:https://openapi.shuhuipay.com/v1/query/mobile
  • 请求方法:POST

ℹ️ 公共参数说明详见 通用规则 - API公共参数 部分

WARNING

  • 该接口用于查询手机号码的归属地信息,支持11位完整手机号或7位号段
  • 传入11位手机号时自动截取前7位进行号段匹配
  • 返回信息包含省份、城市、运营商及完整地址
  • 该接口无需登录,无需权限验证

请求参数 ​

bizContent 业务参数 ​

参数名类型必填参数说明
mobileStringY手机号码,支持以下格式:
• 11位完整手机号:如 13800138000,系统自动截取前7位查询
• 7位号段:如 1380013,直接查询

WARNING

⚠️ 格式要求:

  • 手机号必须以 1 开头,第二位为 3-9
  • 仅支持中国大陆手机号格式
  • 号段不足7位或超过11位将返回格式错误

请求示例 ​

完整手机号查询:

json
{
  "appId": "your_system_appid",
  "subMerchantNo": "your_sub_merchant_no",
  "bizContent": "{\"mobile\":\"13800138000\"}",
  "version": "1.0",
  "nonce": "49d55020fa3adf6ed67b253c583ccdaa",
  "contentHash": "hash_value",
  "timestamp": "2026-09-18 10:00:00",
  "sign": "your_sign"
}

号段查询:

json
{
  "appId": "your_system_appid",
  "subMerchantNo": "your_sub_merchant_no",
  "bizContent": "{\"mobile\":\"1380013\"}",
  "version": "1.0",
  "nonce": "49d55020fa3adf6ed67b253c583ccdaa",
  "contentHash": "hash_value",
  "timestamp": "2026-09-18 10:00:00",
  "sign": "your_sign"
}

响应参数 ​

响应附加参数(data) ​

参数名类型必填说明
phoneStringY号段(前7位),如 "1380013"
provinceStringY省份,如 "北京"
cityStringY城市,如 "北京"
ispStringY运营商,如 "中国移动"、"中国联通"、"中国电信"
prefixStringN号码前缀(前3位),如 "138"
addressStringY完整归属地地址,由省份+城市拼接而成,如 "北京 北京"

响应示例 ​

成功响应:

json
{
  "code": "0000",
  "message": "查询成功",
  "timestamp": "2026-09-18T10:00:00.000Z",
  "data": {
    "phone": "1380013",
    "province": "北京",
    "city": "北京",
    "isp": "中国移动",
    "prefix": "138",
    "address": "北京 北京"
  }
}

失败响应:

// 缺少手机号参数
{
  "code": "4003",
  "message": "缺少必填参数 mobile",
  "timestamp": "2026-09-18T10:00:00.000Z",
  "data": {}
}

// 手机号格式不正确
{
  "code": "4003",
  "message": "mobile 参数格式不正确,需为7位号段或11位手机号",
  "timestamp": "2026-09-18T10:00:00.000Z",
  "data": {}
}

// 未找到号段信息
{
  "code": "4003",
  "message": "未找到该号段信息",
  "timestamp": "2026-09-18T10:00:00.000Z",
  "data": {}
}

// 缺少业务参数
{
  "code": "4003",
  "message": "缺少业务参数",
  "timestamp": "2026-09-18T10:00:00.000Z",
  "data": {}
}

错误码说明 ​

错误码说明
0000成功
4003参数错误(缺少业务参数 / 缺少mobile参数 / 手机号格式不正确 / 未找到号段信息)
5000系统异常

代码示例 ​

java
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;

public class MobileQueryExample {
    public static void main(String[] args) {
        String appId = "your_app_id";
        String subMerchantNo = "your_sub_merchant_no";
        String signKey = "your_sign_key";
        String apiUrl = "https://openapi.shuhuipay.com/v1/query/mobile";

        // 构建 bizContent
        Map<String, String> bizContent = new HashMap<>();
        bizContent.put("mobile", "13800138000");

        Map<String, String> requestData = new HashMap<>();
        requestData.put("appId", appId);
        requestData.put("subMerchantNo", subMerchantNo);
        requestData.put("bizContent", JSON.toJSONString(bizContent));
        requestData.put("version", "1.0");
        requestData.put("nonce", "49d55020fa3adf6ed67b253c583ccdaa");
        requestData.put("contentHash", "hash_value");
        requestData.put("timestamp", "2026-09-18 10:00:00");

        String sign = SignUtil.generateSign(requestData, signKey);
        requestData.put("sign", sign);

        String response = HttpUtil.post(apiUrl, requestData);
        System.out.println("查询结果:" + response);
    }
}
Python
import requests
import json
import hashlib

def query_mobile_location(mobile):
    """查询手机号归属地"""
    sys_appid = "your_sys_appid"
    sub_merchant_no = "your_sub_merchant_no"
    sign_key = "your_sign_key"
    api_url = "https://openapi.shuhuipay.com/v1/query/mobile"

    # 构建 bizContent
    biz = {"mobile": mobile}

    request_data = {
        "appId": sys_appid,
        "subMerchantNo": sub_merchant_no,
        "version": "1.0",
        "timestamp": "2026-09-18 10:00:00",
        "nonce": "49d55020fa3adf6ed67b253c583ccdaa",
        "bizContent": json.dumps(biz),
        "contentHash": "hash_value",
    }

    sign = generate_sign(request_data, sign_key)
    request_data["sign"] = sign

    try:
        response = requests.post(api_url, json=request_data, timeout=30)
        return response.json()
    except Exception as e:
        print(f"查询失败: {e}")
        return None

def generate_sign(params, sign_key):
    sorted_params = sorted(params.items())
    sign_str = "&".join([f"{k}={v}" for k, v in sorted_params if v])
    sign_str += f"&key={sign_key}"
    return hashlib.md5(sign_str.encode()).hexdigest().upper()

# 查询手机号归属地
result = query_mobile_location("13800138000")

# 处理返回结果
if result and result.get("code") == "0000":
    data = result.get("data", {})
    print(f"归属地: {data.get('address')}")
    print(f"运营商: {data.get('isp')}")
php
<?php

class MobileQuery {
    private $appId = 'your_app_id';
    private $subMerchantNo = 'your_sub_merchant_no';
    private $signKey = 'your_sign_key';
    private $apiUrl = 'https://openapi.shuhuipay.com/v1/query/mobile';

    public function queryMobile($mobile) {
        // 构建 bizContent
        $bizContent = ['mobile' => $mobile];

        $requestData = [
            'appId'          => $this->appId,
            'subMerchantNo'  => $this->subMerchantNo,
            'bizContent'     => json_encode($bizContent),
            'version'        => '1.0',
            'nonce'          => '49d55020fa3adf6ed67b253c583ccdaa',
            'contentHash'    => 'hash_value',
            'timestamp'      => '2026-09-18 10:00:00',
        ];

        $requestData['sign'] = $this->generateSign($requestData);
        $response = $this->httpPost($this->apiUrl, $requestData);
        return json_decode($response, true);
    }

    private function generateSign($params) {
        ksort($params);
        $signStr = '';
        foreach ($params as $key => $value) {
            if ($value !== '') {
                $signStr .= "{$key}={$value}&";
            }
        }
        $signStr .= "key={$this->signKey}";
        return strtoupper(md5($signStr));
    }

    private function httpPost($url, $data) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
}

// 查询手机号归属地
$result = (new MobileQuery())->queryMobile('13800138000');

// 处理返回结果
if ($result && $result['code'] === '0000') {
    $data = $result['data'] ?? [];
    echo "归属地: " . ($data['address'] ?? '') . PHP_EOL;
    echo "运营商: " . ($data['isp'] ?? '') . PHP_EOL;
}

注意事项 ​

DANGER

🚫 参数限制:

  • mobile 为必填参数,不传将返回参数缺失错误
  • 仅支持中国大陆手机号格式(1开头,第二位 3-9)
  • 支持 11 位完整手机号或 7 位号段,其他长度将返回格式错误
  • 传入 11 位手机号时系统自动截取前 7 位进行号段匹配

WARNING

⚠️ 查询说明:

  • 该接口无需登录和权限验证,通过公共参数 appId 和 subMerchantNo 鉴权
  • 基于手机号前7位号段数据库进行匹配查询
  • 响应中的 address 字段为省份+城市的拼接结果
  • 虚拟运营商号段同样支持查询

TIP

✅ 最佳实践:

  • 推荐传入完整11位手机号,系统会自动处理号段截取
  • 查询结果可缓存,号段归属地信息变更频率较低
  • 注意处理号段未收录的情况,返回 "未找到该号段信息"