实名验证(公众号)

更新时间:2024.11.18

微信支付实名验证

  • 微信支付实名信息验证接口,提供了验证微信用户的姓名和身份证信息是否匹配的功能。

  • 微信支付商户使用实名信息验证接口前, 需要取得微信用户的授权。

  • 获取微信用户的授权, 需要使用微信支付提供的OAuth2.0服务

  • H5版本的实名认证不能在小程序webview中使用

接口常见问题:

关于OAuth2.0的详细介绍,可以参考OAuth2.0协议标准。

使用标准OAuth2.0协议接入微信支付,在用户授权的条件下,将可以做到访问用户资源,使用接口调用用户功能(如获取用户实名信息等)

1、授权获取code

在商户需要访问用户受限资源时,需要得到用户的授权,调用用本接口取得用户同意后获取授权码。

请求方法

1(请求方式:GET)
2https://payapp.weixin.qq.com/appauth/authindex?mch_id=MCHID&appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数说明

变量名

类型

必填

示例值

描述

mch_id

string

1230000109

商户号

appid

string

wxd678efh567hg6787

应用唯一标识

redirect_uri

string

 

重定向地址,需要urlencode,需在支付安全域下(商户平台上配置“支付授权目录”)。

response_type

string

code

固定填code

scope

string

pay_identity

应用授权作用域,

pay_identity 是  实名验证 - 校验姓名和身份证是否匹配

state

string

 

随机字符串,回调时将带上该参数

#wechat_redirect

string

 

必须带上

”#wechat_redirect”

用户同意授权

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。

1code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,10分钟未被使用自动过期。

注意:

A、第三方需要用户授权时,跳转到微信授权页Url,并且在该Url中带上回调地址REDIRECT_URI。

B、用户点击确认授权后,页面将回包参数传入请求code接口,然后重定向到第三方,并带上code和state。

2、通过code 换取accesstoken

获取微信用户的授权, 需要使用微信支付提供的 OAuth2.0 服务。使用步骤一获取的授权码调用OAuth2.0接口access_token。

请求方法

1(请求方式:GET)
2https://api.mch.weixin.qq.com/appauth/getaccesstoken?mch_id=MCHID&appid=APPID&openid=OPENID&code=CODE&scope=SCOPE&grant_type=authorization_code&sign_type= HMAC-SHA256&sign=SIGN

参数说明

变量名

类型

必填

示例值

描述

mch_id

string

1230000109

商户号

appid

string

wxd678efh567hg6787

应用唯一标识

openid

string

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

用户openid

code

string

EYJV9lz4yHrepHG5ye8Cp0bMORiob11lGgDUGFi26vEX-sirjL5652SFxs9WP-zD6TcrbSArk_laGU6A08pgfHxX_tZWdPiP-Cu2a68d-3Q=

预授权码

grant_type

string

authorization_code

填authorization_code

scope

string

pay_identity

应用授权作用域,

pay_identity 是  实名验证 - 校验姓名和身份证是否匹配

sign_type

string

HMAC-SHA256

固定填

 HMAC-SHA256

sign

string

029B52F67573D7E3BE74904BF9AEA2F48656AEBCBB93FA48D9B70F98D2E23D09

通过签名算法计算得出的签名值,详见签名生成算法

返回说明

 

正确时返回的JSON数据包如下:

1{
2"retcode":0,
3"retmsg":"ok",
4"access_token":"Ca5sECXTwzkWYXs_do9ZaEeueqVHOtF-nXr51yNll2O97zqk9niwJnmSWxhDJELqoDDVFws6LCBbSulnEAaxCg==",
5"access_token_expire_in":7200,
6"refresh_token":"Q2eOMW_fnMX4U18SAGr2CuONaNgE3qYRP8eJUHKjFjz65ddh7DGb2koRG5ij-rlHohDmyEpz1wKSH9jPiAAJzg==",
7"refresh_token_expire_in":2592000
8}

参数说明

变量名

类型

必填

示例值

描述

retcode

int

0

0-成功

retmsg

string

OK

处理成功,返回ok

其他情况返回 具体错误码

access_token

string

Ca5sECXTwzkWYXs_do9ZaEeueqVHOtF-nXr51yNll2O97zqk9niwJnmSWxhDJELqoDDVFws6LCBbSulnEAaxCg==

接口调用凭证

access_token_expire_in

string

7200

请求返回的access_token过期时间,以秒为单位,有效期较短

refresh_token

string

Q2eOMW_fnMX4U18SAGr2CuONaNgE3qYRP8eJUHKjFjz65ddh7DGb2koRG5ij-rlHohDmyEpz1wKSH9jPiAAJzg==

refresh令牌

refresh_token_expire_in

string

2592000

refresh_token过期时间,以秒为单位,有效期较长

3、微信支付实名验证

取得token后调用本接口验证微信用户的姓名和身份证信息是否匹配

请求方法

1(请求方式:POST)
2(请使用https协议)https://fraud.mch.weixin.qq.com/secsvc/realnameauth

参数说明

变量名

