统计
  • 建站日期:2022-01-17
  • 文章总数:5626 篇
  • 评论总数:50048条
  • 分类总数:43 个
  • 最后更新:2天前

PHP怎么实现微信小程序内容安全识别接口?

作者头像
首页 综合教程 正文
广告
广告

在进行微信小程序开发时,用户上传的文字或图片可能包含非法内容。为了确保应用的合规性,本文将简要介绍如何使用PHP调用微信API接口进行内容检测。
根据微信小程序开发文档的说明,文本内容安全识别主要有两种方式:云调用和第三方调用。第一种方式是云开发,刚上线时几乎是免费的,目前仅提供一个月的免费配额。尽管使用云函数进行内容安全识别非常方便,但它并非完全免费。
因此,我们可以选择第二种方式,即通过第三方调用来实现。这种方式的实现也并不复杂,主要需要备案域名和HTTPS支持。让我们接下来了解一下如何通过这种方式进行内容检测。

image.png

官方文档

官方在开发文档中的描述如下:
功能描述:该接口用于检查一段文本是否含有违法违规内容。
应用场景:

  1. 用户个人资料中的违规文字检测;
  2. 媒体新闻类用户发表文章和评论内容的检测;
  3. 游戏类用户编辑上传的素材(例如答题类小游戏用户上传的问题及答案)的检测等。
    另外,1.0版本的接口已经停止更新,我们需要使用最新版本的接口。

第三方调用

请求地址:https://api.weixin.qq.com/wxa/msg_sec_check?access_token=ACCESS_TOKEN
请求参数:

image.png

php代码实现

结构说明:
config.ini,配置文件,我们需要更改里面的WX_APPID 、WX_APPSECRT,需要在小程序开发后台获取。
Verification.php,封装了微信后台接口的调用和消息内容安全验证的功能。
api.php,主要来接收小程序提交的检查内容,与用户的openid。

config.ini

WX_APPID = ""
WX_APPSECRT = ""

Verification.php

<?php

class Util_Verification
{
    private $appid;
    private $appSecret;

    public function __construct($ini_file) {
        // 获取配置文件中的 appid 和 appsecret
        $conf = parse_ini_file($ini_file);
        $this->appid = $conf['WX_APPID'];
        $this->appSecret = $conf['WX_APPSECRT'];
    }

    /**
    * 获取微信 AccessToken
    */
    public function getAccessToken()
    {
        // 从文件读取 AccessToken
        $accessTokenFile = 'access_token.txt';
        if (file_exists($accessTokenFile)) {
            $data = json_decode(file_get_contents($accessTokenFile), true);
            if ($data['expire_time'] > time()) {
                return $data['access_token'];
            }
        }
        // 获取新的 AccessToken
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appSecret;
        $info = curl_init();
        curl_setopt($info, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($info, CURLOPT_HEADER, 0);
        curl_setopt($info, CURLOPT_NOBODY, 0);
        curl_setopt($info, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($info, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($info, CURLOPT_URL, $url);
        $output = curl_exec($info);
        curl_close($info);

        $result = json_decode($output, true);

        if (!empty($result['errcode'])) {
            return $result['errmsg'];
        } else {
            // 保存新的 AccessToken 到文件
            $accessToken = $result['access_token'];
            $data = [
                'access_token' => $accessToken,
                'expire_time' => time() + 3600 // 假设 AccessToken 有效期为1小时
            ];
            file_put_contents($accessTokenFile, json_encode($data));
            return $accessToken;
        }
    }

    /**
     * 违规验证
     * @param $content
     * @param $openid
     * @param $scene
     * @param $version
     * @param null $title
     * @param null $nickname
     * @param null $signature
     * @return array|string
     */
    public function msgSecCheck($content, $openid, $scene, $version, $title = null, $nickname = null, $signature = null)
    {
        $accessToken = $this->getAccessToken();
        $url = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=".$accessToken;
        $postData = [
            'content' => $content,
            'openid' => $openid,
            'scene' => $scene,
            'version' => $version,
            'title' => $title,
            'nickname' => $nickname,
            'signature' => $signature
        ];

        // 移除为空的参数
        $postData = array_filter($postData);

        $postdata = json_encode($postData, JSON_UNESCAPED_UNICODE);
        $options = array(
            'http' => array(
                'method' => 'POST',
                'header' => 'Content-type:application/json',
                'content' => $postdata,
                'timeout' => 3, // 超时时间(单位:s)
                'user-Agent' => "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0\r\n" .
                    "X-Requested-With: XMLHttpRequest",
            )
        );
        $context = stream_context_create($options);

        try {
            $result = file_get_contents($url, false, $context);
            $result = json_decode($result, true);
            if (!$result) {
                throw new Exception("获取信息失败,请重新打开页面");
            }
            return $result;
        } catch (Exception $exception) {
            return $exception->getMessage();
        }
    }
}
?>

api.php

<?php
error_reporting(0);
header('Content-Type: application/json; charset=utf-8');
// 包含 Util_Verification 类文件
require 'Verification.php';

// 定义配置文件路径
$ini_file = 'config.ini';

// 实例化 Util_Verification 类
$verification = new Util_Verification($ini_file);

// 获取 AccessToken
$accessToken = $verification->getAccessToken();
//echo "AccessToken: " . $accessToken . "\n";

// 获取 POST 提交的数据
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);

// 提取需要的参数
$content = isset($request->content) ? $request->content : "";
$openid = isset($request->openid) ? $request->openid : "";
$scene = 1; // 资料
$version = 2; // 版本固定值

// 可选的参数
// $title = isset($request->title) ? $request->title : "";
// $nickname = isset($request->nickname) ? $request->nickname : "";
// $signature = isset($request->signature) ? $request->signature : "";

// 调用消息安全检查方法
$result = $verification->msgSecCheck($content, $openid, $scene, $version);
echo json_encode($result);
?>

以上我们只需要配置好config.ini的WX_APPID 、WX_APPSECRT,接下来我们需要完成小程序部分,即可实现提交文本内容进行监测了。

小程序js参考部分

wx.request({
          url: 'https://www.qq.com/api.php', // 替换成你搭建好的接口地址
          method: 'POST',
          header: {
            'Content-Type': 'application/json'
          },
          data: {
            content: data, //需要检测的文本内容
            openid: openid //用户openid唯一识别码
          },
          success: function(res) {
            console.log(res.data);
            if (res.data.errcode == 44004||res.data.errcode == 0 &&res.data.result.label== 100 ){
              if (data) {
                that.Inputsc(data) //通过检测的逻辑
                    } else 
                        wx.showToast({
                        title: "请输入内容,不能为空",
                        icon: "none",
                        duration: 1000
                    });
            }
            else{
              that.clear() //清除文本
              wx.showModal({
                  title: '您输入的文本涉及敏感内容,请重新输入!',
                  icon: "none",
                  duration: 800
              }); 
          }
            // 处理成功响应
          },
          fail: function(err) {
            console.error(err);
            // 处理失败响应
          }
        });

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系客服并出示版权证明以便删除!
教你使用VBS脚本轰炸微信好友/微信轰炸机制作教程
« 上一篇 07-13
Python批量处理微信公众号图片资源
下一篇 » 07-13

发表评论

  • 泡泡
  • 阿呆
  • 阿鲁
  • 蛆音娘
    没有更多评论了