首先开通阿里云短信包,之后申请短信包签名,这里大家自行去阿里云申请
安装阿里云sdk
composer require alibabacloud/dysmsapi-0525 2.0.9
首先创建Sample类方便调用,我们需要有短信签名,签名模板,阿里云keyId和accessKeySecret
阿里云key在阿里云首页,右上角有个acesskey管理就可以看到
Sample.php文件
<?php/***Created by giveLive*user:lingm*Date:/6/15*timer:下午 9:59*Atom:现在的努力是为了小时候吹过的NB**/namespace app\index\controller;use AlibabaCloud\SDK\Dysmsapi\V0525\Dysmsapi;use Darabonba\OpenApi\Models\Config;use AlibabaCloud\SDK\Dysmsapi\V0525\Models\SendSmsRequest;class Sample{/*** 使用AK&SK初始化账号Client* @param string $accessKeyId* @param string $accessKeySecret* @return Dysmsapi Client*/public static function createClient($accessKeyId, $accessKeySecret){$config = new Config([// 您的AccessKey ID"accessKeyId" => $accessKeyId,// 您的AccessKey Secret"accessKeySecret" => $accessKeySecret]);// 访问的域名$config->endpoint = "";return new Dysmsapi($config);}/*** @param string[] $data* @return void*/public static function main($phone,$code){$code = ["code"=>$code];// $client = self::createClient("LTAI5tJhF874FTXC1RnVGm1m", "NNdztlLo3SfJGWjsjX2HrLbez0slzT");$client = self::createClient("", ""); // 阿里云key和accesecret$sendSmsRequest = new SendSmsRequest(["phoneNumbers" => $phone, //控制器层的接收的手机号"signName" => "", //短信签名"templateCode" => "", //短信模板"templateParam" => json_encode($code), //验证码]);$resp = $client->sendSms($sendSmsRequest);if (!$resp){return false;}return $resp;}}
业务逻辑层生成随机验证码
public static function code(){//生成一个随机的6位数字验证码$code = rand(10000,999999);return $code;}
控制器层验证登录
<?php/***Created by giveLive*user:lingm*Date:/6/15*timer:下午 10:12*Atom:现在的努力是为了小时候吹过的NB**/namespace app\index\controller;use think\admin\Controller;use think\facade\Cache;class PhoneLogin extends Controller{public function index(){$data['phone'] = $this->request->param("phone");$code = $this->request->param("code");if (empty($data['phone']) || empty($code)){$this->error("参数错误");}//验证用户是否存在 ,大家自行僬侥//.............//$data['create_at'] = date('Y-m-d H:i:s',time());$data['ip'] = $this->request->ip();//调用生成的随机验证码$getCode = Number::code();//将生成的验证码放入缓存中Cache::store("redis")->set($data['phone'],$getCode);$sendCode = Sample::main($data['phone'],$getCode);//判断输入的验证码是否正确$checkCode = Cache::store("redis")->get($data['phone']);if ($code !== $checkCode){$this->error("验证码错误");}//登录成功//........//}}
至此短信验证登录完结束
注意 最好这个代码上传到服务器验证,而且请求协议要https,否则可能会出现问题,宝塔面板可以免费申请ssl