安全中心
{"errcode":0,"errmsg":"ok","trace_id":"689aa529-4540935f-6c1f3496"} trace_id 为这个, [图片] 推送地址已配置 是否有相关查询是否调用的接口
文本内容安全识别
内容安全能力接口已经升级到了2.0,为什么还会被封禁服务能力?连申诉入口都没有。 8月9日就已经完成升级并发布到线上版本了。
小程序官方提供的“文本内容安全识别接口”有查看检测结果控制台吗?
https://developers.weixin.qq.com/miniprogram/dev/framework/security.msgSecCheck-v1.html 其中,测试用例应该返回errcode=87014 ,但是返回了0 结果应该是包含违规内容,但是接口调用却是不包含违规内容
我这边是用openid自动登录的,但是会判断用户的风险等级,对于等级不是0的,会禁止登录。 我提交审核的时候审核人员总是说不能登录,但是我和朋友试了都是可以登的,所以怀疑是不是因为审核人员因为风险等级高被拦了。 但是之前没打日志,所以想确认下会不会有这种情况。
trace_id: "68921380-0c6d91a5-3470d805" 图片确定是违规的 [图片]
"trace_id":"689071b0-7b023375-50fa159b" 短文本可以检查出 risky "trace_id":"689071ea-2f9ffbc1-70b95461" 长文本就pass
[图片][图片][图片]两个关键词的是官方模版,在csv模版上只要增加关键词导入后都会提示关键词无效,原模版就可以识别,这是怎么回事哦,我尝试了很久都找不出原因,几千个敏感词一个个添加头发都掉没了,麻烦官方回复一下,是什么问题
https://api.weixin.qq.com/wxa/media_check_async?access_token=ACCESS_TOKEN 多媒体接口地址 异步推送结果请求------>{"ToUserName":"gh_7040a1238757","FromUserName":"oUXxX7HcPg-xrrzYV2hUPspvZg9Q","CreateTime":1753862242,"MsgType":"event","Event":"wxa_media_check","appid":"wx5d5bf98f2375a0b5","trace_id":"6889d061-73133221-45935f77","version":2,"detail":[],"errcode":-1008,"errmsg":"下载错误,请检查媒体链接是否有效"} 推送结果
小小签到录音说是包含敏感内容,被删除了。录音内容就是英语跟读。官方检测的标准是什么?怎样才能不被删除? [图片]
https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/sec-center/sec-check/msgSecCheck.html 输入这样内容也能检测通过:content: "江疏影,成人黄色站,1986年9月1日出生于上海市,本科毕业于上海戏剧学院表演系,硕士毕业于东英吉利大学传媒经济学,中国内地女演员。↵2005年,出演情感剧《飞花如蝶》,由此进入演艺圈 。2007年,凭借短片《爱·减肥》获得第1届全球华人网络非常短片创意大赛最佳女主角奖 。 江疏影成人黄色站"openid: "ofgd65ftXhG4PqQwdE2hAxbxLpb4"scene: 1title: "江疏影成人黄色站"version: 2接口返回数据:{errcode: 0, errmsg: "ok", detail: [{strategy: "keyword", errcode: 0},…],…}detail: [{strategy: "keyword", errcode: 0},…]errcode: 0errmsg: "ok"result: {suggest: "pass", label: 100}label: 100suggest: "pass"trace_id: "6889919e-2efc8603-3ac3cfac"
实体类 public class MsgSecCheckVO implements ContentField { /** * 场景枚举值(1 资料;2 评论;3 论坛;4 社交日志) */ private Integer scene; private String content; @Override public String getContent() { return content; } public Integer getScene() { return scene; } @Override public void setContent(String content) { this.content = content; } public void setScene(Integer scene) { this.scene = scene; } } 控制层 public R msgSecCheck(MsgSecCheckVO vo) { StringBuffer buffer = new StringBuffer(); buffer.append(url); buffer.append("wxa/msg_sec_check?access_token="); buffer.append(WeixinConstants.accessToken); OpenidDTO openidDTO = WebConstants.getObject(OpenidDTO.class); JSONObject body = new JSONObject(); body.put("openid", openidDTO.getOpenid()); body.put("scene", vo.getScene()); body.put("version", 2); body.put("content", vo.getContent()); log.info(body.toJSONString()); ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(buffer.toString(), body, JSONObject.class); return R.ok(responseEntity.getBody()); } 错误日志 2025-07-27 20:49:37.557 TRACE 29244 --- [nio-8081-exec-7] c.n.s.openid.OpenidAuthenticationFilter : Did not match request to PathPattern [POST /login/openid] 2025-07-27 20:49:37.557 TRACE 29244 --- [nio-8081-exec-7] c.n.s.openid.OpenidAuthenticationFilter : Did not match request to PathPattern [POST /login/openid] 2025-07-27 20:49:37.557 TRACE 29244 --- [nio-8081-exec-7] o.s.web.servlet.DispatcherServlet : POST "/weixin/msgSecCheck", parameters={}, headers={masked} in DispatcherServlet 'dispatcherServlet' 2025-07-27 20:49:37.558 TRACE 29244 --- [nio-8081-exec-7] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.n64god.weixin.controller.WeixinController#msgSecCheck(MsgSecCheckVO) 2025-07-27 20:49:37.559 TRACE 29244 --- [nio-8081-exec-7] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json;charset=UTF-8" to [com.n64god.weixin.bean.vo.MsgSecCheckVO@53478080] 2025-07-27 20:49:37.559 TRACE 29244 --- [nio-8081-exec-7] o.s.web.method.HandlerMethod : Arguments: [com.n64god.weixin.bean.vo.MsgSecCheckVO@53478080] 2025-07-27 20:49:37.559 INFO 29244 --- [nio-8081-exec-7] c.n.w.service.impl.WeixinServiceImpl : {"openid":"o9d6l6zZISHX8U-u0sgX0prbGHSs","version":2,"content":"测试","scene":4} 2025-07-27 20:49:37.559 DEBUG 29244 --- [nio-8081-exec-7] o.s.web.client.RestTemplate : HTTP POST https://api.weixin.qq.com/wxa/msg_sec_check?access_token=94_sRJ5nt4CLTcjrCmPvFM95k5MswRYNtfzTPvRWIzUpEwXueBtVF6Gq67FfK5YEr0Uz8iAsfy7hob9mVxCk7dtZA5qtjL1ePQKqzsoplhj3KMXZTR1mCip89oAHF4UOJiAHAJDY 2025-07-27 20:49:37.559 DEBUG 29244 --- [nio-8081-exec-7] o.s.web.client.RestTemplate : Accept=[application/json, text/plain, application/*+json] 2025-07-27 20:49:37.560 DEBUG 29244 --- [nio-8081-exec-7] o.s.web.client.RestTemplate : Writing [{"openid":"o9d6l6zZISHX8U-u0sgX0prbGHSs","version":2,"content":"测试","scene":4}] with org.springframework.http.converter.json.MappingJackson2HttpMessageConverter 2025-07-27 20:49:37.650 DEBUG 29244 --- [nio-8081-exec-7] o.s.web.client.RestTemplate : Response 412 PRECONDITION_FAILED 2025-07-27 20:49:37.653 DEBUG 29244 --- [nio-8081-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.n64god.system.advice.N64godSystemAdvice#error(Exception) 2025-07-27 20:49:37.653 TRACE 29244 --- [nio-8081-exec-7] o.s.web.method.HandlerMethod : Arguments: [org.springframework.web.client.HttpClientErrorException: 412 Precondition Failed on POST request for "https://api.weixin.qq.com/wxa/msg_sec_check": [no body]] 2025-07-27 20:49:37.653 ERROR 29244 --- [nio-8081-exec-7] c.n.s.s.impl.SystemExceptionServiceImpl : org.springframework.web.client.HttpClientErrorException: 412 Precondition Failed on POST request for "https://api.weixin.qq.com/wxa/msg_sec_check": [no body] 2025-07-27 20:49:37.653 ERROR 29244 --- [nio-8081-exec-7] c.n.s.s.impl.SystemExceptionServiceImpl : org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:136) Hibernate: select se1_0.id,se1_0.create_time,se1_0.frequency,se1_0.handle,se1_0.message,se1_0.stack_trace,se1_0.update_time from system_exception se1_0 where se1_0.message=? and se1_0.stack_trace=? org.springframework.web.client.HttpClientErrorException: 412 Precondition Failed on POST request for "https://api.weixin.qq.com/wxa/msg_sec_check": [no body] at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:136)
openapi.security.mediaCheckAsync API成功返回traceId,通过traceId 查询检测结果,返回errcode-40066,是什么问题 if (StringUtils.isBlank(traceId)) { throw new IllegalArgumentException("traceId 不能为空"); } String accessToken = getCachedAccessToken(); if (StringUtils.isBlank(accessToken)) { log.error("获取access_token失败"); throw new RuntimeException("获取微信访问令牌失败"); } String url = "https://api.weixin.qq.com/wxa/get_mediacheck_result?access_token=" + accessToken; log.debug("查询检测结果URL: {}", url); try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost httpPost = new HttpPost(url); httpPost.setHeader("Content-Type", "application/json; charset=utf-8"); JSONObject requestBody = new JSONObject(); requestBody.put("trace_id", traceId); log.debug("查询检测结果请求参数: {}", requestBody.toString()); StringEntity entity = new StringEntity(requestBody.toString(), StandardCharsets.UTF_8); httpPost.setEntity(entity); try (CloseableHttpResponse response = httpClient.execute(httpPost)) { int statusCode = response.getStatusLine().getStatusCode(); log.debug("查询检测结果HTTP状态码: {}", statusCode); HttpEntity responseEntity = response.getEntity(); if (responseEntity != null) { String result = EntityUtils.toString(responseEntity, StandardCharsets.UTF_8); log.debug("查询检测结果响应: {}", result); if (StringUtils.isBlank(result)) { log.warn("查询检测结果返回空响应,trace_id: {}", traceId); return null; } try { JSONObject jsonObject = new JSONObject(result); int errCode = jsonObject.optInt("errcode", -1); // 处理常见的错误码 if (errCode == Constants.Zero) {// 成功 log.debug("查询检测结果成功,trace_id: {}", traceId); return jsonObject; } else if (errCode == Constants.ACCESS_TOKEN_EXPIRED_CODE) {// access_token过期 log.warn("access_token过期,清除缓存,trace_id: {}", traceId); cachedToken = null; throw new IOException("微信access_token过期,请重试"); } else if (errCode == Constants.WECHAT_ACCESS_TOKEN_EXPIRED) {// access_token过期 log.warn("access_token过期,trace_id: {}", traceId); cachedToken = null; throw new IOException("微信access_token过期,请重试"); }else if (errCode == Constants.TRACE_ID_NO_EXIST_OR_EXPIRED) {// trace_id不存在或已过期 log.warn("trace_id不存在或已过期,trace_id: {}", traceId); // 创建特定的JSON对象表示trace_id无效 JSONObject invalidResult = new JSONObject(); invalidResult.put("errcode", Constants.TRACE_ID_NO_EXIST_OR_EXPIRED); invalidResult.put("errmsg", "trace_id not found or expired"); return invalidResult; } log.error("查询检测结果失败,trace_id: {}, errCode: {}, errMsg: {}", traceId, errCode, jsonObject.optString("errmsg", "未知错误")); // 对于其他错误,抛出异常 throw new IOException("查询检测结果失败,错误码: " + errCode); } catch (Exception e) { log.error("解析检测结果响应失败,响应内容: {}", result, e); throw new IOException("解析检测结果失败: " + e.getMessage(), e); } } else { log.warn("查询检测结果未返回响应内容,trace_id: {}", traceId); } }
服务端调用 getAccessToken , 获取后, 记录了获取时间和失效时间,保存至本地, 后续消息在失效时间内重复使用本地保存的token, 会出现失效的情况, 主要功能是在做敏感词验证的时候, 需要请求腾讯api : https://api.weixin.qq.com/wxa/game/content_spam/msg_sec_check?access_token=, 发现这个接口调用多次后会出现token失效的情况, 如何处理
小程序隐私接口权限被回收,通过指引操作申诉已通过,但是为何还是没有权限开通
检测什么内容返回都是OK的 [图片] [图片]
media_url 设置为 https://****/avatars/avatars.png?e=1753069076&token=7H8uM6ILgC-y3BA5mDG9yt0pqPkRHJl6dYDtjpqp:b2KqNTvZ4v1_icpCYFf8KrX5n4k= 时 推送消息 返回结果是 “下载错误,请检查媒体链接是否有效” 但在浏览器上是能正常打开的 {\"ToUserName\":\"gh_5643778b6874\",\"FromUserName\":\"oytQE5pB0vedm_FWdtozVx4LRRhM\",\"CreateTime\":1752981810,\"MsgType\":\"event\",\"Event\":\"wxa_media_check\",\"appid\":\"wxbace5ca11865c464\",\"trace_id\":\"687c6131-26221dca-0c128c75\",\"version\":2,\"detail\":[],\"errcode\":-1008,\"errmsg\":\"下载错误,请检查媒体链接是否有效\"}
发布一张黄图或者涉及政治的图片 调用cloud.openapi.security.mediaCheckAsync 异步返回结果永远都是pass [图片] trace_id: 687b60e0-3d5d35bc-30dc4f41
文档里面有两种返回示例,用哪一种。https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/sec-center/sec-check/mediaCheckAsync.html、https://developers.weixin.qq.com/miniprogram/dev/framework/security.mediaCheckAsync-v1.html#Object 现在我接收的回调示例是版本1的,不是已经废弃版本1了吗 1.[图片] 2.[图片]
你好,核实接口可正常回调信息,建议自行排查接收配置。如此traceid(689aa529-4540935f-6c1f3496),回调时间为2025-08-12 10:21:30