php 防垃圾手机号注册功能(对接阿里云风险识别)

防恶意刷福利或者垃圾手机注册

为了防止某些垃圾手机注册,最近开始着手了解风险识别的认知以及对接相关的业务,在对接的过程中遇到了有坑的地方,特此写出来仅供参考!!!

生成签名的规则比较繁琐如下:

  //阿里风险检测生成签名规则
    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 这样子的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值