博主信息
布丁
博文
5
粉丝
0
评论
0
访问量
302
积分:0
P豆:12

PHP对接小程序城市服务实名信息校验接口

2020年09月14日 16:05:03阅读数:53博客 / 布丁/ 微信小程序

1、接口介绍

接入微信城市服务,开发者小程序可以使用实名信息校验接口。主要实现的功能是,在用户同意情况下,通过微信城市服务去校验用户(或业务方)输入的实名信息,是否正确且与用户在“开通微信支付”时,预留的实名信息一致。

2、接入必读

1、本接口暂只支持校验基于大陆身份证 “姓名与身份证开通微信支付”的用户实名信息;
2、由于信息较为敏感,使用此接口校验用户(或业务方)输入的实名信息时,需要在页面前端征得用户的同意。因此调用此接口后,会跳转至微信官方的“用户同意”界面。用户点击同意按钮后方可继续后续调用。
3、请根据开放范围、场景所需及信息校验必要性申请本接口,并请谨慎使用。若后期使用过程中,用户举报较多或被发现在不合理使用,微信有权永久回收该小程序的该接口的权限。

3、接口开放范围

接口的开放的场景及必要性,参考国家法规、政策规定的需要“实名办理”的相关业务。具体的开放主体类目范围如下:

  • 政务(政府和事业单位)
  • 公立医疗(含公立医疗机构的互联网医院)
  • 公立教育机构
  • 交通行业的官方企业或单位(含:航空公司、机场、客运、交通市民卡、铁路、公交、地铁、轮渡)
  • 基础运营商 合规的保险公司官方;
  • 水、电、燃、暖等官方生活缴费机构;

    点击查看官方城市服务实名信息校验接口说明

4、后台校验实名信息的API

(1)请求方式:POST
(2)请求地址:

  1. 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 获取方式:点击查看详细说明

  1. $access_token = '';
  2. $url = "https://api.weixin.qq.com/intp/realname/checkrealnameinfo?access_token=$access_token";
  3. $params = [
  4. 'openid' => '', // 用户 openid
  5. 'real_name' => '', // 用户姓名
  6. 'cred_id' => ,'' // 身份证号
  7. 'cred_type' => 1,
  8. 'code' => '' // 小程序获取到的 code
  9. ];
  10. $result = curlRequest($url, $params);
  11. if ($result['errcode'] == 0) {
  12. switch ($result['verify_openid']) {
  13. case 'V_OP_NA':
  14. return '您还没有实名认证,请先进行微信实名认证';
  15. break;
  16. case 'V_OP_NM_MA':
  17. if ($result['verify_real_name'] == 'V_NM_ID_MA') {
  18. return '姓名与证件号匹配';
  19. }
  20. if ($result['verify_real_name'] == 'V_NM_ID_UM') {
  21. return '姓名与证件号不匹配';
  22. }
  23. break;
  24. case 'V_OP_NM_UM':
  25. return '用户与姓名不匹配';
  26. break;
  27. }
  28. } else {
  29. return $result['errmsg'];
  30. }
  31. // 发送 CURL 请求
  32. function curlRequest($url, $data = [])
  33. {
  34. $string_data = json_encode($data, JSON_UNESCAPED_UNICODE);
  35. $ch = curl_init();
  36. curl_setopt($ch, CURLOPT_URL, $url);
  37. curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  38. 'Content-Type: application/json; charset=utf-8',
  39. 'Content-Length: ' . strlen($string_data))); // 设置请求头
  40. curl_setopt($ch, CURLOPT_POSTFIELDS, $string_data); // 设置请求体
  41. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); // 定义请求类型
  42. curl_setopt($ch, CURLOPT_POST, 1);
  43. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
  44. curl_setopt($ch, CURLOPT_ENCODING, "");
  45. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  46. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  47. curl_setopt($ch, CURLOPT_HTTP_VERSION, 'CURL_HTTP_VERSION_1_1');
  48. $output = curl_exec($ch);
  49. curl_close($ch);
  50. $arr = json_decode($output, true);
  51. return $arr;
  52. }

7、注意事项

在将请求数据进行 json_encode 的时候,一定要加第二个参数 JSON_UNESCAPED_UNICODE 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。否则不会校验成功!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论