阿里云对接内容审核,php 原生https请求

本来想使用sdk,结果composer安装就报错了. 

composer require alibabacloud/green-20220302 2.2.8

composer require alibabacloud/green-20220302 2.2.8

报错
        nelexa/zip 3.3.3 requires php ^5.5.9 || ^7.0 -> your php version (8.0.2) does not satisfy that requirement
       原因是由于本地环境是php8,而nelexa/zip还没有支持php8


为此,花了几个小时的时间,对接了原生https的请求.

这里为了方便,我创建了一个自定义的Ali类,可能与原先冲突,可以换一个类名.

<?php
/**
 * 阿里类
 */
class Ali
{
    public $accessKeyId = '你的key';
    public $accessKeySecret = '你的secret';

    // 签名
    public function aliyunSign($method, $queryParams) {

        // 第一步排序
        ksort($queryParams);
        // 第二步 &拼接key=value
        $canonicalizedQueryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986);
        // 第三步 拼接请求方法post/get,固定格式
        $stringToSign = strtoupper($method) . '&'. urlencode('/') . '&'
            . urlencode($canonicalizedQueryString);
        // 第四部,hash, sha1, 等加密后base64返回
        $signature = base64_encode(hash_hmac('sha1', $stringToSign, $this->accessKeySecret . '&', true));
        return $signature;
    }

    /**
     * @param $type
     *      nickname:用户昵称检测
     *      chat:私聊互动内容检测
     *      comment:公聊评论内容检测
     *      ai_art:AIGC文字检测
     *      ad_compliance:广告法合规检测
     *      pgc:PGC教学物料检测
     *      来源:nickname_detection:用户昵称检测
     *           chat_detection:私聊互动内容检测
     *           comment_detection:公聊评论内容检测
     *           ai_art_detection:AIGC文字检测
     *           ad_compliance_detection:广告法合规检测
     *           pgc_detection:PGC教学物料检测
     * @return array
     */
    public function detection($content, $type = 'nickname')
    {
        $url = 'https://green-cip.cn-shenzhen.aliyuncs.com/';

        $method = 'post';
        // 输出UTC时间
        $utc_timestamp = strtotime('-8 hours');
        $utc_time = date("Y-m-d", $utc_timestamp).'T';
        $utc_time .= date("H:i:s", $utc_timestamp).'Z';

        $queryParams = [
            'Format' => 'JSON',
            'Version' => '2022-03-02',
            'SignatureMethod' => 'Hmac-SHA1',
            'SignatureNonce' => rand(100,999) .time(),
            'SignatureVersion' => '1.0',
            'Action' => 'TextModeration',
            'AccessKeyId' => $this->accessKeyId,
            'Timestamp' => $utc_time,
            'Service' => "nickname_detection", // parameter invalid(service) 参数无效。Service改为小写:parameter is null(service)报参数为空,只能大写开头
            'ServiceParameters' => json_encode(['content' => $content]),

            // 以下注释可删除
            // "{"RequestId":"A901AC8B-F591-5128-8BEC-9458EBDAC261","Message":"OK","Data":{"reason":"","labels":""},"Code":200}"
            // 'ServiceParameters' => "{\"content\": \"王八蛋\"}", // "{"RequestId":"19A3F07E-FA42-588B-A2CA-0AB24707226E","Message":"OK","Data":{"reason":"{\"riskTips\":\"辱骂_低俗\",\"riskWords\":\"王八蛋,王八\"}","labels":"profanity"},"Code":200}"
            // 'ServiceParameters' => , // {\"content\": \"王八蛋\"}
            // 'ServiceParameters' => "{\"content\": \"王八蛋\"}", // {"Msg":"parameter invalid(service)
        ];

        $sign = $this->aliyunSign($method, $queryParams);
        $queryParams['Signature'] = $sign;

        $res = curl_post($url, $queryParams);

        $res = json_decode($res, true);
        if (is_array($res) && $res) {
            if ($res['Code'] == 200 && !empty($res['Data'])) {
                if (is_array($res['Data']) && $res['Data']) {
                    if (!empty($res['Data']['labels'])) {
                        return ['code' => 400, 'message' => $res['Data']['reason']];
                    } else {
                        return ['code' => 200, 'message' => '通过'];
                    }
                } else {
                    return ['code' => 400, 'message' => '请求错误'];
                }
            } else {
                return ['code' => 400, 'message' => '请求aliyun接口错误'];
            }

        } else {
            // 自定义错误返回
            return ['code' => 400, 'message' => 'error'];
        }

    }
}

 使用的时候,判断code=200就是可以通过的,反之,都是有问题的,注意记录日志啥的,好排查.

require_once __DIR__ . '/Ali.php';
    
$content = '王八蛋';
$content = '张三';
$r = (new \Ali())->detection($content);
var_dump($r);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值