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

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

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

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文件,内容如下:

  1. <?php
  2. return [
  3. 'KEY' =>env('ALISMS_KEY',null),
  4. 'SECRETKEY'=>env('ALISMS_SECRETKEY',null),
  5. ];

4,在.env文件中写入:

  1. ALISMS_KEY=
  2.  
  3. ALISMS_SECRETKEY=**************

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

开始使用:

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

  use iscms\Alisms\SendsmsPusher as Sms;

  1. public function __construct(Sms $sms)
  2. {
  3. $this->sms=$sms;
  4. }
  5.  
  6. public function index()
  7. {
  8. $result=$this->sms->send("$phone","$name","$content","$code");
  9. }
  1. 参数说明:$phone,$name,$content,$code
  1. $phone 指接受短信方的短信号码,
  2. $name 指短信签名 可以在阿里大鱼短信签名 http://www.alidayu.com/admin/service/sign 找到
  3. $content 是指短信模板中的变量内容.举个例子
  1.  
  1. 在自己的阿里大鱼模板里面有下面一个短信模板
  2.  
  3. 模板名称: 身份验证验证码
  4. 模板ID: SMS_3910275
  5. *模板内容: 验证码${code},您正在进行${product}身份验证,打死不要告诉别人哦!
  6. 那么对应的我们的$content 就应该为
  1.   {
  2. code:"生成的验证码",
  3. product:"示例项目"
  4. }
  5.  
  6. 到此就可以正常使用,但是不知道为什么,我在使用过程中,控制台返回了code=11的错误码,在淘宝上查证后是因为isv权限的问题,之后我在阿里云上将用户的权限控制开到了最大,但是依旧会出现这个错误,
  7. 换了一个扩展包还是这个问题,到现在还没有解决,于是我就在laravel中写原生的。
  8.  
  9. 首先从阿里云官网上下载关于短信服务的sdk
  10. SDK工具包中一共包含了2个类库,一个aliyun-php-sdk-core包,另外一个是alicom-dysms-api包,将这两个包添加到工程类库中依赖。
  1. 选择PHP版本的sdk包将压缩包解压,里面有四个文件夹:api_demo,api_sdk,msg_demo,msg_sdk
  1. laravel项目的app文件夹下新建一个名为libs的文件夹,将api_sdkmsg_sdk复制到libs文件夹下。
  1. 找到根目录下的composer.json文件,找到composer.json中定义的classmap选项,写入引入的两个包:

 
  1. 终端进入项目文件夹中运行:
  1. composer dumpautoload
  1. 这样子就在laravel中引入了第三方类库。
  1.  
  1. 创建代码文件
  1. 我将其简单的封装了一下:
  1.  
  1. <?php
  2.  
  3. // namespace App\Http\Controllers\sms;
  4. use Aliyun\Core\Config;
  5. use Aliyun\Core\Profile\DefaultProfile;
  6. use Aliyun\Core\DefaultAcsClient;
  7. use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
  8. use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
  9. use App\Http\Controllers\Controller;
  10.  
  11. // 加载区域结点配置
  12. Config::load();
  13.  
  14. class SmsController extends Controller
  15. {
  16.  
  17. /**
  18. * 构造器
  19. * @param string $accessKeyId 必填,AccessKeyId
  20. * @param string $accessKeySecret 必填,AccessKeySecret
  21. */
  22. public function __construct($accessKeyId="######",$accessKeySecret="#######")
  23. {
  24. // 短信API产品名
  25. $product = "Dysmsapi";
  26.  
  27. // 短信API产品域名
  28. $domain = "dysmsapi.aliyuncs.com";
  29.  
  30. // 暂时不支持多Region
  31. $region = "cn-hangzhou";
  32.  
  33. // 服务结点
  34. $endPointName = "cn-hangzhou";
  35.  
  36. // 初始化用户Profile实例
  37. $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
  38.  
  39. // 增加服务结点
  40. DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
  41.  
  42. // 初始化AcsClient用于发起请求
  43. $this->acsClient = new DefaultAcsClient($profile);
  44. }
  45.  
  46. /**
  47. * 发送短信范例
  48. * @param [type] $phoneNumbers 必填, 短信接收号码
  49. * @param string $signName 必填, 短信签名,应严格"签名名称"填写,
  50. * @param string $templateCode 必填, 短信模板Code,应严格按"模板CODE"填写,
  51. * @param [type] $outId 选填, 假如模板中存在变量需要替换则为必填项
  52. * @return [type] [description]
  53. */
  54. public function sendSms($phoneNumbers,$signName="XX软件",$templateCode="SMS_XXXXXX",$outId=null)
  55. {
  56. // 初始化SendSmsRequest实例用于设置发送短信的参数
  57. $request = new SendSmsRequest;
  58.  
  59. // 必填,设置雉短信接收号码
  60. $request->setPhoneNumbers($phoneNumbers);
  61.  
  62. // 必填,设置签名名称
  63. $request->setSignName($signName);
  64.  
  65. // 必填,设置模板CODE
  66. $request->setTemplateCode($templateCode);
  67.  
  68. $num = rand(,);
  69.  
  70. // 可选,设置模板参数
  71. $request->setTemplateParam(json_encode(
  72. Array(
  73. "code" => "$num"
  74. )
  75. ));
  76.  
  77. // 可选,设置流水号
  78. if($outId) {
  79. $request->setOutId($outId);
  80. }
  81.  
  82. // 发起访问请求
  83. $acsResponse = $this->acsClient->getAcsResponse($request);
  84. }
  85.  
  86. /**
  87. * 查询短信发送情况范例
  88. * @param [type] $phoneNumbers 必填, 短信接收号码
  89. * @param [type] $sendDate 必填,短信发送日期,格式Ymd,支持近30天记录查询
  90. * @param integer $pageSize 必填,分页大小
  91. * @param integer $currentPage 必填,当前页码
  92. * @param [type] $bizId 选填,短信发送流水号
  93. * @return [type] [description]
  94. */
  95. public function queryDetails($phoneNumbers,$sendDate,$pageSize=,$currentPage=,$bizId=null)
  96. {
  97. // 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
  98. $request = new QuerySendDetailsRequest();
  99.  
  100. $request->setPhoneNumber($phoneNumbers);
  101.  
  102. $request->setSendDate($sendDate);
  103.  
  104. $request->setPageSize($pageSize);
  105.  
  106. $request->setCurrentPage($currentPage);
  107.  
  108. if($bizId) {
  109. $request->setBizId($bizId);
  110. }
  111. $acsResponse = $this->acsClient->getAcsResponse($request);
  112. }
  113. }
  1.  
  1. 之后用就实例化调用方法就可以了。

 

  1.  
  1.  
  1.  
  1.  

