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=
- 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(,);
- // 可选,设置模板参数
- $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=,$currentPage=,$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);
- }
- }
- 之后用就实例化调用方法就可以了。
laravel中实现短信发送验证码的更多相关文章
- Java中实现短信发送
最近跟着做公司的项目偶然接触到的,顺势把这个给记录下来,给自己梳理一下. 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ...
- PHP 手机短信发送验证码
点击链接加入群[php/web 学习课堂]:https://jq.qq.com/?_wv=1027&k=5645xiw 欢迎大家加入,一起讨论学习 本篇设计的知识点有点多,我会分类将,同学们可 ...
- Android中实现短信发送的一种方式
SendSmsActivity.java: package com.test.smsmangerdemo.sendsmsactivity; import android.support.v7.app. ...
- Java版阿里云通信短信发送API接口实例(新)
阿里云通信(原名阿里大于)的短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码.短信通知等. 完美支撑双11期间2亿用户,发送6亿短信 ...
- laravel中短信发送验证码的实现方法
在阿里云上开通短信服务后需要做的: 1,申请签名 2,申请模板 3,创建Accesskey ,值得说的是,可以通过阿里云提供的子用户进行Accesskey的创建,这样可以更安全 4,充值 larave ...
- Laravel SMS 短信发送包
Laravel Sms Laravel 贴合实际需求同时满足多种通道的短信发送组件 我们基于业务需求在 overtrue/easy-sms 基础进行扩展开发,主要实现如下目标: 支持短信验证码直接在 ...
- Laravel实现大型商城网站之用户注册短信发送项目实战功能开发
确定短信运营商 我这里采用的云片,不过大家使用其它的也可以. 首先自己注册一个帐号,然后找到这个 点击开始接入,完成新手引导过程. 第二部的签名和模板必须填写,类似我下面填写的这样 值得注意的是这个模 ...
- day80:luffy:短信sdk接入&点击获取验证码&注册功能的实现&Celery实现短信发送功能
目录 1.短信sdk接入 2.前端点击获取验证码效果 3.注册后端接口实现 4.注册-前端 5.Celery 6.Celery完成短信发送功能 1.短信sdk接入 1.准备工作 1.下载云通讯相关的文 ...
- day102:MoFang:后端完成对短信验证码的校验&基于celery完成异步短信发送&flask_jwt_extended&用户登录的API接口
目录 1.用户注册 1.后端完成对短信验证码的校验 2.基于celery实现短信异步发送 2.用户登录 1.jwt登录验证:flask_jwt_extended 2.服务端提供用户登录的API接口 1 ...
随机推荐
- HashSet,LinkedHashSet,TreeSet的区别
Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...
- 关于responseBody注解中文乱码的问题解决
在web.xml中定义字符集过滤器: <filter> <filter-name>SpringEncodingFilter</filter-name> <fi ...
- HTTPS和HTTP的区别是什么?
广泛应用于互联网世界的HTTP想必是大家再熟悉不过的了,然而细心的朋友可能发现淘宝.百度.网上银行等网站都变成HTTPS开头,并且还有一把小绿锁挂在地址栏,那么HTTPS和HTTP的区别是什么呢? 一 ...
- eclipse F3可以查询某个方法的具体定义
eclipse F3可以查询某个方法的具体定义
- Mysql Nested-Loop Join Algorithms
MySQL在多表之间执行join时,利用一种nested-loop algorithm 或者其变种:(嵌套循环) Nested-Loop Join Algorithm 一个简单的嵌套循环连 ...
- python中的Queue(队列)详解
一.Queue简介 python中的队列分类可分为两种: 1.线程Queue,也就是普通的Queue 2.进程Queue,在多线程与多进程会介绍. Queue的种类: FIFO: Queue.Que ...
- Performance Testing 前期准备以及场景设计
性能测试的session参加过几个,也查阅了很多相关的资料.年前被分配了测试任务,一直拖到现在,准备开始做的时候,才发现真的是不知道如何做起啊.今天和同事聊了一下,有很大启发.测试小白一枚,只分享一下 ...
- python3 第十六章 - 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被 ...
- linkin大话面向对象--继承
[修饰符] class SubClass extends SuperClass 按照这种关系,我们把SuperClass类称为父类或基类,把SubClass称为子类或派生类或拓展类.extend ...
- 基于Elasticsearch搜索平台设计
背景 随着公司业务的高速发展以及数据爆炸式的增长,当前公司各产线都有关于搜索方面的需求,但是以前的搜索服务系统由于架构与业务上的设计,不能很好的满足各个业务线的期望,主要体现下面三个问题: 不能支持对 ...