• 售前

  • 售后

热门帖子
入门百科

laravel中短信发送验证码的实现方法

[复制链接]
涵涵爸爸520 显示全部楼层 发表于 2021-10-25 20:15:50 |阅读模式 打印 上一主题 下一主题
媒介
前段时间想实现一个短信验证码的功能,但是卡了很长时间。
起首我用的是阿里云的短信服务业务,其首次接入流程如下:

在阿里云上开通短信服务后必要做的:
1,申请署名  2,申请模板   3,创建Accesskey ,值得说的是,可以通过阿里云提供的子用户举行Accesskey的创建,如许可以更安全  4,充值
laravel有很多的举行短信业务的扩展包,之前我用的是阿里大于,使用如下:
1,从终端或者命令进入您的项,运行:
  1. composer require iscms/alisms-for-laravel
复制代码
2,将:
  1. iscms\Alisms\AlidayuServiceProvider::class
复制代码
加入config\app.php的Providers下 雷同:

3,运行:
  1. php artisan vendor:publish
复制代码
,如许会在config文件夹下新增一个alisms.php文件,内容如下:
  1. <?php
  2. return [
  3.   'KEY' =>env('ALISMS_KEY',null),
  4.   'SECRETKEY'=>env('ALISMS_SECRETKEY',null),
  5. ];
复制代码
4,在.env文件中写入:
  1. ALISMS_KEY=23305789
  2. ALISMS_SECRETKEY=**************
复制代码
留意:ALISMS_KEY和ALISMS_SECRETKEY就是阿里云天生的访问秘钥成对(AccessKeyId 与 AccessKeySecret)
开始使用:
1,在您必要调用短信服务的控制器中引入SMS:
  
  1. use iscms\Alisms\SendsmsPusher as Sms;
复制代码
  1. public function __construct(Sms $sms)
  2. {
  3.   $this->sms=$sms;
  4. }
  5. public function index()
  6. {
  7.   $result=$this->sms->send("$phone","$name","$content","$code");
  8. }
复制代码
参数分析:$phone,$name,$content,$code

      
  • $phone 指接受短信方的短信号码,  
  • $name 指短信署名 可以在阿里大鱼短信署名 http://www.alidayu.com/admin/service/sign 找到  
  • $content 是指短信模板中的变量内容.举个例子
在本身的阿里大鱼模板内里有下面一个短信模板
模板名称: 身份验证验证码

模板ID: SMS_3910275

*模板内容: 验证码$
  1. ,您正在进行${product}身份验证,打死不要告诉别人哦!<br />
  2. </p>
  3. <p>那么对应的我们的$content 就应该为<br />
  4. </p>
  5. [code]
  6.   {
  7.   code:"生成的验证码",
  8.   product:"示例项目"
  9. }
复制代码
到此就可以正常使用,但是不知道为什么,我在使用过程中,控制台返回了code=11的错误码,在淘宝上查证后是因为isv权限的题目,之后我在阿里云大将用户的权限控制开到了最大,但是仍旧会出现这个错误,换了一个扩展包还是这个题目,到现在还没有办理,于是我就在laravel中写原生的。
起首从阿里云官网上下载关于短信服务的sdk包

SDK工具包中一共包含了2个类库,一个aliyun-php-sdk-core包,别的一个是alicom-dysms-api包,将这两个包添加到工程类库中依赖。

选择PHP版本的sdk包将压缩包解压,内里有四个文件夹:api_demo,api_sdk,msg_demo,msg_sdk

在laravel项目的app文件夹下新建一个名为libs的文件夹,将api_sdk和msg_sdk复制到libs文件夹下。

找到根目次下的composer.json文件,找到composer.json中界说的classmap选项,写入引入的两个包:

终端进入项目文件夹中运行:
  1. composer dumpautoload
复制代码
如许子就在laravel中引入了第三方类库。

创建代码文件

