插件合集
安装
composer require alibabacloud/sdk
后台
<?php /** * Created by PhpStorm. * User: Zhangyongfeng * Date: 2020/11/24 * Time: 13:57 * * ━━━━━━━━━神兽出没━━━━━━━━━ * * ┏┓ ┏┓+ + * ┏┛┻━━━┛┻┓ + + * ┃ ┃ * ┃ ━ ┃ ++ + + + * ████━████ ┃+ * ┃ ┃ + * ┃ ┻ ┃ * ┃ ┃ + + * ┗━┓ ┏━┛ * ┃ ┃ * ┃ ┃ + + + + * ┃ ┃ Code is far away from bug with the animal protecting * ┃ ┃ + 神兽保佑,代码无bug * ┃ ┃ * ┃ ┃ + * ┃ ┗━━━┓ + + * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ + + + + * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛+ + + + * * ━━━━━━━━━感觉萌萌哒━━━━━━━━━ */ namespace app\base\controller; use think\App; use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException; class TelCode extends Base { protected $alConfig = []; public function __construct(App $app = null) { parent::__construct($app); $this->alConfig = [ \'accessKeyId\' => $this->config[\'cfg_alicloudid\'], \'accessKeySecret\' => $this->config[\'cfg_alicloudsecret\'], \'product\' => \'Dysmsapi\', \'version\' => \'2017-05-25\', \'action\' => \'SendSms\', \'method\' => \'POST\', \'host\' => \'dysmsapi.aliyuncs.com\', \'signName\' => $this->config[\'cfg_alicloudname\'], \'templateCode\' => $this->config[\'cfg_alicloudmodel\'], ]; } /** * [alGetcode 获取阿里云验证码] * @param number $tel 手机号 * @param string $signName 签名(需要在阿里云短信服务后台申请) * @param string $templateCode 短信模板code (需要在阿里云短信服务后台申请) * @param boolean $debug 是否试调 * @return array [\'msg\' => 123456, \'code\' => 1001] * @return array [\'msg\' => \'手机号错误\', \'code\' => 500] * */ function alGetcode($tel, $signName = "", $templateCode = "", $debug = false) { if(is_null($tel)){ return parent::showReturnCode(500, \'\',\'手机号为空\'); } if(empty($signName)){ $signName = $this->alConfig[\'signName\']; } if(empty($templateCode)){ $templateCode = $this->alConfig[\'templateCode\']; } $check = \'/^(1(([35789][0-9])|(47)))\d{8}$/\'; if (preg_match($check, $tel)) { $code = rand(100000,999999); session(\'code\', $code, \'index\'); if($debug){ echo session(\'code\', \'\', \'index\');die; } AlibabaCloud::accessKeyClient($this->alConfig[\'accessKeyId\'], $this->alConfig[\'accessKeySecret\']) ->regionId(\'cn-hangzhou\') ->asDefaultClient(); try { $result = AlibabaCloud::rpc() ->product($this->alConfig[\'accessKeyId\']) ->version($this->alConfig[\'version\']) ->action($this->alConfig[\'action\']) ->method($this->alConfig[\'method\']) ->host($this->alConfig[\'host\']) ->options([ \'query\' => [ \'RegionId\' => "cn-hangzhou", //需要发送到那个手机 \'PhoneNumbers\' => $tel, //必填项 签名(需要在阿里云短信服务后台申请) \'SignName\' => $signName, //必填项 短信模板code (需要在阿里云短信服务后台申请) \'TemplateCode\' => $templateCode, //如果在短信中添加了${code} 变量则此项必填 要求为JSON格式 // \'TemplateParam\' => "{\'code\':".$a."}", ], ]) ->request(); } catch (ClientException $e) { // echo $e->getErrorMessage() . PHP_EOL; } catch (ServerException $e) { // echo $e->getErrorMessage() . PHP_EOL; } return parent::showReturnCode(1001, session(\'code\', \'\', \'index\'), \'验证码校验通过\'); } else { return parent::showReturnCodeWithOutData(500, \'手机号错误\'); } } /** * [changeAlCode 校验阿里云验证码] * @param number $code * @return array [\'msg\' => \'验证码校验通过\', \'code\' => 1001] * @return array [\'msg\' => \'验证码校验失败\', \'code\' => 501] * */ public function changeAlCode($code) { if($code == session(\'code\', \'\', \'index\')){ return parent::showReturnCodeWithOutData(1001, \'验证码校验通过\'); }else{ return parent::showReturnCodeWithOutData(500, \'验证码校验失败\'); } } }
其中 showReturnCode 方法可以自定义,原型是[\'code\' => 1001, \'msg\'=> \'成功\']
前端
<div class="layui-fluid"> <div class="layui-row"> <form class="layui-form" method="post"> <div class="layui-form-item"> <label class="layui-form-label">手机号:</label> <div class="layui-input-inline"> <input type="text" id="tel" name="tel" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">短信验证码:</label> <div class="layui-input-inline"> <input type="text" id="code" name="code" autocomplete="off" class="layui-input"> <button type="button" class="layui-btn" onclick="getCode(this)">获取验证码(阿里云)</button> </div> </div> <div class="layui-form-item"> <label for="L_repass" class="layui-form-label"></label> <button class="layui-btn" >提交</button> </div> </form> </div> </div>
JS
var flag = true; // 获取验证码 function getCode(obj){ if(!flag){ return} var tel = $("#tel").val() var telreg = /^1\d{10}$/ if (!telreg.test(tel) || (tel == "" || tel == null)) { layer.msg(\'请输入正确的手机号码\', {icon:2,time:2000}) $("#tel").focus() return false }else{ var number = 60; var c_time = setInterval(function(){ if(number <= 1){ flag = true $(obj).html("重新发送"); clearInterval(c_time); }else{ flag = false $(obj).html("重新发送("+number+")") number-- } },1000); $.ajax({ url:"<{:url(\'telCode\')}>", type:"POST", data:{ tel: tel, signName: "", templateCode: "", debug: true }, success:function(data){ console.log(data); } }) } }
调用
public function telCode() { if(request()->post()){ if(!empty($this->param[\'tel\'])){ $tel = $this->param[\'tel\']; }else { return parent::showReturnCodeWithOutData(500, \'手机号错误\'); } $signName = !empty($this->param[\'signName\']) ? $this->param[\'signName\'] : \'\'; $templateCode = !empty($this->param[\'templateCode\']) ? $this->param[\'templateCode\'] : \'\'; return $this->telCode->alGetcode($tel, $signName, $templateCode, $this->param[\'debug\']); } return $this->fetch(); }
效果