分享如何在应用中对接用户实名认证功能

一、前言

公司新开发的APP需要有对用户进行实名认证的场景,在网上搜索了一轮,对比了一些能提供实名认证服务的平台,在对比了价格、准确率、响应时间这些之后,选择了随联数聚这个平台的实名认证API进行对接,以下是对接处理的流程,做一下当时开发对接的记录以及和有需要对接实名认证接口的朋友进行一下分享。

二、对接过程

1、访问https://www.slsj.com 随联数聚平台。当时我这边是在搜索引擎进入的。

 

2、访问后进行注册、认证,注册挺简单的,和其他平台差不多,直接手机验证码就可以完成注册和直接登录,之后的认证可以选择个人或者企业,因为他们这个资源支持个人或者企业使用,我这边为了方便是用的个人认证,也挺简单,一分钟之内就完成了认证。

 

3、完成认证后就可以申请相关的资源,我这边对比了一下,申请的他们“身份证二要素“这个接口。他们另外还有简版、有效期版,这个我们根据自己的场景选择了身份证二要素这个。

 

4、点击进入API进行申请,可以查看具体的套餐价格这些,对比过其他平台,这里的价格也还可以。他们的API有免费赠送体验次数,可以通过体验次数去测试一下接口的质量,后续再根据使用情况去购买。

 

5、申请资源之后可以进行对接,他们有提供对接文档、示例代码、测试平台这些功能,也还挺方便,测试时可以先用测试平台进行一下测试。

6、使用假的信息和真实的信息测试一下,没有问题,响应时间也是毫秒级响应。

 

7、查看他们的对接文档,直接在测试平台右边可以看到对接文档信息,根据对接文档信息进行代码编写,先写一个测试方法调通请求。另外他们请求需要的用户ID、密钥这些可以在个人中心 - 账户管理的账户信息中进行查看。

8、在项目中编写的调试代码

package com.example.api.V108;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

import static org.junit.jupiter.api.Assertions.assertTrue;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.*;

/**
 * 用户实名信息验证
 */
public class UserVerifyAPI {

    private static final String SIGN_KEY = "XXXXXX";
    private static final String USER_ID = "XXXXXX";
    private static final String apiUrl = "https://api.slsj.com/api/idCard/id-card-auth/query";

    // 测试方法
    public static void main(String[] args) throws Exception {
        boolean result = userVerify("20250822001", "XXX", "XXXXXX");
        assertTrue(result, "验证不通过");
    }

    /**
     * 请求进行用户实名信息验证
     * @param orderId
     * @param name
     * @param idCard
     * @return
     */
    public static boolean userVerify(String orderId, String name, String idCard) throws Exception {     
        // 设置参数  
        Map<String, Object> params = new HashMap<>();
        params.put("orderId", orderId);
        params.put("name", name);
        params.put("idCard", idCard);

        // 发送请求
        JSONObject responseJson = queryApi(apiUrl, params);
        // 返回认证结果
        return responseJson.getInt("code") == 0 && responseJson.getJSONObject("result").get("result").equals("01");
    }

    /**
     * HTTP请求处理方法
     * @param apiUrl
     * @param params
     * @return
     * @throws Exception
     */
    public static JSONObject queryApi(String apiUrl,Map<String, Object> params) throws Exception {
        
        // 获取鉴权Token
        String authToken = getAuthToken();
        
        // 发送请求
        HttpResponse response = HttpRequest.post(apiUrl)
            .header("Content-Type", "application/x-www-form-urlencoded")
            .header("Auth_Token", authToken)
            .header("Sign_Type", "md5")
            .form(params)
            .execute();
        
        // 返回响应结果
        String responseBody = response.body();
        return JSONUtil.parseObj(responseBody);
    
    }

    // 获取Auth_Token的方法
    private static String getAuthToken() throws Exception {
        // 获取当前时间戳
        long timestamp = System.currentTimeMillis();

        // 按照文档拼接待加密字符串
        String toEncrypt = "memberId=" + USER_ID + "dateTime=" + timestamp + "version=v1" + "key=" + SIGN_KEY;

        // MD5加密
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] digest = md.digest(toEncrypt.getBytes(StandardCharsets.UTF_8));
        String md5Result = bytesToHex(digest).toLowerCase();

        // 创建鉴权Token的JSON对象
        JSONObject authTokenObj = new JSONObject();
        authTokenObj.set("memberId", USER_ID);
        authTokenObj.set("dateTime", timestamp);
        authTokenObj.set("version", "v1");
        authTokenObj.set("signMd5", md5Result);
        
        return authTokenObj.toString();
    }

    // 辅助方法:将字节数组转换为十六进制字符串
    private static String bytesToHex(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte b : bytes) {
            result.append(String.format("%02x", b));
        }
        return result.toString();
    }

} 

 

9、调通后修改下合并到业务处理代码中,后续再测试一下没问题就完成对接了,整个过程还是比较简单的。

 

10、后续准备上线使用后再根据使用情况去购买使用套餐就OK了。他们个人中心的已申请API中也支持针对API进行使用预警设置,到时快用完了也可以收到预警及时再进行充值购买这些,还是比较方便的。

 

 

posted @ 2025-08-22 16:27  码农BoBo  阅读(41)  评论(0)    收藏  举报