{“errcode”:1008,“errmsg”:“SYS REQ PARTNER ERROR”}网络游戏防沉迷实名认证

问题原因

这是你网络游戏防沉迷实名认证系统还没通过调试接口,需要先将网络游戏防沉迷后台的调试接口通过。

解决步骤

一、白名单配置

在这里插入图片描述

二、接口测试

1、页面点击开始测试

点击开始测试后获取测试码
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bc5dc335908d46bebbd0953c73201f08.png

注意:此处白名单需要填写正确

2、下载说明文档

在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/44f7c0a529f0459db1b3e09c795b237c.png
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、接口文档

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、Java代码

4.1、测试接口
   /**
     * 测试实名认证
     */
    @RequestMapping(value = "/testIdAuth.do", method = {RequestMethod.POST, RequestMethod.GET})
    public String testIdAuth(@RequestParam(value = "url") String url,
                             @RequestParam(value = "ai") String ai,
                             @RequestParam(value = "name") String name,
                             @RequestParam(value = "idNum") String idNum,
                             @RequestParam(value = "bizId") String bizId,
                             @RequestParam(value = "type") String type,
                             @RequestParam(value = "si") String si,
                             @RequestParam(value = "isTourists") String isTourists
    ) {
//        String url = "https://wlc.nppa.gov.cn/test/authentication/check/" + testCode;
        String timestamps = System.currentTimeMillis() + "";
        String authResult = "";
        if ("1".equals(type)) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("ai", ai);
            jsonObject.put("name", name);
            jsonObject.put("idNum", idNum);
            /**加密请求参数*/
            String aesData = secureParams("Secret Key", jsonObject);
            /**生成签名*/
            String sign = signParams("APPID", bizId, "Secret Key", timestamps, null, aesData);
            /**接口调用*/
            authResult = HttpRequest.post(url)
                    .header(Header.CONTENT_TYPE, "application/json; charset=utf-8")
                    .header("appId", "APPID").header("bizId", bizId).header("timestamps", timestamps)
                    .header("sign", sign)
                    .body(aesData)
                    .timeout(5000)
                    .execute().body();
        }else if ("2".equals(type)) {
            Map<String, Object> params = Maps.newHashMap();
            params.put("ai", ai);
            Map<String, String> paramsData = Maps.newHashMap();
            paramsData.put("ai", ai);
            /**签名*/
            String sign = signParams("APPID", bizId, "Secret Key", timestamps, paramsData, null);
            authResult = HttpRequest.get(url)
                    .header(Header.CONTENT_TYPE, "application/json; charset=utf-8")
                    .header("appId", "APPID").header("bizId", bizId).header("timestamps", timestamps)
                    .header("sign", sign)
                    .form(params)
                    .timeout(5000)
                    .execute().body();
        }else if ("3".equals(type)) {
            JSONObject data = new JSONObject();
            JSONArray collections = new JSONArray();
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("no", 1);
            jsonObject.put("si", si);
            jsonObject.put("bt", 1);
            jsonObject.put("ot", DateUtil.currentSeconds() - 2);
            if ("2".equals(isTourists)) {
                jsonObject.put("ct", 2);
                jsonObject.put("di", "9wawbt7vij7bxm0nx3wxefxbmswyscx0");
            }else {
                jsonObject.put("ct", 0);
                jsonObject.put("pi", ai);
            }
            collections.add(jsonObject);
            data.put("collections", collections);
            /**加密请求参数*/
            String aesData = secureParams("Secret Key", data);
            /**生成签名*/
            String sign = signParams("APPID", bizId, "Secret Key", timestamps, null, aesData);
            /**接口调用*/
            authResult = HttpRequest.post(url)
                    .header(Header.CONTENT_TYPE, "application/json; charset=utf-8")
                    .header("appId", "APPID").header("bizId", bizId).header("timestamps", timestamps)
                    .header("sign", sign)
                    .body(aesData)
                    .timeout(5000)
                    .execute().body();
        }

        return authResult;
    }
