技术博客
运营商三要素实名认证:5 分钟完成第一条实名校验

运营商三要素实名认证:5 分钟完成第一条实名校验

作者: 万维易源
2026-09-07
idcard-phone-auth-quickstart-1389
# 运营商三要素实名认证:5 分钟完成第一条实名校验 > **接口**:运营商三要素 - 运营商手机号实名认证 · **接入点**:1389-1 · **apiCode**:1389 > **请求方式**:POST · **返回格式**:JSON · **计费**:按次(ret_code=0 时扣费,具体档位以官方说明为准) > **适用人群**:新注册用户、初级开发者 > **阅读时间**:8 分钟 > **最后实测核对**:2026-09-07 --- ## 核心要点 - 只需传三个字段(姓名 + 身份证号 + 手机号),接口返回认证成功或失败,以及可选的手机号归属地信息。 - 鉴权通过 URL query 参数 `appKey` 传递,无需 Header。 - 错误码 `code=0` 表示认证成功,`code=1` 表示认证失败,另有 6 种错误场景需排查。 --- ## 为什么用这个接口 用户在电商平台注册时填了手机号,你需要确认这个手机号确实是这个人名下登记的——这是最常见的实名校验场景。运营商三要素接口一次调用就能拿到结果,不用自己维护任何号段库或运营商数据。 另一个常见用法:风控系统发现异常登录,需要二次验证用户身份,可以直接调这个接口确认手机号与身份证是否匹配。 --- ## 前置条件 1. 在 [ShowAPI 控制台](https://www.showapi.com/console#/myApp) 注册账号,获取 `appKey`。 2. 在接口详情页确认已购买相应套餐(按次计费,具体档位以官方说明为准)。 --- ## 接口速览 | 项目 | 说明 | |------|------| | 接口地址 | `https://route.showapi.com/1389-1` | | 请求方式 | POST | | Content-Type | `application/x-www-form-urlencoded` | | 鉴权方式 | URL query 参数 `appKey` | | 是否需要登录态 | 否(仅 appKey 鉴权) | | 响应格式 | JSON | --- ## 请求参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | idCard | String | 是 | 手机号实名对应的身份证号 | | name | String | 是 | 手机号实名对应的姓名 | | phone | String | 是 | 三网手机号 | | needBelongArea | String | 否 | 是否返回手机号归属地信息,默认 `true` | > `needBelongArea` 不传时默认为 `true`,返回归属地信息;传 `false` 则只返回认证结果,不返回归属地。 --- ## 第一次调用 ### Python(requests) ```python import requests import time APPKEY = "YOUR_APPKEY" # 替换为你的真实 AppKey url = "https://route.showapi.com/1389-1" params = { "appKey": APPKEY, "idCard": "11010119900307421X", # 示例身份证号,实际请使用测试号或授权数据 "name": "张三", # 示例姓名 "phone": "13800138000", # 示例手机号 "needBelongArea": "true" } try: resp = requests.post(url, data=params, timeout=10) resp.raise_for_status() data = resp.json() # 系统层检查 if data.get("showapi_res_code") != 0: print(f"系统调用失败: {data.get('showapi_res_error')}") else: body = data.get("showapi_res_body", {}) ret_code = body.get("ret_code") code = body.get("code") msg = body.get("msg", "") print(f"业务结果 code={code}, msg={msg}") # 认证成功(code=0)时查看归属地 if code == 0 and "belongArea" in body: ba = body["belongArea"] print(f"归属地: {ba.get('prov')}{ba.get('city')}") print(f"运营商: {ba.get('name')} (type={ba.get('type')})") print(f"号段: {ba.get('num')}") except requests.exceptions.Timeout: print("请求超时(超过 10 秒),请检查网络或联系接口方") except Exception as e: print(f"请求异常: {e}") ``` ### cURL ```bash curl -X POST "https://route.showapi.com/1389-1?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ -d "idCard=11010119900307421X&name=张三&phone=13800138000&needBelongArea=true" ``` ### Node.js(fetch) ```javascript const APPKEY = "YOUR_APPKEY"; // 替换为你的真实 AppKey const url = `https://route.showapi.com/1389-1?appKey=${APPKEY}`; const params = new URLSearchParams({ idCard: "11010119900307421X", name: "张三", phone: "13800138000", needBelongArea: "true" }); try { const resp = await fetch(url, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body: params, signal: AbortSignal.timeout(10000) // 10 秒超时 }); const data = await resp.json(); if (data.showapi_res_code !== 0) { console.log(`系统调用失败: ${data.showapi_res_error}`); } else { const body = data.showapi_res_body || {}; const code = body.code; const msg = body.msg || ""; console.log(`业务结果 code=${code}, msg=${msg}`); if (code === 0 && body.belongArea) { const ba = body.belongArea; console.log(`归属地: ${ba.prov}${ba.city}`); console.log(`运营商: ${ba.name} (type=${ba.type})`); console.log(`号段: ${ba.num}`); } } } catch (err) { if (err.name === "TimeoutError") { console.log("请求超时(超过 10 秒),请检查网络或联系接口方"); } else { console.log(`请求异常: ${err.message}`); } } ``` --- ## 返回示例(2026-09-07 实测) 以下为认证成功时的真实返回结构(示例数据已脱敏): ```json { "showapi_res_error": "", "showapi_res_code": 0, "showapi_res_id": "60740ce48d57ba8f1c10fb44", "showapi_res_body": { "ret_code": 0, "order": "6ddaf1ec67a343dc814c833ff0ae855f", "code": 0, "belongArea": { "num": 1362068, "prov": "山西", "name": "移动神州行卡", "provCode": "140000", "type": 1, "city": "临汾市" }, "msg": "认证成功" } } ``` ### 返回字段说明 | 字段 | 类型 | 说明 | |------|------|------| | `showapi_res_code` | Number | 系统层状态码,0 表示调用成功 | | `showapi_res_error` | String | 系统层错误信息,成功时为空白 | | `showapi_res_body.ret_code` | Number | 业务层状态码,0 表示调用成功(扣费) | | `showapi_res_body.code` | Number | **业务认证结果码**,见下方错误码表 | | `showapi_res_body.msg` | String | 认证结果提示信息 | | `showapi_res_body.belongArea` | Object | 归属地信息(needBelongArea=true 时返回) | | `belongArea.prov` | String | 省名 | | `belongArea.city` | String | 市名 | | `belongArea.name` | String | 运营商名称(如"移动神州行卡") | | `belongArea.num` | Number | 号段 | | `belongArea.provCode` | Number | 省别编码,本省身份证的前几位编码 | | `belongArea.type` | Number | 运营商类型:1=移动 2=电信 3=联通 4=广电 | | `showapi_res_body.order` | String | 渠道订单号 | --- ## 错误码快速对照 | code 值 | 含义 | 处理建议 | |---------|------|---------| | 0 | 认证成功 | 正常流程,可继续业务 | | 1 | 认证失败(三要素不匹配) | 告知用户信息有误,允许重新输入 | | 2 | 无该手机号记录 | 该手机号未实名认证,考虑引导用户绑定真实号码 | | 11 | 手机号、身份证或者姓名为空 | 检查参数是否遗漏 | | 12 | 身份证校验错误 | 身份证号格式不正确,引导用户修正 | | 13 | 手机号校验错误 | 手机号格式不正确,引导用户修正 | | 21 | 渠道升级暂停服务 | 联系 ShowAPI 客服 | | 22 | 渠道维护暂停服务 | 联系 ShowAPI 客服 | 详细排查见 → [运营商三要素实名认证:完整错误码对照表](https://www.showapi.com/guides/idcard-phone-auth-response-codes-1389) --- ## 进阶:只查认证不查归属地 如果业务只需要知道"是否匹配",不需要归属地信息,可以传 `needBelongArea=false` 减少返回数据量: ```python params["needBelongArea"] = "false" ``` --- ## FAQ **Q1:接口返回 code=1 是什么原因?** 运营商三要素实名认证接口 code=1 表示"认证失败",即传入的姓名、身份证号、手机号三者与运营商记录不匹配。请引导用户检查输入信息是否有误后重新提交。 **Q2:needBelongArea 传 false 后 belongArea 字段还会返回吗?** 不会。needBelongArea=false 时,`belongArea` 字段不会出现在返回 JSON 中。 **Q3:接口支持港澳台手机号吗?** 文档未明确说明。建议先用测试号码验证,或在控制台咨询客服。 **Q4:同一组参数重复调用会重复扣费吗?** 按文档表述"ret_code=0 时扣费",每次调用成功均会扣费。如需避免重复扣费,请参考 → [缓存策略文章](https://www.showapi.com/guides/idcard-phone-auth-cache-cost-1389)。 **Q5:调用频率有限制吗?** 文档未明确说明 QPS 限制。高并发场景建议先小流量测试,或联系 ShowAPI 客服确认。 --- ## 下一步阅读 - [完整错误码对照表](https://www.showapi.com/guides/idcard-phone-auth-response-codes-1389) —— code=1 时怎么排查 - [注册实名校验集成方案](https://www.showapi.com/guides/idcard-phone-auth-scenario-integration-1389) —— 业务层如何设计 - [三要素 vs 二要素 vs 四要素方案对比](https://www.showapi.com/guides/idcard-phone-auth-comparison-1389) —— 选型决策参考 --- **- 本系列共 6 篇**:查看[运营商三要素实名认证指南总目录](https://www.showapi.com/guides/idcard-phone-auth-guides-1389)