类型

必填

示例值

描述

version

String(8)

1.0

接口版本号 1.0

mch_id

String(32)

1230000109

微信支付商户号

appid

String(32)

wxd678efh567hg6787

微信appid

openid

String(128)

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

openId

real_name

String(64)

刘某某

真实姓名,请使用UTF-8编码

cred_type

int

1

证件类型,
1:身份证
2:护照
5:回乡证
9:台胞证
12:外国人居留证
17:港澳居民居住证
18:台湾居民居住证

cred_id

String(32)

440000000000000000

证件号码.

nonce_str

String(32)

ec2316275641faa3aacf3cc599e8730f

随机字符串. 随机字符串,不长于32位。

access_token

String(128)

 

步骤2或步骤3获取到的access_token

sign

String(128)

0CB01533B8C1EF103065174F50BCA001

通过签名算法计算得出的签名值,详见签名生成算法

sign_type

String(32)

HMAC-SHA256

签名类型,支持MD5和HMAC-SHA256

签名算法和校验签名的工具参考

请求包体样例:

1<xml>
2   <version >1.0</ version >  
3   <mch_id>xxxx</mch_id>
4   <appid>xxxx</appid>
5   <openid>xxx</openid>
6   <real_name>xxx</real_name> 
7   <cred_id>xxx</cred_id>
8   <cred_type>1</cred_type>
9   <access_token>xxx</access_token>
10   <nonce_str>ec2316275641faa3aacf3cc599e8730f</nonce_str>
11   <sign_type>HMAC-SHA256</sign_type>
12   <sign>0CB01533B8C1EF103065174F50BCA001</sign>
13</xml> 
14

返回说明

 

正确时返回的XML数据包如下:

1<xml>
2   <return_code><![CDATA[SUCCESS]]></return_code>
3   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
4   <mch_id><![CDATA[10000100]]></mch_id>
5   <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
6   <openid><![CDATA[oUpF8uMuAJO_M2pxb1Q9zNjWeS6o]]></openid>
7   <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
8   <result_code><![CDATA[SUCCESS]]></result_code>
9   <verify_openid><![CDATA[V_OP_NM_MA]]></verify_openid>
10   <verify_real_name><![CDATA[V_NM_ID_MA]]></verify_real_name>
11</xml> 

参数说明

变量名

类型

必填

示例值

描述

return_code

String(16)

SUCCESS

返回状态码 SUCCESS/FAIL.

此字段是通信标识,非交易标识

交易是否成功需要查看result_code来判断

return_msg

String(128)

OK

返回信息,如非空,为错误原因

签名失败, 参数格式校验错误等

以下字段在return_code为SUCCESS的时候有返回

result_code

String(16)

SUCCESS

业务结果 SUCCESS/FAIL

err_code

String(32)

INVALID_SIGN_TYPE

错误代码

err_code_desc

String(128)

签名类型错误

错误代码描述

appid

String(32)

wx2421b1c4370ec43b

应用唯一标识

mch_id

String(32)

10000100

微信支付商户号

nonce_str

String(32)

IITRi8Iabbblz1Jc

随机字符串. 随机字符串,不长于32位。

sign

String(32)

7921E432F65EB8ED0CE9755F0E86D72F

通过微信支付签名算法计算得出的签名值。

以下字段在return_code 和result_code都为SUCCESS的时候有返回

openid

String(128)

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

OpenId

access_token

String(128)

 

步骤2或步骤3获取到的access_token

verify_openid

String(256)

V_OP_NM_MA

有多个结果时用分号”;”连接

V_OP_NA:       用户暂未实名认证

V_OP_NM_MA:  用户与姓名匹配

V_OP_NM_UM:  用户与姓名不匹配

verify_real_name

String(32)

V_NM_ID_MA

当 verify_openid 为 V_OP_NM_MA 时返回: 
V_NM_ID_MA:   姓名与证件号匹配
V_NM_ID_UM:   姓名与证件号不匹配
V_NM_ID_TYPE_UM:证件类型不匹配

bind_bankcard

String(32)

YES

当 verify_real_name 为 V_NM_ID_MA时返回:

YES: 绑定银行卡的实名认证

NO: 非绑定银行卡的实名认证

( version 1.1的新增字段, version> = 1.1时返回)

错误码

错误码

错误说明

PARAM_INVALID

参数非法

INVALID_REQUEST

非法请求,例如没有访问权限、appid/mchid无效等

POST_IVALID_XML_DATA

XML格式错误

INVALID_SIGN_TYPE

签名类型错误

SIGN_ERROR

签名错误

LACK_MCH_ID

参数中缺少MCHID

WRONG_MCHID

商户号不存在

ACCESS_TOKEN_EXPIRE

access_token已过期

ACCESS_TOKEN_INVALID

access_token非法

OPENID_INVALID

openid非法

NO_API_AUTH

商户无接口API接口权限

ERR_UNKOWN_VERIFY_STATE

用户的实名状态非法

SYSTEM_ERROR

系统错误      

UNKNOWN_ERROR

未知错误