本文主要是介绍微信云托管-违法违规内容检查(security.msgSecCheck),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前段时间,微信小程序收到信息提醒,要对用户输入的内容进行检查。而实现这功能需要一台服务器或者使用云开发。经过一轮考虑后,但最终选择微信云托管。
选择微信云托管的原因
- 天然鉴权
微信私有协议自动获取 OpenID、UnionID 等登录态信息;无需维护 access_token 与证书,免鉴权调用微信开放接口; - 资源复用
很多业务情况下,我们需要在多个小程序或公众号中提供统一的后端服务;微信云托管目前支持将一个「小程序/小游戏/公众号」的云托管环境共享给同主体的其他「小程序/小游戏/公众号」。 设置资源复用时,被复用方不需要也开通微信云托管。即从理论上来说,同一个主体的多个小程序/公众号,只需开通一个云托管即可,避免创建过多帐号。
另外需要注意在小程序端,通过 wx.cloud.callContainer 向你的云托管服务发起请求时,你的服务会在 header 中获得该请求用户的全部信息。
云托管环境
小编用的是thinkphp-apache。因为小编是在Windows上开发的,为了方便调试,所以只能舍弃thinphp-nginx,选择thinkphp-apache。但是不可否认,thinkphp-nginx在性能上比thinkphp-apache好。感觉php越来越不行了,或许Python的Django 也是一个不错的选择。
请求web服务器工具的选择
只能使用Guzzlehttp,不能使用curl。因为需要把传输的数据放到body里面,curl没这功能。
补充:guzzlehttp安装命令如下
composer require guzzlehttp/guzzle
核心代码
后端php代码如下,另外需要注意下,敏感内容检查的情景(scene)建议选择“2-评论”。因为这个检查范围最广泛。
use GuzzleHttp\Client;$content = Request::param('content/s', '');
$reuse = Request::param('reuse/b', false);
if ($reuse == true) {// 资源复用的情况$url = 'http://api.weixin.qq.com/wxa/msg_sec_check?from_appid=' . Request::header('x-wx-from-appid');$openid = Request::header('x-wx-from-openid');
} else {$url = 'http://api.weixin.qq.com/wxa/msg_sec_check';$openid = Request::header('x-wx-openid');
}
$http = new Client();
$response = $http->post($url, ['body' => json_encode(['content' => $content,'version' => 2,'openid' => $openid,'scene' => 2], JSON_UNESCAPED_UNICODE),
]);
$apiResult = json_decode($response->getBody());
微信小程序代码
// 资源复用情况下,调用
const c1 = new wx.cloud.Cloud({resourceAppid: 'xxxxxxxxx',resourceEnv: 'prod-xxxxxxxxx',
})
await c1.init()
const res = await c1.callContainer({"config": {"env": "prod-xxxxxxxx"},"path": "/api/msgcheck","header": {"X-WX-SERVICE": "thinkphp-apache-xxxx","content-type": "application/json"},"method": "POST","data": { content: this.data.valueAdd, reuse: true }
})
配置接口
使用云托管需要配置接口,接口名如下: /wxa/msg_sec_check
吐槽一下
为了减少运营成本,在微信云托管里是可以设计成没流量就自动注销服务器了。而当有流量后又自动开启。而开启需要20秒的时间。这会导致敏感内容检查失败。。。
这篇关于微信云托管-违法违规内容检查(security.msgSecCheck)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!