class AliyunGreen | |
{ | |
private $accessKeyId; | |
private $accessKeySecret; | |
private $url = 'https://green.%s.aliyuncs.com%s'; | |
private $api; | |
private $signatureNonce = ''; | |
public function __construct($accessKeyId, $accessKeySecret, $area, $api, $signatureNonce) | |
{ | |
$this->accessKeyId = $accessKeyId; | |
$this->accessKeySecret = $accessKeySecret; | |
$this->api = $api; | |
$this->url = \sprintf($this->url, $area, $api); | |
$this->signatureNonce = $signatureNonce; | |
} | |
/** | |
* @param string $body | |
* @param string $clientInfo | |
* @return mixed | |
*/ | |
private function setQueryUrl(string $body, string $clientInfo) | |
{ | |
$headers = $this->setHeader($body); | |
$str = "POST" . PHP_EOL; | |
foreach ($headers as $k => $v) { | |
if (strpos($k, 'x-acs') === 0) { | |
$str .= $k . ':' . $v . PHP_EOL; | |
} else { | |
$str .= $v . PHP_EOL; | |
} | |
} | |
if (isset($clientInfo) && $clientInfo != '') { | |
$str .= "$this->api?clientInfo=" . $clientInfo; | |
} else { | |
$str .= $this->api; | |
} | |
$signature = base64_encode(hash_hmac("sha1", $str, $this->accessKeySecret, true)); | |
$Authorization = ['Authorization' => "acs $this->accessKeyId:$signature"]; | |
$httpHeader = array_merge($headers, $Authorization); | |
$queryHeader = []; | |
foreach ($httpHeader as $k => $v) { | |
$queryHeader[] = $k . ':' . $v; | |
} | |
if (isset($clientInfo) && $clientInfo != '') { | |
$this->url = $this->url . '?clientInfo=' . urlencode($clientInfo); | |
} | |
$res = $this->curl($this->url, true, $body, $queryHeader); | |
return json_decode($res, 1); | |
} | |
/** | |
* @param string $body | |
* @return array | |
*/ | |
private function setHeader(string $body): array | |
{ | |
$headers = [ | |
'Accept' => 'application/json', | |
'Content-MD5' => base64_encode(md5($body, 1)), | |
'Content-Type' => 'application/json', | |
'Date' => gmdate('D, d M Y H:i:s T', time()), //'Tue, 17 Jan 2017 10:16:36 GMT',注意时区 | |
'x-acs-version' => '2018-05-09', | |
'x-acs-signature-nonce' => $this->signatureNonce == '' ? $this->getSignatureNonce(10) : $this->signatureNonce, | |
'x-acs-signature-version' => '1.0', | |
'x-acs-signature-method' => 'HMAC-SHA1', | |
]; | |
ksort($headers); | |
return $headers; | |
} | |
/** | |
* @param string $url | |
* @param bool $isPost | |
* @param $arr | |
* @param array $header | |
* @return bool|string | |
*/ | |
public function curl(string $url, bool $isPost, $arr, array $header) | |
{ | |
try { | |
$ch = curl_init(); | |
if ($ch === false) { | |
throw new Exception('failed to initialize'); | |
} | |
if (stripos($url, "https://") !== false) { | |
//关闭证书 | |
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | |
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | |
} | |
if (!empty($header)) { | |
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); | |
curl_setopt($ch, CURLOPT_HEADER, 0); //返回response头部信息 | |
} | |
curl_setopt($ch, CURLOPT_URL, $url); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | |
//post方式 | |
if (!empty($isPost)) { | |
if (is_array($arr)) { | |
$content = http_build_query($arr); //入参内容 | |
} else { | |
$content = $arr; | |
} | |
curl_setopt($ch, CURLOPT_POST, true); | |
curl_setopt($ch, CURLOPT_POSTFIELDS, $content); //所传参 | |
} | |
$sContent = curl_exec($ch); | |
if ($sContent === false) { | |
throw new Exception(curl_error($ch), curl_errno($ch)); | |
} | |
$aStatus = curl_getinfo($ch); | |
curl_close($ch); | |
return $sContent; | |
} catch (Exception $e) { | |
trigger_error(sprintf( | |
'Curl failed with error #%d: %s', | |
$e->getCode(), $e->getMessage()), | |
E_USER_ERROR); | |
} | |
} | |
/** | |
* @param int $length | |
* @return string | |
*/ | |
private function getSignatureNonce(int $length): string | |
{ | |
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; | |
$len = strlen($str) - 1; | |
$randstr = ''; | |
for ($i = 0; $i < $length; $i++) { | |
$num = mt_rand(0, $len); | |
$randstr .= $str[$num]; | |
} | |
return $randstr; | |
} | |
// 文本审核 | |
public function textScan($content) | |
{ | |
$tasks = $this->setQueryUrl($content, ''); | |
print_r($tasks); | |
} | |
// 图片审核 | |
public function imageScan($content) | |
{ | |
$tasks = $this->setQueryUrl($content, ''); | |
print_r($tasks); | |
} | |
} | |
// 使用方式 | |
$text = new AliyunGreen('id', 'secret', 'cn-beijing', '/green/text/scan', | |
''); | |
$body = '{"scenes": ["antispam"],"tasks": [{"dataId": "cfd33235-71a4-468b-8137-a5ffe323a7e8","content": "本校小额贷款,安全、快捷、方便、无抵押,随机随贷,当天放款,上门服务。"}]}'; | |
print_r($text->textScan($body)); | |
$image = new AliyunGreen('id', 'secret', 'cn-shenzhen', '/green/image/scan', | |
''); | |
$body = '{"scenes":["porn"],"tasks":[{"dataId":"test2NInmO$tAON6qYUrtCRgLo-1mwxdi","url":"https://img.alicdn.com/tfs/TB1urBOQFXXXXbMXFXXXXXXXXXX-1442-257.png"}]}'; | |
print_r($image->imageScan($body)); | |
阿里云内容安全接口 敏感词 green scan、图片 image scan
PHP技术
527
0
0
2022-04-16
标签
阿里云API