900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > PHP 阿里云短信接口调用及检测验证码

PHP 阿里云短信接口调用及检测验证码

时间:2023-06-30 15:47:38

相关推荐

PHP 阿里云短信接口调用及检测验证码

发送短信

发送短信先要在阿里云注册签名及code模板,获取AccessKeyId和AccessKeySecret值

<?php/*** Created by PhpStorm.* User: Administrator* Date: /4/13* Time: 11:51*/namespace app\api\controller;use Aliyun\Core\Profile\DefaultProfile;use Aliyun\Core\DefaultAcsClient;use Aliyun\Api\Sms\Request\V0525\SendSmsRequest;use Aliyun\Core\Config;use think\Controller;use think\Log;class Code extends Controller{static $acsClient = null;/*** 取得AcsClient** @return DefaultAcsClient*/public static function getAcsClient() {//产品名称:云通信短信服务API产品,开发者无需替换$product = "Dysmsapi";//产品域名,开发者无需替换$domain = "";// TODO 此处需要替换成开发者自己的AK (https://ak-/)$accessKeyId = "AccessKeyId"; // AccessKeyId$accessKeySecret = "AccessKeySecret"; // AccessKeySecret// 暂时不支持多Region$region = "cn-hangzhou";// 服务结点$endPointName = "cn-hangzhou";if(static::$acsClient == null) {//初始化acsClient,暂不支持region化$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);// 增加服务结点DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);// 初始化AcsClient用于发起请求static::$acsClient = new DefaultAcsClient($profile);}return static::$acsClient;}/*** 发送短信* @return stdClass*/public function sendSms($phone,$code) {//根据自己SDK放置的位置修改require_once EXTEND_PATH . '/api_sdk/vendor/autoload.php';// 加载区域结点配置Config::load();// 初始化SendSmsRequest实例用于设置发送短信的参数$request = new SendSmsRequest();//可选-启用https协议//$request->setProtocol("https");// 必填,设置短信接收号码$request->setPhoneNumbers($phone);// 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms./dysms.htm#/develop/sign$request->setSignName("耐诚官网");// 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms./dysms.htm#/develop/template$request->setTemplateCode("SMS_187645441");// 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项$request->setTemplateParam(json_encode(array( // 短信模板中字段的值"code"=>$code,"product"=>"ncgw"), JSON_UNESCAPED_UNICODE));// 可选,设置流水号$request->setOutId("yourOutId");// 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)$request->setSmsUpExtendCode("1234567");// 发起访问请求$acsResponse = static::getAcsClient()->getAcsResponse($request);$res = get_object_vars($acsResponse);if($res['Code'] == 'OK'){return true;}else{Log::record('短信接口发送失败原因呢:'.$res['Message'],'notice');return false;}}}

发送短信调用接口,请根据自己的需求填写,校验code本人是存储在数据库里,数据表结构参考

验证码验证

/*** 验证码有效时长* @var int*/protected static $expire = 300;/*** 最大允许检测的次数* @var int*/protected static $maxCheckNums = 6;

/*** 手机验证码验证* @param $mobile 手机* @param $code 验证码* @param $event 事件* @return \think\response\Json*/public function checkCode($mobile,$code,$event){$time = time() - self::$expire;$sms = new \app\admin\model\Code();$where=['phone'=>$mobile, 'event'=>$event];$res = $sms->where($where)->find();if ($res) {if ($res['create_time'] > $time && $res['error_num'] <= self::$maxCheckNums) {$correct = $code == $res['code'];if (!$correct) {$sms->where('id', $res['id'])->setInc('error_num');return ['code' => 0, 'msg' => '验证码错误', 'data' => []];} else {self::flush($mobile, $event);return ['code' => 1, 'msg' => '成功', 'data' => []];}} else {// 过期则清空该手机验证码self::flush($mobile, $event);return ['code' => 0, 'msg' => '过期或错误次数过多', 'data' => []];}} else {return ['code' => 0, 'msg' => '过期或未发送', 'data' => []];}}

/*** 过期或成功清空指定手机号验证码** @param int $mobile 手机号* @param string $event 事件* @return boolean*/public static function flush($mobile, $event = 'register'){$sms = new \app\admin\model\Code();$where=['phone'=>$mobile, 'event'=>$event];$sms->where($where)->delete();return true;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。