小程序中Java后台调用getAccessToken接口、msg_sec_check接口检测文本安全、小程序前端访问后端接口的方法

本文介绍如何在Java后台使用SSM框架,调用微信的getAccessToken和msg_sec_check接口,检测小程序中文本内容的安全性。通过WxMsgSecCheck类接口,判断输入文本是否存在敏感词汇,实现内容审核功能。

序言:书接上回 小程序中Java后台调用接口(getAccessToken)获取调用凭据,调用接口(msgSecCheck)检测文本内容是否安全–最终版

小程序服务端后台 Java代码编写,框架采用SSM架构搭建

第一步:添加需要的pom.xml依赖配置


<!-- 小程序文本安全检测接口所需的依赖  -->
    <dependency>
	    <groupId>org.apache.httpcomponents</groupId>
	    <artifactId>httpclient</artifactId>
	    <version>4.5.13</version>
	</dependency>
	 <dependency>
	    <groupId>cn.hutool</groupId>
	    <artifactId>hutool-all</artifactId>
	    <version>5.7.16</version>
	</dependency>

第二步:小程序中Java后台调用getAccessToken接口、msg_sec_check接口检测文本安全


package com.controller;


import org.json.JSONObject;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;


import org.apache.http.impl.client.CloseableHttpClient;


import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
imp
Java调用小程序(如微信小程序)的文本内容安全识别接口,通常需要通过 HTTP 请求方式向其提供的 API 发送待检测文本。该功能主要用于检测用户输入的文本是否包含违法、违规、色情、广告等不良信息。 以下是完整的实现步骤和代码示例: ### 1. 获取 access_token 微信文本内容安全接口需要有效的 `access_token` 才能调用。你需要先通过 AppID 和 AppSecret 获取 `access_token`。 ### 2. 调用内容安全接口 使用获取到的 `access_token` 调用微信提供的内容安全检测接口: ``` POST https://api.weixin.qq.com/wxa/msg_sec_check?access_token=ACCESS_TOKEN ``` ### 3. 接口返回结果 如果文本违规,会返回 `errcode=87014`;否则表示内容合规。 --- ### ✅ Java 实现代码如下: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class TextSecurityCheck { private static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token"; private static final String MSG_SEC_CHECK_URL = "https://api.weixin.qq.com/wxa/msg_sec_check"; private static final String APP_ID = "your_app_id"; // 替换为你的小程序 AppID private static final String APP_SECRET = "your_app_secret"; // 替换为你的小程序 AppSecret private static ObjectMapper objectMapper = new ObjectMapper(); // 获取 access_token public static String getAccessToken() throws Exception { String urlString = GET_ACCESS_TOKEN_URL + "?grant_type=client_credential&appid=" + APP_ID + "&secret=" + APP_SECRET; URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); JsonNode jsonNode = objectMapper.readTree(response.toString()); if (jsonNode.has("access_token")) { return jsonNode.get("access_token").asText(); } else { throw new RuntimeException("获取 access_token 失败: " + response.toString()); } } // 检测文本是否合规 public static boolean isContentSafe(String content) throws Exception { String accessToken = getAccessToken(); URL url = new URL(MSG_SEC_CHECK_URL + "?access_token=" + accessToken); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // 构造请求体 String requestBody = String.format("{\"content\":\"%s\"}", content.replace("\"", "\\\"")); try (OutputStream os = conn.getOutputStream()) { byte[] input = requestBody.getBytes("utf-8"); os.write(input, 0, input.length); } // 读取响应 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); JsonNode jsonResponse = objectMapper.readTree(response.toString()); int errorCode = jsonResponse.has("errcode") ? jsonResponse.get("errcode").asInt() : 0; // errcode == 0 表示内容合规,87014 表示内容不合规 if (errorCode == 0) { return true; // 合规 } else if (errorCode == 87014) { System.out.println("文本违规: " + jsonResponse.get("errmsg").asText()); return false; // 不合规 } else { throw new RuntimeException("接口调用异常: " + response.toString()); } } // 使用示例 public static void main(String[] args) { try { String testText = "我是一个合法的测试文本。"; boolean safe = isContentSafe(testText); System.out.println("文本是否合规: " + safe); } catch (Exception e) { e.printStackTrace(); } } } ``` --- ### 🔍 依赖说明 上述代码使用了 Jackson 来解析 JSON 响应。请确保项目中引入了以下 Maven 依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> ``` --- ### ⚠️ 注意事项 1. **频率限制**:微信接口调用频率限制,请避免高频请求。 2. **access_token 缓存**:`access_token` 有效期为 2 小时,建议缓存,不要每次调用都重新获取。 3. **HTTPS 支持**:必须使用 HTTPS 连接。 4. **文本长度限制**:微信要求文本不超过 10000 字符。 5. **生产环境**:建议封装成服务,并加入重试机制、日志记录、异常处理等。 --- ### ✅ 返回码说明 | 错误码 | 含义 | |--------|------| | 0 | 内容合规 | | 87014 | 内容包含违法违规信息 | | 其他 | 系统错误或参数错误 | ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曦月合一

你的鼓励是我们前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值