详情链接
https://developers.weixin.qq.com/community/business/doc/000e06614ac74068f3d9237eb5440d?page=3#comment-list
1、接口介绍
接入微信城市服务,开发者小程序可以使用实名信息校验接口。主要实现的功能是,在用户同意情况下,通过微信城市服务去校验用户(或业务方)输入的实名信息,是否正确且与用户在“开通微信支付”时,预留的实名信息一致。
2、接入必读
1、本接口暂只支持校验基于大陆身份证 “姓名与身份证开通微信支付”的用户实名信息;
2、由于信息较为敏感,使用此接口校验用户(或业务方)输入的实名信息时,需要在页面前端征得用户的同意。因此调用此接口后,会跳转至微信官方的“用户同意”界面。用户点击同意按钮后方可继续后续调用。
3、请根据开放范围、场景所需及信息校验必要性申请本接口,并请谨慎使用。若后期使用过程中,用户举报较多或被发现在不合理使用,微信有权永久回收该小程序的该接口的权限。
3、接口开放范围
接口的开放的场景及必要性,参考国家法规、政策规定的需要“实名办理”的相关业务。具体的开放主体类目范围如下:
政务(*和事业单位)
公立医疗(含公立医疗机构的互联网医院)
公立教育机构
交通行业的官方企业或单位(含:航空公司、机场、客运、交通市民卡、铁路、公交、地铁、轮渡)
基础运营商 合规的保险公司官方;
水、电、燃、暖等官方生活缴费机构;
点击查看官方城市服务实名信息校验接口说明
4、后台校验实名信息的API
(1)请求方式:POST
(2)请求地址:
https://api.weixin.qq.com/intp/realname/checkrealnameinfo?access_token=ACCESSTOKEN
(3)请求格式:JSON
(4)请求参数:
字段 类型 说明 备注
openid string 用户在业务方下的openid 与申请权限时提供的业务方的小程序appid保持一致
real_name string 姓名 需要校验的姓名
cred_id string 证件号 需要校验的证件号
cred_type string 默认为1,即身份证 目前暂只支持身份证
code string 回调获取的code 通过小程序回跳获取的code参数
(5)返回字段
字段 类型 说明 备注
errcode int 0为接口调用成功 错误码
errmsg string 失败时的错误提示 错误原因
verify_openid string V_OP_NA:用户暂未实名认证;V_OP_NM_MA:用户与姓名匹配;V_OP_NM_UM:用户与姓名不匹配。 有多个结果时用分号”;”连接;
verify_real_name string 当verify_openid 为V_OP_NM_MA 时返回:V_NM_ID_MA:姓名与证件号匹配;V_NM_ID_UM:姓名与证件号不匹配。 校验结果
5、小程序获取 code 参数
(1)请求方式
跳转至微信城市服务提供的 appid 和 path
appid:wx308bd2aeb83d3345 path:subPages/city/wxpay-auth/main
(2)应答方式:
用户完成确认同意后,会跳回至业务方小程序,并在 extraData 字段中带上调用后台接口所需的 code,即 extraData 中的 code 字段。
6、代码示例
此处的 access_token 获取方式:点击查看详细说明
$access_token = ‘’;
u
r
l
=
"
h
t
t
p
s
:
/
/
a
p
i
.
w
e
i
x
i
n
.
q
q
.
c
o
m
/
i
n
t
p
/
r
e
a
l
n
a
m
e
/
c
h
e
c
k
r
e
a
l
n
a
m
e
i
n
f
o
?
a
c
c
e
s
s
t
o
k
e
n
=
url = "https://api.weixin.qq.com/intp/realname/checkrealnameinfo?access_token=
url="https://api.weixin.qq.com/intp/realname/checkrealnameinfo?accesstoken=access_token";
$params = [
‘openid’ => ‘’, // 用户 openid
‘real_name’ => ‘’, // 用户姓名
‘cred_id’ => ,’’ // 身份证号
‘cred_type’ => 1,
‘code’ => ‘’ // 小程序获取到的 code
];
r
e
s
u
l
t
=
c
u
r
l
R
e
q
u
e
s
t
(
result = curlRequest(
result=curlRequest(url,
p
a
r
a
m
s
)
;
i
f
(
params); if (
params);if(result[‘errcode’] == 0) {
switch (KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (result[‘verify_real_name’] == ‘V_NM_ID_MA’) {
return ‘姓名与证件号匹配’;
}
if ($result[‘verify_real_name’] == ‘V_NM_ID_UM’) {
return ‘姓名与证件号不匹配’;
}
break;
case ‘V_OP_NM_UM’:
return ‘用户与姓名不匹配’;
break;
}
} else {
return KaTeX parse error: Expected 'EOF', got '}' at position 19: …ult['errmsg']; }̲ // 发送 CURL 请求 …url, $data = [])
{
s
t
r
i
n
g
d
a
t
a
=
j
s
o
n
e
n
c
o
d
e
(
string_data = json_encode(
stringdata=jsonencode(data, JSON_UNESCAPED_UNICODE);
c
h
=
c
u
r
l
i
n
i
t
(
)
;
c
u
r
l
s
e
t
o
p
t
(
ch = curl_init(); curl_setopt(
ch=curlinit();curlsetopt(ch, CURLOPT_URL,
u
r
l
)
;
c
u
r
l
s
e
t
o
p
t
(
url); curl_setopt(
url);curlsetopt(ch, CURLOPT_HTTPHEADER, array(
‘Content-Type: application/json; charset=utf-8’,
'Content-Length: ’ . strlen(
s
t
r
i
n
g
d
a
t
a
)
)
)
;
/
/
设
置
请
求
头
c
u
r
l
s
e
t
o
p
t
(
string_data))); // 设置请求头 curl_setopt(
stringdata)));//设置请求头curlsetopt(ch, CURLOPT_POSTFIELDS,
s
t
r
i
n
g
d
a
t
a
)
;
/
/
设
置
请
求
体
c
u
r
l
s
e
t
o
p
t
(
string_data); // 设置请求体 curl_setopt(
stringdata);//设置请求体curlsetopt(ch, CURLOPT_CUSTOMREQUEST, “POST”); // 定义请求类型
curl_setopt(
c
h
,
C
U
R
L
O
P
T
P
O
S
T
,
1
)
;
c
u
r
l
s
e
t
o
p
t
(
ch, CURLOPT_POST, 1); curl_setopt(
ch,CURLOPTPOST,1);curlsetopt(ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt(
c
h
,
C
U
R
L
O
P
T
E
N
C
O
D
I
N
G
,
"
"
)
;
c
u
r
l
s
e
t
o
p
t
(
ch, CURLOPT_ENCODING, ""); curl_setopt(
ch,CURLOPTENCODING,"");curlsetopt(ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt(
c
h
,
C
U
R
L
O
P
T
R
E
T
U
R
N
T
R
A
N
S
F
E
R
,
1
)
;
c
u
r
l
s
e
t
o
p
t
(
ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt(
ch,CURLOPTRETURNTRANSFER,1);curlsetopt(ch, CURLOPT_HTTP_VERSION, ‘CURL_HTTP_VERSION_1_1’);
o
u
t
p
u
t
=
c
u
r
l
e
x
e
c
(
output = curl_exec(
output=curlexec(ch);
curl_close($ch);
a
r
r
=
j
s
o
n
d
e
c
o
d
e
(
arr = json_decode(
arr=jsondecode(output, true);
return $arr;
}