防恶意刷福利或者垃圾手机注册
为了防止某些垃圾手机注册,最近开始着手了解风险识别的认知以及对接相关的业务,在对接的过程中遇到了有坑的地方,特此写出来仅供参考!!!
生成签名的规则比较繁琐如下:
//阿里风险检测生成签名规则
public function aliSignature($parameters, $accessKeySecret)
{
// 将参数Key按字典顺序排序
ksort($parameters);
// 生成规范化请求字符串(名称和值要使用UTF-8字符集进行URL编码)
$standardQueryString = '';
foreach ($parameters as $key => $value) {
$standardQueryString .= '&' . $this->percentEncode($key)
. '=' . $this->percentEncode($value);
}
//构造用于计算签名的字符串
$stringToSign = 'GET&%2F&' . $this->percentencode(substr($standardQueryString, 1));
// 计算签名,注意accessKeySecret后面要加上字符'&'
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
return $signature;
}
public function percentEncode($str)
{
// 一般支持URL编码的库,将编码后的字符串中加号(+)替换成%20、星号(*)替换成%2A、%7E替换回波浪号(~)
$res = urlencode($str);
$res = preg_replace('/\+/', '%20', $res);
$res = preg_replace('/\*/', '%2A', $res);
$res = preg_replace('/%7E/', '~', $res);
return $res;
}
然后就是对接公共参数和相对应业务的参数如下:
public function aliRiskCheck($phone, $ip)
{
$service_params = [
'operateTime' => time(),
'mobileMd5' => md5($phone),
'ip' => $ip,
];
$service = config('service');
$common_params = [
'Format' => 'json',
'Version' => '2018-09-19',
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce' => str_random(),
'SignatureVersion' => '1.0',
'Action' => 'ExecuteRequest',
'AccessKeyId' => $accessKeyId,
'Timestamp' => date('Y-m-d\TH:i:s\Z', time() - date('Z')),
'Service' => 'account_abuse_pro',
'ServiceParameters' => json_encode($service_params)
];
$common_params['Signature'] = $this->aliSignature($common_params, $accessKeySecret);
$url = 'https://saf.cn-shanghai.aliyuncs.com/?' . http_build_query($common_params);
}
坑有两处 一处就是Timestamp时间戳这里可能会出现时间误差切记用
date(‘Y-m-d\TH:i:s\Z’, time() - date(‘Z’))
这种处理方式
还有一处是返回结果文档里给的是小写的score tags实际结果是
Score Tags 这样子的数据