laravel中实现短信发送验证码的更多相关文章

  1. Java中实现短信发送

    最近跟着做公司的项目偶然接触到的,顺势把这个给记录下来,给自己梳理一下. 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ...

  2. PHP 手机短信发送验证码

    点击链接加入群[php/web 学习课堂]:https://jq.qq.com/?_wv=1027&k=5645xiw 欢迎大家加入,一起讨论学习 本篇设计的知识点有点多,我会分类将,同学们可 ...

  3. Android中实现短信发送的一种方式

    SendSmsActivity.java: package com.test.smsmangerdemo.sendsmsactivity; import android.support.v7.app. ...

  4. Java版阿里云通信短信发送API接口实例(新)

    阿里云通信(原名阿里大于)的短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码.短信通知等. 完美支撑双11期间2亿用户,发送6亿短信 ...

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

    在阿里云上开通短信服务后需要做的: 1,申请签名 2,申请模板 3,创建Accesskey ,值得说的是,可以通过阿里云提供的子用户进行Accesskey的创建,这样可以更安全 4,充值 larave ...

  6. Laravel SMS 短信发送包

    Laravel Sms Laravel 贴合实际需求同时满足多种通道的短信发送组件 我们基于业务需求在 overtrue/easy-sms 基础进行扩展开发,主要实现如下目标: 支持短信验证码直接在 ...

  7. Laravel实现大型商城网站之用户注册短信发送项目实战功能开发

    确定短信运营商 我这里采用的云片,不过大家使用其它的也可以. 首先自己注册一个帐号,然后找到这个 点击开始接入,完成新手引导过程. 第二部的签名和模板必须填写,类似我下面填写的这样 值得注意的是这个模 ...

  8. day80:luffy:短信sdk接入&点击获取验证码&注册功能的实现&Celery实现短信发送功能

    目录 1.短信sdk接入 2.前端点击获取验证码效果 3.注册后端接口实现 4.注册-前端 5.Celery 6.Celery完成短信发送功能 1.短信sdk接入 1.准备工作 1.下载云通讯相关的文 ...

  9. day102:MoFang:后端完成对短信验证码的校验&基于celery完成异步短信发送&flask_jwt_extended&用户登录的API接口

    目录 1.用户注册 1.后端完成对短信验证码的校验 2.基于celery实现短信异步发送 2.用户登录 1.jwt登录验证:flask_jwt_extended 2.服务端提供用户登录的API接口 1 ...

随机推荐

  1. HashSet,LinkedHashSet,TreeSet的区别

    Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...

  2. 关于responseBody注解中文乱码的问题解决

    在web.xml中定义字符集过滤器: <filter> <filter-name>SpringEncodingFilter</filter-name> <fi ...

  3. HTTPS和HTTP的区别是什么?

    广泛应用于互联网世界的HTTP想必是大家再熟悉不过的了,然而细心的朋友可能发现淘宝.百度.网上银行等网站都变成HTTPS开头,并且还有一把小绿锁挂在地址栏,那么HTTPS和HTTP的区别是什么呢? 一 ...

  4. eclipse F3可以查询某个方法的具体定义

    eclipse F3可以查询某个方法的具体定义

  5. Mysql Nested-Loop Join Algorithms

    MySQL在多表之间执行join时,利用一种nested-loop algorithm 或者其变种:(嵌套循环)  Nested-Loop Join Algorithm      一个简单的嵌套循环连 ...

  6. python中的Queue(队列)详解

    一.Queue简介 python中的队列分类可分为两种: 1.线程Queue,也就是普通的Queue 2.进程Queue,在多线程与多进程会介绍. Queue的种类: FIFO:  Queue.Que ...

  7. Performance Testing 前期准备以及场景设计

    性能测试的session参加过几个,也查阅了很多相关的资料.年前被分配了测试任务,一直拖到现在,准备开始做的时候,才发现真的是不知道如何做起啊.今天和同事聊了一下,有很大启发.测试小白一枚,只分享一下 ...

  8. python3 第十六章 - 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被 ...

  9. linkin大话面向对象--继承

    [修饰符] class SubClass extends SuperClass    按照这种关系,我们把SuperClass类称为父类或基类,把SubClass称为子类或派生类或拓展类.extend ...

  10. 基于Elasticsearch搜索平台设计

    背景 随着公司业务的高速发展以及数据爆炸式的增长,当前公司各产线都有关于搜索方面的需求,但是以前的搜索服务系统由于架构与业务上的设计,不能很好的满足各个业务线的期望,主要体现下面三个问题: 不能支持对 ...