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


使用场景介绍

本司的使用场景是:做营销活动,邀请新用户得某某实物,这时候会有用户使用接码平台,利用国内或国外手机号进行注册,默认是黑号,所以要进行拦截,由此调研,确定使用阿里云的风险识别

阿里云风险识别文档

产品定位

风险识别(Fraud Detection)基于阿里巴巴安全团队多年风控技术的积累,结合阿里云、淘宝、支付宝等平台的风险运营经验,为企业用户提供智能、轻量、成熟的业务风控解决方案,快速解决业务安全风险,降低损失。

目前的产品包括:注册风险识别(基础版与增强版)、营销风险识别(基础版与增强版)、登录风险识别(基础版与增强版)、设备风险识别、业务风险情报、邮箱画像、地址评分。

PHP SDK

PHP SDK 源码下载:https://github.com/aliyun/aliyun-openapi-php-sdk

PHP SDK的环境准备、安装使用可参考:阿里云SDK开发指南

克隆阿里云的php sdk 库

git clone https://github.com/aliyun/aliyun-openapi-php-sdk.git

实际使用到的文件夹如下:aliyun-php-sdk-core、aliyun-php-sdk-saf

公共参数介绍

服务接口的入参参数包含公共请求参数和具体服务事件参数,公共请求参数是指每一个接口都需要使用到的参数,点击跳转到阿里云公共请求参数文档

Service参数

阿里云云盾颁发的服务code,不可随意设置。以下是境内常用到的code、如果更多信息,请查看文档

  • 注册风险识别-增强版服务的code是account_abuse_pro
  • 注册风险识别服务的code是account_abuse
  • 营销风险识别-增强版服务的code是coupon_abuse_pro
  • 营销风险识别服务的code是coupon_abuse
  • 登录风险识别-增强版服务的code是account_takeover_pro
  • 登录风险识别服务的code是account_takeover
  • 设备风险识别服务的code是device_risk

开始php实战

首先封装一个tools文件:AliApi.php

setService('account_abuse'); // 注册风险识别服务
        $request->setServiceParameters($json_data);

        // 发起请求
        $response = $client->getAcsResponse($request);

        // 请求正常。
        if ($response->Code == 200) {
            $score = 0;
            // 注册风险识别服务返回的Data参数中的score值,值区间在0~100之间,值越大代表行为的风险程度越大。
            if (isset($response->Data->Score)) {
                $score = $response->Data->Score;
            }
             // 将调用过风险识别的数据存到redis(后台可用list分页)
            $data = json_decode($json_data);
            getRedis()->lPush('list:sms',$data->mobile.'_'.$score);
            return self::handle_score($score);
        }
        switch ($response->Code) {
            case 400: $msg = 'ServiceParameters(事件参数)不合法';break;
            case 402: $msg = '日QPS超过已购规格,限流。';break;
            case 403: $msg = '权限不足,服务未开通或已到期。';break;
            case 404: $msg = 'Service(服务参数)不合法。';break;
            case 500: $msg = '内部服务器错误。';break;
            default : $msg = $response->Code;break;
        }
        // 自定义日志处理 可有可无
        write_log('ali-注册风险识别事件','info','logs/ali_sdk.log','错误信息:'.$msg);
        return 'error';
    }

    public static function handle_score($score)
    {
        $score = intval($score);
        /**
         * 0到35(不含)    低风险    可放过
         * 35(含)到65(不含)    中风险    可打标观察
         * 65(含)到85(不含)    中高风险    可进一步安全验证或限制高危业务使用权限
         * 85(含)到100(含)    高风险    可限制高危业务使用权限
         */
        $bool = false;
        if ($score >= 0 && $score < 65) {
            $bool = true;
        }

        return $bool;
    }
}

控制器调用

下方为实战demo,具体参数定义请查看注册风险识别事件及返回参数

/**
 * 防垃圾手机号注册问题
 * @param $phone_num 手机号码
 * @param $area_code 地区代码
 * User: https://github.com/WXiangQian
 */
public function ali_api_check(Request $request)
{
    // 默认国内手机号。如有海外手机,需包含国家地区代码,格式为”地区代码-手机号码“
    $phone_num = strtolower( $request->input('phone_num') );
    $phone_num = str_replace(' ','',$phone_num);
    $area_code = $request->input('area_code','0086'); // 地区代码 默认0086 

    $new_phone_num = $phone_num;
    if ($area_code != '0086') {
        $new_phone_num = $area_code.'-'.$new_phone_num;
    }
    $arr = [
        'mobile'=>$new_phone_num,
        'operateTime'=>time(),
        'ip'=>ip2long(Request::ip());,
    ];
    if (!empty($_SERVER['HTTP_REFERER'])) $arr['refer'] = $_SERVER["HTTP_REFERER"];
    if (!empty($_SERVER['HTTP_USER_AGENT'])) $arr['userAgent'] = $_SERVER["HTTP_USER_AGENT"];

    $json_data = json_encode($arr);
    $ali_res = ALiApi::run($json_data);

    if ($ali_res !== 'error') {
        // 有风险
        if ($ali_res === false) {
            $this->ajaxReturn([
                'errno'=>401,
                'msg'=>'手机号码异常,请联系客服。'
            ]);
        }
    }
}

demo地址

https://github.com/WXiangQian/laravel-api

结束语

本实战是用php语言简单接入了阿里云注册风险识别,使用框架为laravel框架,仅供参考,灵活运用方可适用于所有php框架,希望大家通过此文可以得到收获。

原文链接:https://juejin.im/post/5ddf3559e51d4543172e8208


文章作者: WXiangQian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WXiangQian !
  目录