导语:在CSDN翻阅博客内容时,无意看到这篇——“PHP接入网易易盾验证码”的文章。易盾的微信公众号运营同学认为,手把手教你XXX的内容都是很受欢迎的,所以易盾经过作者同意并授权转载于此,希望能给接入易盾验证码服务的公司们一个参考。 接入网易易盾验证码流程图:
后端接入:http://support.dun.163.com/documents/15588062143475712?docId=69218161355051008
前端web接入:http://support.dun.163.com/documents/15588062143475712?docId=150442915877015552
官方PHP示例代码:https://github.com/yidun/captcha-php-demo
<?php namespace App\Services; /** * 易盾验证码二次校验SDK * WXiangQian <175023117@qq.com> */ class CaptchaVerifier { const VERSION = 'v2'; const API_TIMEOUT = 5; const API_URL = 'http://c.dun.163yun.com/api/v2/verify'; protected $captcha_id; protected $secret_id; protected $secret_key; /** * 验证码id * 密钥对 * 密钥对 * @param $captcha_id * @param $secret_id * @param $secret_key */ public function __construct($captcha_id, $secret_id, $secret_key) { $this->captcha_id = $captcha_id; $this->secret_id = $secret_id; $this->secret_key = $secret_key; } /** * 发起二次校验请求 * 二次校验数据 * @param $validate * @param string $user 用户信息 * @return bool|mixed * User: WXiangQian <175023117@qq.com> * Date: 2019-05-13 17:22 */ public function verify($validate, $user = '') { $params = array(); $params["captchaId"] = $this->captcha_id; $params["validate"] = $validate; $params["user"] = $user; // 公共参数 $params["secretId"] = $this->secret_id; $params["version"] = self::VERSION; $params["timestamp"] = sprintf("%d", round(microtime(true)*1000));// time in milliseconds $params["nonce"] = sprintf("%d", rand()); // random int $params["signature"] = $this->sign($this->secret_key, $params); $result = $this->send_http_request($params); return array_key_exists('result', $result) ? $result['result'] : false; } /** * 计算参数签名 * 密钥对key * 请求参数 * @param $secret_key * @param $params * @return string * User: WXiangQian <175023117@qq.com> * Date: 2019-05-13 17:23 */ private function sign($secret_key, $params){ ksort($params); // 参数排序 $buff=""; foreach($params as $key=>$value){ $buff .=$key; $buff .=$value; } $buff .= $secret_key; return md5($buff); } /** * 发送http请求 * @param $params * @return array|mixed * User: WXiangQian <175023117@qq.com> * Date: 2019-05-13 17:23 */ private function send_http_request($params){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, self::API_URL); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::API_TIMEOUT); curl_setopt($ch, CURLOPT_TIMEOUT, self::API_TIMEOUT); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); /* * Returns TRUE on success or FALSE on failure. * However, if the CURLOPT_RETURNTRANSFER option is set, it will return the result on success, FALSE on failure. */ $result = curl_exec($ch); // var_dump($result); if(curl_errno($ch)){ $msg = curl_error($ch); curl_close($ch); return array("error"=>500, "msg"=>$msg, "result"=>false); }else{ curl_close($ch); return json_decode($result, true); } } }新建config/captcha.php 添加如下代码:
<?php #联系商务获取秘钥 return [ 'captcha'=>[ 'CAPTCHA_ID' => env('CAPTCHA_ID'), 'SECRET_ID' => env('SECRET_ID'), 'SECRET_KEY' => env('SECRET_KEY'), ] ];.env添加:
#captcha CAPTCHA_ID=CAPTCHA_ID SECRET_ID=SECRET_ID SECRET_KEY=SECRET_KEY二次校验:
public function wangyiVerify(Request $request) { $validate = $request->input('validate'); // 文档地址:http://support.dun.163.com/documents/15588062143475712?docId=69218161355051008 $CaptchaVerifier = new CaptchaVerifier(config('captcha.captcha.CAPTCHA_ID'),config('captcha.captcha.SECRET_ID'),config('captcha.captcha.SECRET_KEY')); //通过则返回true $validatePass = $CaptchaVerifier->verify($validate); if (!$validatePass) { return $this->responseError('验证不通过'); } return $this->responseSuccess('验证通过'); }
(文/WXiangQian王先森,出处/ https://blog.csdn.net/qq175023117/article/details/90665492 )
相关阅读:Question第五期 | 怎样有效杜绝“羊毛党“的薅羊毛行为?
Question第六期 | 手游要想反外挂,该如何正确选择可靠的第三方服务?
Question第七期 | 标注下数据、训练个模型,商用的智能鉴黄有这么简单吗?
点击“