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


Posted in PHP onApril 25, 2018

前言

前段时间想实现一个短信验证码的功能,但是卡了很长时间。

首先我用的是阿里云的短信服务业务,其首次接入流程如下:

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

在阿里云上开通短信服务后需要做的:

1,申请签名  2,申请模板   3,创建Accesskey ,值得说的是,可以通过阿里云提供的子用户进行Accesskey的创建,这样可以更安全  4,充值

laravel有很多的进行短信业务的扩展包,之前我用的是阿里大于,使用如下:

1,从终端或者命令进入您的项,运行:composer require iscms/alisms-for-laravel

2,将:iscms\Alisms\AlidayuServiceProvider::class加入config\app.php的Providers下 类似:

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

3,运行:php artisan vendor:publish,这样会在config文件夹下新增一个alisms.php文件,内容如下:

<?php
 return [
  'KEY' =>env('ALISMS_KEY',null),
  'SECRETKEY'=>env('ALISMS_SECRETKEY',null),
 ];

 4,在.env文件中写入:

ALISMS_KEY=23305789
ALISMS_SECRETKEY=**************

 注意:ALISMS_KEY和ALISMS_SECRETKEY就是阿里云生成的访问秘钥成对(AccessKeyId 与 AccessKeySecret)

开始使用:

 1,在您需要调用短信服务的控制器中引入SMS:

use iscms\Alisms\SendsmsPusher as Sms;

public function __construct(Sms $sms)
 {
  $this->sms=$sms;
 }

 public function index()
 {
  $result=$this->sms->send("$phone","$name","$content","$code");
 }

参数说明:$phone,$name,$content,$code

  • $phone 指接受短信方的短信号码,
  • $name 指短信签名 可以在阿里大鱼短信签名 http://www.alidayu.com/admin/service/sign 找到
  • $content 是指短信模板中的变量内容.举个例子

在自己的阿里大鱼模板里面有下面一个短信模板

模板名称: 身份验证验证码

模板ID: SMS_3910275

*模板内容: 验证码$[code],您正在进行${product}身份验证,打死不要告诉别人哦!

那么对应的我们的$content 就应该为

{
  code:"生成的验证码",
  product:"示例项目"
 }

到此就可以正常使用,但是不知道为什么,我在使用过程中,控制台返回了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选项,写入引入的两个包:

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

终端进入项目文件夹中运行:

composer dumpautoload

这样子就在laravel中引入了第三方类库。

创建代码文件

我将其简单的封装了一下:

<?php
 // namespace App\Http\Controllers\sms;
 use Aliyun\Core\Config;
 use Aliyun\Core\Profile\DefaultProfile;
 use Aliyun\Core\DefaultAcsClient;
 use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
 use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
 use App\Http\Controllers\Controller;

 // 加载区域结点配置
 Config::load();
 class SmsController extends Controller 
 {

  /**
   * 构造器
   * @param string $accessKeyId 必填,AccessKeyId
   * @param string $accessKeySecret 必填,AccessKeySecret
   */
  public function __construct($accessKeyId="######",$accessKeySecret="#######")
  {
   // 短信API产品名
    $product = "Dysmsapi";
   // 短信API产品域名
    $domain = "dysmsapi.aliyuncs.com";
    // 暂时不支持多Region
    $region = "cn-hangzhou";
    // 服务结点
    $endPointName = "cn-hangzhou";
    // 初始化用户Profile实例
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
    // 增加服务结点
    DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);

    // 初始化AcsClient用于发起请求
    $this->acsClient = new DefaultAcsClient($profile);
  }


  /**
   * 发送短信范例
   * @param [type] $phoneNumbers 必填, 短信接收号码
   * @param string $signName 必填, 短信签名,应严格"签名名称"填写,
   * @param string $templateCode 必填, 短信模板Code,应严格按"模板CODE"填写,
   * @param [type] $outId  选填, 假如模板中存在变量需要替换则为必填项
   * @return [type]    [description]
   */
  public function sendSms($phoneNumbers,$signName="XX软件",$templateCode="SMS_XXXXXX",$outId=null)
  {
    // 初始化SendSmsRequest实例用于设置发送短信的参数
   $request = new SendSmsRequest;
    // 必填,设置雉短信接收号码
   $request->setPhoneNumbers($phoneNumbers);
    // 必填,设置签名名称
   $request->setSignName($signName);
   // 必填,设置模板CODE
   $request->setTemplateCode($templateCode);
   $num = rand(100000,999999);
    // 可选,设置模板参数
   $request->setTemplateParam(json_encode(
    Array(
     "code" => "$num"
    )
   ));

    // 可选,设置流水号
   if($outId) {
    $request->setOutId($outId);
   }

    // 发起访问请求
   $acsResponse = $this->acsClient->getAcsResponse($request);
  }


  /**
   * 查询短信发送情况范例
   * @param [type] $phoneNumbers 必填, 短信接收号码
   * @param [type] $sendDate  必填,短信发送日期,格式Ymd,支持近30天记录查询 
   * @param integer $pageSize 必填,分页大小
   * @param integer $currentPage 必填,当前页码
   * @param [type] $bizId  选填,短信发送流水号
   * @return [type]    [description]
   */
  public function queryDetails($phoneNumbers,$sendDate,$pageSize=10,$currentPage=1,$bizId=null)
  {
    // 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
   $request = new QuerySendDetailsRequest();
   $request->setPhoneNumber($phoneNumbers);
   $request->setSendDate($sendDate);
   $request->setPageSize($pageSize);
   $request->setCurrentPage($currentPage);
   if($bizId) {
    $request->setBizId($bizId);
   }
   $acsResponse = $this->acsClient->getAcsResponse($request);
  }
 }

之后用就实例化调用方法就可以了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php session应用实例 登录验证
Mar 16 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
php parse_str() 函数的定义和用法
May 23 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 #PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 #PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 #PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 #PHP
原生php实现excel文件读写的方法分析
Apr 25 #PHP
PHP操作Redis常用技巧总结
Apr 24 #PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 #PHP
You might like
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
javascript 写类方式之一
2009/07/05 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
Promise扫盲贴
2019/06/24 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
使用python实现扫描端口示例
2014/03/29 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
python设置环境变量的作用和实例
2019/07/09 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
Java面试题及答案
2012/09/08 面试题
五一手机促销方案
2014/03/08 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
中文专业求职信
2014/06/20 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
英文产品推荐信
2015/03/27 职场文书
召开会议通知范文
2015/04/15 职场文书
单身证明格式样本
2015/06/15 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python