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

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

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

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
  1. $phone 指接受短信方的短信号码,
  2. $name 指短信签名 可以在阿里大鱼短信签名 http://www.alidayu.com/admin/service/sign 找到
  3. $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中实现短信发送验证码的更多相关文章

  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. Centos6.7安装mysql 5.6简单教程

    今天项目经理让我给服务器配一下mysql,以前配置mysql的时候,感觉好麻烦,前几天也帮朋友配置来着,今天装的时候一直报错,百度也没搞明白,所以打算换种方法装mysql,无意中发现了还有这种操作,容 ...

  2. vim&vi在编辑的时候突然卡死,不接收输入问题的解决

    多方查找无果,看了官方解释如下: "CTRL-S and CTRL-Q are called flow-control characters. They represent an antiq ...

  3. [转载]织梦CMS首页调用分类信息栏目及列表方法

    原文地址:织梦CMS首页调用分类信息栏目及列表方法作者:小武哥 不懂代码,搜索学习一晚上,都是说调用特定栏目分类信息列表的,用这个代码 {dede:arclistsg row='10' titlele ...

  4. ecshop_标签大全

    admin 后台功能 -------templates后台模板 data 上传文件.SQL备份文件.配置项 ------sqldata 数据库备份文件 ------config.php配置文件 inc ...

  5. [拾 得] 一枚迷人的贝壳 SHELL / Linux | shell 脚本初步入门

    坚持知识分享,该文章由Alopex编著, 转载请注明源地址: http://www.cnblogs.com/alopex/   索引: 什么是shell shell的分类 shell脚本的执行方式   ...

  6. struts2 从一个action跳转到另一个action的struts.xml文件的配置

    解释: 想要用<result>跳转到另一个action,原来的配置代码是: <action name="insertDept" class="strut ...

  7. Python-Blog2-编写Web app 骨架

    撸代码之前让我们先来看几个概念: 什么是协程(Coroutine)? 假设现在有两个子程序,子程序A和子程序B: def A(): print('1') print('2') print('3') d ...

  8. 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是"包"图标样式的问题

    参考:http://blog.csdn.net/luwei42768/article/details/72268246 eclipse项目中创建maven项目后,有时在执行命令maven update ...

  9. JAVA中文件与Byte数组相互转换的方法

    JAVA中文件与Byte数组相互转换的方法,如下: public class FileUtil { //将文件转换成Byte数组 public static byte[] getBytesByFile ...

  10. MySQL 报错 _DATA_TYPE_INVALID_

    报错如下: Fatal error: Uncaught Exception: _DATA_TYPE_INVALID_ :[status=>0] in /usr/local/nginx/html/ ...