使用场景介绍
本司的使用场景是:做营销活动,邀请新用户得某某实物,这时候会有用户使用接码平台,利用国内或国外手机号进行注册,默认是黑号,所以要进行拦截,由此调研,确定使用阿里云的风险识别
阿里云风险识别文档产品定位
风险识别(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框架,希望大家通过此文可以得到收获。