微信小程序接入文本内容安全识别errorcode:47001

废话不多说,直接上代码

文档地址:文本内容安全识别 | 微信开放文档

地址中有下列参数

其中access_token需要调用接口获取

文档地址:获取稳定版接口调用凭据 | 微信开放文档

获取access_token的代码,我走的get请求:

public String getTokenUrl() {
        String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=XXXXXX&secret=XXXXXX";

        try {
            URL url = new URL(requestUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoOutput(true);

            OutputStream outputStream = connection.getOutputStream();
            byte[] input = requestUrl.getBytes("utf-8");
            outputStream.write(input, 0, input.length);

            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream(), "utf-8"));
            StringBuilder response = new StringBuilder();
            String responseLine = null;
            while ((responseLine = bufferedReader.readLine()) != null) {
                response.append(responseLine.trim());
            }

            //关闭资源
            outputStream.close();
            bufferedReader.close();
            connection.disconnect();

            Map map = JSONObject.parseObject(String.valueOf(response), Map.class);
            return (String) map.get("access_token");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

调用文本识别的代码:

public Boolean msgSecCheck(String content, Integer scene, String openid) {
        String token = getTokenUrl();

        //微信接口url
        String requestUrl = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token;

//        Map<String, Object> paramMap = new HashMap<>();
        JSONObject paramMap = new JSONObject();
        paramMap.put("content", content);
        paramMap.put("version", 2);
        paramMap.put("scene", scene);
        paramMap.put("openid", openid);

        try {
            URL url = new URL(requestUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoInput(true);
            connection.setDoOutput(true);
            String requestBody = paramMap.toString();

            OutputStream outputStream = connection.getOutputStream();
            byte[] input = requestBody.getBytes("utf-8");
            outputStream.write(input, 0, input.length);

            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream(), "utf-8"));
            StringBuilder response = new StringBuilder();
            String responseLine = null;
            while ((responseLine = bufferedReader.readLine()) != null) {
                response.append(responseLine.trim());
            }

            //关闭资源
            outputStream.close();
            bufferedReader.close();
            connection.disconnect();

            Map map = JSONObject.parseObject(String.valueOf(response), Map.class);
            if (map.isEmpty()) {
                return false;
            }
            if (0 == (Integer) map.get("errcode") && map.containsKey("result")) {
                String result = map.get("result").toString();
                Map resultMap = JSONObject.parseObject(result.toString(), Map.class);
                if (resultMap.isEmpty()) {
                    return false;
                }
                String suggest = (String) resultMap.get("suggest");
                System.out.println("suggest = " + suggest);
                if ("pass".equals(suggest)) {
                    return true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

踩了个大坑:

{"errcode":47001,"errmsg":"data format error rid: 663e39a5-08c8e2a6-5bb1407d"}

这个错误的官方解释是入参一定要是Json或者Xml格式,一开始入参我用的Map,一直报错47001,后来改用JSONObject后成功调通,下面是Map和JSONObject打印出来的区别:

Map:
{openid:owCC-XXXXXX,version:2,content:测试文章,scene:3}

JSONObject:
{"openid":"owCC-XXXXXX","version":2,"content":"测试文章","scene":3}

所以入参一定使用JSONObject格式

调用完接口后根据返回值判断,如果返回值中errorcode的值是0说明调用成功

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值