吴先森的笔记
为退烧而生!
某咸鱼的笔记

微信小程序内容安全审核接口「security.msgSecCheck」无效的原因及解决方案

微信小程序内容安全审核接口「security.msgSecCheck」无效的原因及解决方案

问题开始

最近,我收到了微信公众平台的通知,说我微信小程序未接入内容安全审核接口,并给了我7天时间整改。当时我并未在意,因为我已接入微信的security.msgSecCheck文本内容审核接口,以为这仅仅只是微信抽风罢了。可是,到了整改期限后,微信小程序官方真的封禁了我微信小程序的各种能力

https://www.wunote.cn/wp-content/uploads/2022/09/200725-1024x177.png
https://www.wunote.cn/wp-content/uploads/2022/09/200757-1024x243.png

我这才开始注意此问题

排查及解决过程

为了验证微信是否为误封,我手动提交了一些违法关键词,发现微信接口确实返回的”ok”、”pass”等结果。由此看来,可能确实是我的调用方式或者微信的接口存在问题。我开始在网上查询相关信息。主流的讨论一共有这两种

  • 微信的文本内容安全审核接口就算个装模做样的东西,完全没用。需要购买专业的内容安全审核接口
  • 微信的文本内容安全审核接口需要传入UTF-8的编码类型,否则其他一律返回“ok”,“pass”

对于第一种,如果真的是这样,我可能会选择原地关闭我的微信小程序,因为这种内容安全审核接口确实有点贵,而且按字收费,指不定哪天亏一套房。但是转念一想,如果这接口是个装饰,为什么网上没人骂?应该是我调用方法的问题

对于第二种,我觉得可能,因为该问题大概率是我的调用问题

我尝试对发送数据进行了UTF-8编码(也就是php中的函数utf8_encode),但是并没任何效果,当时的代码如下:

<?php
use GuzzleHttp;
$http = new GuzzleHttp\Client;
$response = $http->post('https://api.weixin.qq.com/wxa/msg_sec_check', [
    'query' => [
        "access_token" => $accessToken,
    ],
    'json' => [
        'content' => utf8_encode($context),
        'version' => 2,
        'openid' => $openid,
        'scene' => 1
    ]
]);
$apiResult = json_decode($response->getBody());

当我准备放弃时,突然想到,php中将json转换为json字符串的时候,会自动将UTF-8编码转换为UNICODE编码。那么会不会是GuzzleHttp把我的json数据转换为字符串时,把整个json转换为了UNICODE编码呢?于是,我尝试不使用GuzzleHttp自带的json编码,而是自定义发送body,并设置json编码时禁止将UTF-8编码转换为UNICODE,测试,问题成功解决!当时代码如下:

<?php
use GuzzleHttp;
$http = new GuzzleHttp\Client;
$response = $http->post('https://api.weixin.qq.com/wxa/msg_sec_check', [
    'query' => [
        "access_token" => $accessToken,
    ],
    'body' => json_encode([
        'content' => $context,
        'version' => 2,
        'openid' => $openid,
        'scene' => 4
    ], JSON_UNESCAPED_UNICODE),
]);
$apiResult = json_decode($response->getBody());

向微信提交申诉后,成功恢复了微信小程序的各种能力

https://www.wunote.cn/wp-content/uploads/2022/09/202308-1024x107.png

问题复盘

导致问题的原因

向微信发送HTTP请求时,发送的JSON数据的编码被自动转换为UNICODE编码,导致微信服务器无法识别,从而返回错误的判断结果

问题来源

1.本人在开发时虽注意到security.msgSecCheck接口需使用UTF-8编码,并使用utf8_encode进行编码,但是没注意到GuzzleHttp发送请时,自动将json字符串转换为unicode编码
2.当此接口输入错误编码时,接口没有返回异常信息。

发表评论请先填写昵称和邮箱
评论需要审核后才能显示,与内容无关的评论、灌水评论、广告等不会通过审核
本站的所有教程均博主亲身尝试后的经验,且未注明的均为原创
本站的内容可能很小白化,老鸟勿喷。
本文链接:https://www.wunote.cn/article/5135/
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可
没有标签
首页      其他      微信小程序内容安全审核接口「security.msgSecCheck」无效的原因及解决方案

某摆烂咸鱼

文章作者

为退烧而生!

发表回复

textsms
account_circle
email

某咸鱼的笔记

微信小程序内容安全审核接口「security.msgSecCheck」无效的原因及解决方案
问题开始 最近,我收到了微信公众平台的通知,说我微信小程序未接入内容安全审核接口,并给了我7天时间整改。当时我并未在意,因为我已接入微信的security.msgSecCheck文本内容审核接…
扫描二维码继续阅读
2022-09-13
EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00