php實現防垃圾手機號註冊功能(接入阿里雲風險識別)

使用場景介紹

本司的使用場景是:作營銷活動,邀請新用戶得某某實物,這時候會有用戶使用接碼平臺,利用國內或國外手機號進行註冊,默認是黑號,因此要進行攔截,由此調研,肯定使用阿里雲的風險識別php

阿里雲風險識別文檔html

產品定位

風險識別(Fraud Detection)基於阿里巴巴安全團隊多年風控技術的積累,結合阿里雲、淘寶、支付寶等平臺的風險運營經驗,爲企業用戶提供智能、輕量、成熟的業務風控解決方案,快速解決業務安全風險,下降損失。laravel

目前的產品包括:註冊風險識別(基礎版與加強版)、營銷風險識別(基礎版與加強版)、登陸風險識別(基礎版與加強版)、設備風險識別、業務風險情報、郵箱畫像、地址評分。git

PHP SDK

PHP SDK 源碼下載:github.com/aliyun/aliy…github

PHP SDK的環境準備、安裝使用可參考:阿里雲SDK開發指南ajax

克隆阿里雲的php sdk 庫json

git clone https://github.com/aliyun/aliyun-openapi-php-sdk.git
複製代碼

實際使用到的文件夾以下:aliyun-php-sdk-core、aliyun-php-sdk-saf api

公共參數介紹

服務接口的入參參數包含公共請求參數和具體服務事件參數,公共請求參數是指每個接口都須要使用到的參數,點擊跳轉到阿里雲公共請求參數文檔php框架

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

<?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;
            }
            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;
        }
        // 自定義日誌處理 無關緊要
        $tools = new Tools();
        $tools->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'=>'手機號碼異常,請聯繫客服。'
            ]);
        }
    }
}
複製代碼

結束語

本實戰是用php語言簡單接入了阿里雲註冊風險識別,使用框架爲laravel框架,僅供參考,靈活運用方可適用於全部php框架,但願你們經過此文能夠獲得收穫。

相關文章
相關標籤/搜索