慧根聚合实名认证

API 文档

慧根聚合实名认证对外提供两条接口线:实名认证与微信公众号登录。所有接口保持旧站路径与参数,迁移时不需要改客户端代码。

接口根地址 https://app.2bmzf.com 响应 HTTP 200 + code

目录

三条线,共 9 个接口

通用约定

接入步骤

  1. 创建应用

    在「应用管理」创建应用,得到 appid 与 appkey。

  2. 配置白名单

    把回调域名写进该应用的白名单;支持 * 通配,例如 *.example.com。

  3. 按需充值

    实名认证按次扣「应用所有者」的积分,余额不足接口返回 1010。

  4. 联调

    先跑通 /api/verify/init.php 或 /api/oauth.php,再接收回调 / 轮询结果。

请求与响应

POST /api/token.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded

appid=YOUR_APPID&appkey=YOUR_APPKEY&code=e3b0c44298fc1c14

{"code":0,"msg":"success","data":{"access_token":"9f2c...","expires_in":7200,"openid":"oToeE6j_YK4PA0kiR41cyDriyEL4"}}

域名白名单规则

匹配对象是回调地址的 host(去掉端口):白名单里的 * 转为 .*,其余字符做正则转义,整串锚定匹配。例如白名单 *.example.com 可以命中 a.example.com:8443,但不命中 example.com。

POST/api/verify/init.php

一、实名认证

第三方站点传入姓名与身份证号,本系统调用支付宝实人认证,返回跳转链接;用户在支付宝完成核验后,本系统更新记录并回调你的地址。

1. 初始化认证

POST/api/verify/init.php
参数类型必填说明
appidstring是应用 ID
appkeystring是应用密钥
real_namestring是真实姓名
cert_nostring是身份证号码
callback_urlstring是认证完成后的回调地址,host 必须在应用白名单内

返回示例:

{"code":0,"msg":"success","data":{
  "record_id": 123,
  "auth_url": "https://openapi.alipay.com/gateway.do?alipay_user_certify_open_initialize_response...",
  "expire_in": 300
}}

把 auth_url 交给用户打开(或生成二维码),用户在支付宝完成人脸核验后会被带回 callback_url。

code含义可展示文案
1001任一参数为空缺少必要参数
1002应用不存在 / 已禁用 / appkey 错误应用不存在或密钥错误
1003callback_url 的 host 不在白名单回调域名不在白名单
1004系统未配置支付宝认证系统未配置支付宝认证
1005认证费用未配置认证费用未配置
1010应用所有者积分不足积分不足,本次需要 N 积分,当前 M 积分
1007扣分事务失败扣费失败:…
1008支付宝初始化失败(积分已退回)认证初始化失败:…

计费说明:费用 = verify_config.amount × settings.recharge_rate,从 应用所有者(创建该应用的用户)的积分扣除,每次扣费都会写入 points_log(type=verify);初始化失败会原路退回并记 type=verify_refund。

2. 查询认证结果

POST/api/verify/query.php
参数类型必填说明
appidstring是应用 ID
appkeystring是应用密钥
record_idint是初始化返回的记录 ID
{"code":0,"msg":"success","data":{
  "status": 1,
  "real_name": "张三",
  "cert_no": "11010119900307663X",
  "result_msg": "认证通过"
}}

status:0 待认证、1 通过、2 失败。

code含义
1001缺少参数 / record_id 不合法
1002应用不存在或密钥错误
1009记录不存在或不属于该应用

3. 异步回调

GET你的 callback_url

认证结束后,本系统会以 GET 请求你的 callback_url(追加 ? 或 &),参数如下:

参数说明
record_id本次认证记录 ID
status1 通过 / 2 失败
real_name姓名
cert_no身份证号
result_msg失败原因(仅失败时携带)
sign签名,见下

签名算法:sign = md5(record_id + real_name + private_key),字符串直接拼接、无分隔符,private_key 取自后台配置的支付宝应用私钥。请务必校验后再信任回调内容;超时或非 2xx 响应会被忽略且不重试。

回调是「尽力投递」:也可以只用 /api/verify/query.php 轮询,两条路径都安全。

二、微信登录(公众号验证码模式)

用户关注你的公众号后发送关键词,公众号回复一次性验证码;用户把验证码填回你的站点,你的服务端用授权码换取用户标识。

1. 授权入口

GET/api/oauth.php
参数类型必填说明
appidstring是应用 ID
redirect_uristring是回调地址,需 URL 编码;host 必须在白名单内
statestring否防 CSRF,建议传随机串,原样回带
https://app.2bmzf.com/api/oauth.php?appid=YOUR_APPID&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&state=123456

校验通过后 302 到 /wechat_login.php?api=1,用户输入公众号收到的 6 位验证码;成功后跳回:

https://example.com/callback?code=e3b0c442...&state=123456&type=wx

失败时返回纯文本:参数缺失、无效的回调地址、回调域名不在白名单、应用不存在或已禁用、验证码无效或已过期、会话过期,请重新发起授权。

2. 授权码换令牌

POST/api/token.php
参数类型必填说明
appidstring是应用 ID
appkeystring是应用密钥
codestring是回跳带回来的授权码(32 位,5 分钟有效,只能使用一次)
{"code":0,"msg":"success","data":{
  "access_token": "9f2c1d...",
  "expires_in": 7200,
  "openid": "oToeE6j_YK4PA0kiR41cyDriyEL4"
}}

3. 拉取用户信息

POST/api/userinfo.php
参数类型必填说明
appidstring是应用 ID
appkeystring是应用密钥
access_tokenstring是上一步得到的令牌
{"code":0,"msg":"success","data":{
  "openid": "oToeE6j_YK4PA0kiR41cyDriyEL4",
  "nickname": "微信用户",
  "avatar": "https://thirdwx.qlogo.cn/...",
  "gender": 1
}}

4. 公众号服务器配置

GETPOST/wechat.php

5. 站内消息推送

POST/api/send_message.php
参数类型必填说明
appidstring是应用 ID
appkeystring是应用密钥
user_idint是本站用户 ID(消息会出现在该用户的「在线客服」里)
contentstring是消息内容,最多 500 字
{"code":0,"msg":"发送成功"}

错误码汇总

微信登录线

code含义
1001缺少必要参数
1002应用不存在或密钥错误
1003回调域名不在白名单
1004授权码无效 / 已使用 / 已过期
1005access_token 无效或已过期
1006用户不存在
1007目标用户不存在(站内消息)
1008内容超过 500 字
1009写入失败

实名认证线

code含义
1001缺少必要参数
1002应用不存在或密钥错误
1003回调域名不在白名单
1004系统未配置支付宝认证
1005认证费用未配置
1007扣费失败
1008认证初始化失败(积分已退回)
1009认证记录不存在
1010应用所有者积分不足

常见问题

为什么一直是 1003?

白名单比对的是 callback_url / redirect_uri 的 host(含子域)。若你的站点是 app.example.com,白名单要写 app.example.com 或 *.example.com,只写 example.com 不匹配。

授权链接里的 redirect_uri 要编码几次?

服务端会对 redirect_uri 做两次解码再校验,因此整串只需要按 URL 参数正常编码一次(与旧站行为一致)。

认证回调收不到怎么办?

回调是尽力投递、不重试,且只接受 2xx。生产环境建议以 /api/verify/query.php 轮询为准,回调只作为加速通知。

access_token 能复用多久?

有效期 7200 秒,过期后需要用户重新走一次授权(code 是一次性的,不能重复换令牌)。

积分不足会怎样?

/api/verify/init.php 返回 1010,不会创建认证记录;请在「积分充值」补充积分后重试。