|
| 1 | +# 微信支付实名验证接口使用说明 |
| 2 | + |
| 3 | +## 概述 |
| 4 | + |
| 5 | +微信支付实名验证接口允许商户查询用户的实名认证状态,如果用户未实名认证,接口会返回引导用户进行实名认证的URL。 |
| 6 | + |
| 7 | +## 官方文档 |
| 8 | + |
| 9 | +https://pay.wechatpay.cn/doc/v2/merchant/4011987607 |
| 10 | + |
| 11 | +## 接口说明 |
| 12 | + |
| 13 | +### 查询用户实名认证信息 |
| 14 | + |
| 15 | +- **接口地址**:`https://api.mch.weixin.qq.com/userinfo/realnameauth/query` |
| 16 | +- **请求方式**:POST(需要使用商户证书) |
| 17 | +- **请求参数**: |
| 18 | + - `appid`:公众账号ID(自动填充) |
| 19 | + - `mch_id`:商户号(自动填充) |
| 20 | + - `openid`:用户在商户appid下的唯一标识 |
| 21 | + - `nonce_str`:随机字符串(自动生成) |
| 22 | + - `sign`:签名(自动生成) |
| 23 | + |
| 24 | +- **返回参数**: |
| 25 | + - `return_code`:返回状态码 |
| 26 | + - `return_msg`:返回信息 |
| 27 | + - `result_code`:业务结果 |
| 28 | + - `openid`:用户标识 |
| 29 | + - `is_certified`:实名认证状态(Y-已实名认证,N-未实名认证) |
| 30 | + - `cert_info`:实名认证信息(加密,仅已实名时返回) |
| 31 | + - `guide_url`:引导用户进行实名认证的URL(仅未实名时返回) |
| 32 | + |
| 33 | +## 使用示例 |
| 34 | + |
| 35 | +### 1. 获取实名验证服务 |
| 36 | + |
| 37 | +```java |
| 38 | +// 获取WxPayService实例 |
| 39 | +WxPayService wxPayService = ... // 根据你的配置初始化 |
| 40 | + |
| 41 | +// 获取实名验证服务 |
| 42 | +RealNameService realNameService = wxPayService.getRealNameService(); |
| 43 | +``` |
| 44 | + |
| 45 | +### 2. 查询用户实名认证状态(完整方式) |
| 46 | + |
| 47 | +```java |
| 48 | +import com.github.binarywang.wxpay.bean.realname.RealNameRequest; |
| 49 | +import com.github.binarywang.wxpay.bean.realname.RealNameResult; |
| 50 | +import com.github.binarywang.wxpay.exception.WxPayException; |
| 51 | + |
| 52 | +try { |
| 53 | + // 构建请求对象 |
| 54 | + RealNameRequest request = RealNameRequest.newBuilder() |
| 55 | + .openid("oUpF8uMuAJO_M2pxb1Q9zNjWeS6o") // 用户的openid |
| 56 | + .build(); |
| 57 | + |
| 58 | + // 调用查询接口 |
| 59 | + RealNameResult result = realNameService.queryRealName(request); |
| 60 | + |
| 61 | + // 处理返回结果 |
| 62 | + if ("Y".equals(result.getIsCertified())) { |
| 63 | + System.out.println("用户已实名认证"); |
| 64 | + System.out.println("认证信息:" + result.getCertInfo()); |
| 65 | + } else { |
| 66 | + System.out.println("用户未实名认证"); |
| 67 | + System.out.println("引导链接:" + result.getGuideUrl()); |
| 68 | + // 可以将guide_url提供给用户,引导其完成实名认证 |
| 69 | + } |
| 70 | +} catch (WxPayException e) { |
| 71 | + System.err.println("查询失败:" + e.getMessage()); |
| 72 | +} |
| 73 | +``` |
| 74 | + |
| 75 | +### 3. 查询用户实名认证状态(简化方式) |
| 76 | + |
| 77 | +```java |
| 78 | +import com.github.binarywang.wxpay.bean.realname.RealNameResult; |
| 79 | +import com.github.binarywang.wxpay.exception.WxPayException; |
| 80 | + |
| 81 | +try { |
| 82 | + // 直接传入openid进行查询 |
| 83 | + RealNameResult result = realNameService.queryRealName("oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"); |
| 84 | + |
| 85 | + // 处理返回结果 |
| 86 | + if ("Y".equals(result.getIsCertified())) { |
| 87 | + System.out.println("用户已实名认证"); |
| 88 | + } else { |
| 89 | + System.out.println("用户未实名认证,引导链接:" + result.getGuideUrl()); |
| 90 | + } |
| 91 | +} catch (WxPayException e) { |
| 92 | + System.err.println("查询失败:" + e.getMessage()); |
| 93 | +} |
| 94 | +``` |
| 95 | + |
| 96 | +## 注意事项 |
| 97 | + |
| 98 | +1. **证书要求**:本接口需要使用商户证书进行请求,请确保已正确配置商户证书。 |
| 99 | + |
| 100 | +2. **OPENID获取**:openid是用户在商户appid下的唯一标识,需要通过微信公众平台或小程序获取。 |
| 101 | + |
| 102 | +3. **认证信息**:`cert_info`字段返回的信息是加密的,需要使用相应的解密方法才能获取明文信息。 |
| 103 | + |
| 104 | +4. **引导链接**:当用户未实名时,返回的`guide_url`可以用于引导用户完成实名认证,建议在小程序或H5页面中使用。 |
| 105 | + |
| 106 | +5. **频率限制**:请注意接口调用频率限制,避免频繁查询同一用户的实名状态。 |
| 107 | + |
| 108 | +## 业务场景 |
| 109 | + |
| 110 | +- **转账前校验**:在进行企业付款到零钱等操作前,可以先查询用户的实名认证状态 |
| 111 | +- **风控审核**:作为业务风控的一部分,确认用户已完成实名认证 |
| 112 | +- **用户引导**:发现用户未实名时,引导用户完成实名认证以使用相关功能 |
| 113 | + |
| 114 | +## 错误处理 |
| 115 | + |
| 116 | +```java |
| 117 | +try { |
| 118 | + RealNameResult result = realNameService.queryRealName(openid); |
| 119 | + // 处理结果... |
| 120 | +} catch (WxPayException e) { |
| 121 | + // 处理异常 |
| 122 | + String errorCode = e.getErrCode(); |
| 123 | + String errorMsg = e.getErrCodeDes(); |
| 124 | + |
| 125 | + // 根据错误码进行相应处理 |
| 126 | + switch (errorCode) { |
| 127 | + case "SYSTEMERROR": |
| 128 | + // 系统错误,建议稍后重试 |
| 129 | + break; |
| 130 | + case "PARAM_ERROR": |
| 131 | + // 参数错误,检查openid是否正确 |
| 132 | + break; |
| 133 | + default: |
| 134 | + // 其他错误 |
| 135 | + break; |
| 136 | + } |
| 137 | +} |
| 138 | +``` |
| 139 | + |
| 140 | +## 相关链接 |
| 141 | + |
| 142 | +- [微信支付官方文档](https://pay.wechatpay.cn/doc/v2/merchant/4011987607) |
| 143 | +- [WxJava项目主页](https://github.com/binarywang/WxJava) |
0 commit comments