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

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

https://mp.weixin.qq.com/s/4oy35LuaHZwkMNaQ69hTIg

在做用户注册和个人中心的安全管理时常常需要用到短信发送验证码,下面这篇文章主要给大家介绍了关于laravel中短信发送验证码的实现方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

 

前言

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

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

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);
  }
 }

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/113103.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • iphone12屏幕尺寸「建议收藏」

    iphone12屏幕尺寸「建议收藏」各种消息都显示今年苹果的iPhone12系列会有四款机型,分别为5.4英寸的iPhone12、6.1英寸的iPhone12Max、6.1英寸的iPhone12Pro、6.7英寸的iPhone12ProMax。6.1英寸的iPhone12e.苹果京东旗舰店:https://mall.jd.com/index-1000000127.html?5.4英寸iPhone12的机模尺寸在4英寸的iPhoneSE和4.7英寸的iPhone7之间。也就是说5.4英寸的iPhone12机身尺寸比4.7英寸的

  • 视觉SLAM技术简述,一文了解视觉SLAM「建议收藏」

    视觉SLAM技术简述,一文了解视觉SLAM「建议收藏」如今科技发展日新月异,随着机器人、AR/VR等人工智能领域的不断发展,视觉SLAM也取得了惊人的发展。本文就视觉SLAM的定义、研究分类、模块、工作原理及应用方向等方面做一个视觉SLAM的技术简述。视觉SLAM是什么?SLAM的英文全称是SimultaneousLocalizationandMapping,中文称作「即时定位与地图创建」,而视觉SLAM就是用摄像头来完成环境的感知工作。当一个自主移动的机器人处在一个未知的环境,它要通过摄像头获取的信息数据对自身以及周围环境进行一个预估.

  • Latex中插图总结(一)

    Latex中插图总结(一)写在前面的话CSDN中的数据库保存是不是有问题,我之前写了很多的,存在草稿箱里的最后竟然没有在了。真是郁闷死个人。亏我写了这么多,以后写完要保存了。泪目。Latex的插图在Latex中使用插图一般有两种方式,一种是插入事先准备好的图片,另一种是使用Latex代码直接在文档中画图。我们一般常见的使用都是第一种,准备好图片,然后直接插入在我们文档当中。只有一些特殊情况需要用大量代码作图。插图功能不是有L

  • java google 离线地图开发_如何发布google离线地图及二次开发API[通俗易懂]

    java google 离线地图开发_如何发布google离线地图及二次开发API[通俗易懂]相关教程:1.说明离线地图开发环境支持谷歌地图、百度地图、高德地图等等所有常用地图类型,支持在局域网内的地图部署、二次开发。2.实现第一步:下载安装离线地图开发环境下载安装好之后,启动软件,如下图所示:①如果你的电脑连接到网络,这里可以直接点击【进入】;如果未能链接网络,请插上离线地图加密锁点击【进入】。②这里有离线地图二次开发的相关说明以及帮助信息。点击【进入】后,如下图:①:添加离线地图-…

  • Java详解:淘宝秒杀脚本java

    Java详解:淘宝秒杀脚本java造成雪崩的真实场景1.4.1服务提供者不可用硬件故障:如网络故障、硬盘损坏等。程序的bug:如算法需要占用大量CPU的计算时间导致CPU使用率过高。缓存击穿:比如应用刚重启,短时间内缓存是失效的,导致大量请求直接访问到了数据库,数据库不堪重负,服务不可用。秒杀和大促:服务短时间承载不了那么多请求量。1.4.2重试加大流量用户连续重试:比如用户看到界面上没有响应,所以又操作了一遍,结果又增加了一倍请求量。程序重试机制:比如代码中有多次重试的逻辑,一次失

  • Brocade博科光纤交换机zone配置

    Brocade博科光纤交换机zone配置1、规划交换机端口用途DS6520B-A94存储模块1-195存储模块2-168DB1网卡1-169DB2网卡1-1DS6520B-B94存储模块1-295存储模块2-268DB1网卡1-269DB2网卡1-2…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号