4.2、工具接口
/**
     * 加密请求参数
     *
     * @param jsonObject
     * @return
     */
    public static String secureParams(String secretKey, JSONObject jsonObject) {
        String params = jsonObject.toJSONString();
        return secureParams(secretKey, params);
    }

    /**
     * 加密请求参数
     *
     * @param jsonArray
     * @return
     */
    public static String secureParams(String secretKey, JSONArray jsonArray) {
        String params = JSONUtil.toJsonStr(jsonArray);
        return secureParams(secretKey, params);
    }

    /**
     * 加密请求参数
     *
     * @param params
     * @return
     */
    public static String secureParams(String secretKey, String params) {
        String secureParams = aesEncrypt(params, secretKey);
        JSONObject paramsJson = new JSONObject();
        paramsJson.put("data", secureParams);
        return paramsJson.toJSONString();
    }

    /**
     * AES-128/GCM + BASE64算法加密
     *
     * @param content
     * @param secretKey
     * @return
     */
    private static String aesEncrypt(String content, String secretKey) {
        try {
            byte[] hexStr = HexUtils.fromHexString(secretKey);
            //加密算法:AES/GCM/PKCS5Padding
            Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5Padding");
            SecretKeySpec skeySpec = new SecretKeySpec(hexStr, "AES");

            //随机生成iv 12位
            byte[] iv = new byte[12];
            SecureRandom.getInstance("SHA1PRNG").nextBytes(iv);

            //数据加密, AES-GCM-128
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new GCMParameterSpec(128, iv));
            byte[] encrypted = cipher.doFinal(content.getBytes());          //数据加密

            //iv+加密数据 拼接  iv在前,加密数据在后
            ByteBuffer byteBuffer = ByteBuffer.allocate(iv.length + encrypted.length);
            byteBuffer.put(iv);
            byteBuffer.put(encrypted);
            byte[] cipherMessage = byteBuffer.array();

            //转换为Base64 Base64算法有多种变体, 这里使用的是java.util.Base64
            return Base64.getEncoder().encodeToString(cipherMessage);
        } catch (Exception e) {
            log.error("content:" + content, e);
        }
        return null;
    }

    /**
     * 参数签名
     *
     * @return
     */
    public static String signParams(String appId, String bizId, String secretKey, String timestamps, Map<String, String> paramsData, String aesData) {
        HashMap<String, String> params = Maps.newHashMap();
        params.put("appId", appId);
        params.put("bizId", bizId);
        params.put("timestamps", timestamps);
        if (paramsData != null) {
            params.putAll(paramsData);
        }
        TreeMap<String, String> sortedParams = new TreeMap<>(params);
        // 遍历排序后的字典,将所有参数按"key=value"格式拼接在一起
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, String> param : sortedParams.entrySet()) {
            String value = param.getValue();
            if (StrKit.isBlank(value)) {
                continue;
            }
            sb.append(param.getKey()).append(value);
        }
        String signString = secretKey + sb.toString();
        if (aesData != null) {
            signString += aesData;
        }
        System.out.println(signString);
        String sign = SecureUtil.sha256(signString);
        return sign;
    }

5、postman测试

在这里插入图片描述

### 回答1: 这个错误的意思是在使用 uni 一键登录功能时,无法获取手机号码,原因是 appId 不存在。 这可能是由于在调用 uni 一键登录接口时,所使用的 appId 不正确或者不存在造成的。建议检查所使用的 appId 是否正确,或者确认 appId 是否已经正确注册并获得授权。 ### 回答2: 这个错误信息表示在使用uni一键登录功能时,出现了"appId 不存在"的问题,导致无法获取手机号码。 首先,需要确保使用的appId是正确的。请检查你的代码和配置文件,确认appId是否正确设置。可以尝试重新生成一个正确的appId,并将其替换掉原来的appId。 另外,还需要确认是否正确引入了uni一键登录的SDK和相关的依赖库。如果没有正确引入,也会导致appId无法找到。请检查你的工程配置和依赖库文件,确保它们的正确性。 如果以上步骤都没有解决问题,可以尝试联系uni一键登录的技术支持团队,向他们咨询关于该错误的更多详细信息。他们可能能够提供进一步的帮助和解决方案。 最后,还可以参考uni一键登录的官方文档,查找类似问题的解决方案。官方文档通常提供了常见错误和解决方案的列表,你可以尝试按照文档中的步骤进行排查和修复。 需要注意的是,以上只是针对问题的一般解决方法。具体的解决方案还需要根据你的具体环境和代码情况而定。希望以上的答案能够对你有所帮助! ### 回答3: errCode: 4003 | errMsg: 获取手机号码失败:uni一键登录 appId 不存在。 这个错误是由于在使用uni一键登录的过程中,指定的appId不存在而导致的。appId是用来标识具体的应用程序的唯一标识符,是进行身份验证的必要参数之一。 要解决这个问题,可以按照以下步骤操作: 1. 确认在使用uni一键登录时是否正确指定了appId。请检查你的代码或配置文件,确保正确设置了appId参数。可以尝试重新获取正确的appId并进行配置。 2. 确认你的appId是否已经注册成功。有时候在注册应用程序时,可能由于各种原因导致注册失败,导致appId不存在。需要重新注册并获取一个正确的有效的appId。 3. 检查uni一键登录的文档和使用指南。仔细阅读相关文档,确保你正确理解并按照文档中的要求使用uni一键登录功能。如果有任何疑问,可以咨询uni一键登录的官方支持团队或开发者社区,寻求帮助和解决方案。 4. 更新或升级uni一键登录的SDK版本。有时候,相关的错误可能是由于旧版本SDK的问题导致的。尝试更新到最新版本的SDK,以获得更好的兼容性和错误修复。 总之,解决errCode: 4003 | errMsg: 获取手机号码失败:uni一键登录 appId 不存在这个错误需要仔细检查和确认appId的正确性,确保其存在且有效。同时还需要排除其他可能存在的问题,并及时更新和咨询相关的技术支持团队。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值