0

0

laravel操作短信发送验证码功能实现步骤详解

php中世界最好的语言

php中世界最好的语言

发布时间:2018-05-16 14:04:43

|

2683人浏览过

|

来源于php中文网

原创

这次给大家带来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下 类似:

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选项,写入引入的两个包:

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

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中文网其它相关文章!

推荐阅读:

降重鸟
降重鸟

要想效果好,就用降重鸟。AI改写智能降低AIGC率和重复率。

下载

怎么让360搜索引擎收录php改写方法

PHP使用Curl实现模拟登录及抓取数据步骤详解

PHP使用file_get_contents发送http请求步骤详解

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

2

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

56

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

30

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

59

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

25

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

79

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

61

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

50

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

47

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号