我将其简单的封装了一下:
  1. <?php
  2. // namespace App\Http\Controllers\sms;
  3. use Aliyun\Core\Config;
  4. use Aliyun\Core\Profile\DefaultProfile;
  5. use Aliyun\Core\DefaultAcsClient;
  6. use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
  7. use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
  8. use App\Http\Controllers\Controller;
  9. // 加载区域结点配置
  10. Config::load();
  11. class SmsController extends Controller
  12. {
  13.   /**
  14.    * 构造器
  15.    * @param string $accessKeyId 必填,AccessKeyId
  16.    * @param string $accessKeySecret 必填,AccessKeySecret
  17.    */
  18.   public function __construct($accessKeyId="######",$accessKeySecret="#######")
  19.   {
  20.    // 短信API产品名
  21.     $product = "Dysmsapi";
  22.    // 短信API产品域名
  23.     $domain = "dysmsapi.aliyuncs.com";
  24.     // 暂时不支持多Region
  25.     $region = "cn-hangzhou";
  26.     // 服务结点
  27.     $endPointName = "cn-hangzhou";
  28.     // 初始化用户Profile实例
  29.     $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
  30.     // 增加服务结点
  31.     DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
  32.     // 初始化AcsClient用于发起请求
  33.     $this->acsClient = new DefaultAcsClient($profile);
  34.   }
  35.   /**
  36.    * 发送短信范例
  37.    * @param [type] $phoneNumbers 必填, 短信接收号码
  38.    * @param string $signName 必填, 短信签名,应严格"签名名称"填写,
  39.    * @param string $templateCode 必填, 短信模板Code,应严格按"模板CODE"填写,
  40.    * @param [type] $outId  选填, 假如模板中存在变量需要替换则为必填项
  41.    * @return [type]    [description]
  42.    */
  43.   public function sendSms($phoneNumbers,$signName="XX软件",$templateCode="SMS_XXXXXX",$outId=null)
  44.   {
  45.     // 初始化SendSmsRequest实例用于设置发送短信的参数
  46.    $request = new SendSmsRequest;
  47.     // 必填,设置雉短信接收号码
  48.    $request->setPhoneNumbers($phoneNumbers);
  49.     // 必填,设置签名名称
  50.    $request->setSignName($signName);
  51.    // 必填,设置模板CODE
  52.    $request->setTemplateCode($templateCode);
  53.    $num = rand(100000,999999);
  54.     // 可选,设置模板参数
  55.    $request->setTemplateParam(json_encode(
  56.     Array(
  57.      "code" => "$num"
  58.     )
  59.    ));
  60.     // 可选,设置流水号
  61.    if($outId) {
  62.     $request->setOutId($outId);
  63.    }
  64.     // 发起访问请求
  65.    $acsResponse = $this->acsClient->getAcsResponse($request);
  66.   }
  67.   /**
  68.    * 查询短信发送情况范例
  69.    * @param [type] $phoneNumbers 必填, 短信接收号码
  70.    * @param [type] $sendDate  必填,短信发送日期,格式Ymd,支持近30天记录查询
  71.    * @param integer $pageSize 必填,分页大小
  72.    * @param integer $currentPage 必填,当前页码
  73.    * @param [type] $bizId  选填,短信发送流水号
  74.    * @return [type]    [description]
  75.    */
  76.   public function queryDetails($phoneNumbers,$sendDate,$pageSize=10,$currentPage=1,$bizId=null)
  77.   {
  78.     // 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
  79.    $request = new QuerySendDetailsRequest();
  80.    $request->setPhoneNumber($phoneNumbers);
  81.    $request->setSendDate($sendDate);
  82.    $request->setPageSize($pageSize);
  83.    $request->setCurrentPage($currentPage);
  84.    if($bizId) {
  85.     $request->setBizId($bizId);
  86.    }
  87.    $acsResponse = $this->acsClient->getAcsResponse($request);
  88.   }
  89. }
复制代码
之后用就实例化调用方法就可以了。
总结
以上就是这篇文章的全部内容了,盼望本文的内容对各人的学习或者工作具有肯定的参考学习代价,如果有疑问各人可以留言交换,谢谢各人对草根技术分享的支持。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作