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

使用场景介绍

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

阿里云风险识别文档

产品定位

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

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

PHP SDK

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

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

克隆阿里云的php sdk 库

1
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
/**
* 阿里api
* User: https://github.com/WXiangQian
*/

namespace App\Http\Tools;


use saf\Request\V20180919 as saf;

class ALiApi
{

public static function run($json_data)
{
include_once __DIR__.'/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
// 初始化
// 实战使用的是laravel框架 env()默认为配置参数,其它框架可自行设置
$iClientProfile = \DefaultProfile::getProfile("cn-shanghai", env("ACCESS_KEY_ID",''), env("ACCESS_SECRET_ID",''));
$client = new \DefaultAcsClient($iClientProfile);

// 设置参数
$request = new saf\ExecuteRequestRequest();
// 产品service请参考[公共参数]文档中的Service字段描述
$request->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,具体参数定义请查看注册风险识别事件及返回参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* 防垃圾手机号注册问题
* @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

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 使用场景介绍
    1. 1.1. 产品定位
  2. 2. PHP SDK
    1. 2.1. 公共参数介绍
      1. 2.1.1. Service参数
  3. 3. 开始php实战
    1. 3.1. 首先封装一个tools文件:AliApi.php
    2. 3.2. 控制器调用
    3. 3.3. demo地址
  4. 4. 结束语