TP5 阿里云短信验证

2023-11-05

方法一:
1,composer下载:

composer require mrgoon/aliyun-sms

2,验证方法代码:

 //短信验证
    public function sms(Request $request){
        // 接收参数
       $tel = $request->get('tel');
       //随机生成验证码
        $code = mt_rand(100000,999999);
        //验证码存redis
        Cache::set("tel_".$tel,$code,300);
        // 验证码发手机
        $config = [
            'access_key' => "你自己的accessKey",//appID
            'access_secret' => "你自己的accessSecret",// appKey
            'sign_name' => "signName",// 签名
        ];
        $sms = new AliSms();
        //$response = $sms->sendSms('phone number', 'tempplate code', ['name'=> 'value in your template'], $config);
        $response = $sms->sendSms($tel, 'SMS_150575093', ['code'=> $code], $config);// 'code' 是模板里的 $code 是上面是生成的
        if ($response){
            return json("获取验证码成功".$response);
        }else{
            return json("获取短信验证码失败");
        }
    }

方法二


function send_sms($tel){
    // 获取配置信息
    $code = rand(0000,9999);
    $accessKeyId = 'AccessKeyID'; // 阿里云 
    $accessKeySecret = 'AccessKeySecret';  // 阿里云 AccessKeySecret
    $templateCode = '';   // 短信模板ID
    $signName='';   // 短信签名
    $params = array (
        'SignName' => $signName,
        'Format' => 'JSON',
        'Version' => '2017-05-25',
        'AccessKeyId' => $accessKeyId,
        'SignatureVersion' => '1.0',
        'SignatureMethod' => 'HMAC-SHA1',
        'SignatureNonce' => uniqid(),
        'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
        'Action' => 'SendSms',
        'TemplateCode' => $templateCode,
        'PhoneNumbers' => $tel,
        // 营销短信无需 TemplateParam 参数
        'TemplateParam' => '{"code":"' . $code . '"}'
    );
    // 计算签名并把签名结果加入请求参数
    $params ['Signature'] = computeSignature($params, $accessKeySecret);
    // 发送请求
    $url = 'http://dysmsapi.aliyuncs.com/?' . http_build_query($params);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $result = curl_exec($ch);
    curl_close($ch);
    //返回请求结果
    $result = json_decode($result,true);
   if ($result['Code']=="isv.MOBILE_NUMBER_ILLEGAL"){
        $data = ['code'=>400, 'msg'=>'非法手机号','sms'=>''];
        return $data;
    }elseif ($result['Code']=="isv.OUT_OF_SERVICE"){
        $data = ['code'=>400, 'msg'=>'短信业务已停机,联系管理请联系管理员','sms'=>''];
        return $data;
    }elseif ($result['Code']=="isv.BUSINESS_LIMIT_CONTROL"){
        $data = ['code'=>400, 'msg'=>'当前手机号发送频率过高,请稍后再试','sms'=>''];
        return $data;
    }else{
        $data = ['code'=>200, 'msg'=>'ok','sms'=>$code];
        return $data;
    }
}

function computeSignature($parameters, $accessKeySecret) {
    ksort($parameters);
    $canonicalizedQueryString = '';
    foreach ($parameters as $key => $value) {
        $canonicalizedQueryString .= '&' .percentEncode($key) . '=' . percentEncode($value);
    }
    $stringToSign = 'GET&%2F&' . percentencode ( substr ( $canonicalizedQueryString, 1 ) );
    $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
    return $signature;
}

function percentEncode($string) {
    $string = urlencode($string);
    $string = preg_replace('/\+/', '%20', $string);
    $string = preg_replace('/\*/', '%2A', $string);
    $string = preg_replace('/%7E/', '~', $string);
    return $string;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TP5 阿里云短信验证 的相关文章

  • Magento 设置脚本中的 ALTER TABLE 不使用 SQL

    乔纳森 戴 https stackoverflow com users 336905 jonathan day says 更新不应采用以下形式 SQL命令 我没遇到过 任何 DDL 或 DML 语句不能 通过 Magento 的配置执行 结
  • 在 Windows 上查看 PHP 文件夹

    我正在编写一个简单的 PHP 脚本来监视文件夹及其子文件夹的任何更改 新文件 修改 删除 然后执行操作 我将使用 Windows 上的命令行运行此脚本php f script php 我一直在寻找一种在 Windows 上观看具有 PHP
  • 准备好的语句需要 0 个参数,给定 1 个参数..,使用 php 手册示例 [重复]

    这个问题在这里已经有答案了 我直接从 php 手册示例中获取了这个 它几乎与我需要的相同 但我仍然收到此错误 有人可以告诉我我错过了什么吗 stmt link gt prepare SELECT obitBody Photo FROM tn
  • 使用 md5 加密的 PHP 和 Mysql 查询出现问题

    我使用普通的 php mysql 插入查询并使用 md5 加密密码 这是插入查询 sql mysql query INSERT INTO user username password role approved values usernam
  • 压缩 zend Framework 2 的 html 输出

    我目前正在 PHP 5 4 4 上使用 Zend Framework 2 beta 开发个人 web 应用程序以用于自学目的 我想知道是否可以在 html 输出发送到浏览器之前拦截它 以便通过删除所有不必要的空格来缩小它 我怎样才能在ZF2
  • Laravel - 停止并发访问记录

    在 Laravel 中 有什么方法可以停止同时与同一条记录交互 例如 如果用户 A 正在编辑一条记录 那么我同时需要阻止用户 B 编辑同一条记录 注意 我在 Laravel 5 2 中使用 SESSION DRIVER file 目前大约有
  • 在会话 cookie 中存储大量数据会产生什么影响?

    谁能解释一下在会话中存储大量数据的缺点或给我指出一些阅读材料 我也很感兴趣在会话中存储数据和从数据文件读取数据之间是否有任何区别 如果您在会话中存储大量数据 则输入 输出性能会下降 因为会有大量读取 写入 默认情况下 PHP 中的会话存储在
  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • 使用 PHP 对 ASP.NET 成员身份中的用户进行身份验证

    我在尝试使用 PHP 针对现有 ASP NET 成员资格数据库对用户进行身份验证时遇到一些问题 我在网上搜索过 发现现有的答案似乎对我不起作用 即 public static function Hash password salt deco
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • 运行 Composer 返回:“无法打开输入文件:composer.phar”

    我是 symfony2 和阅读新手symblog http tutorial symblog co uk tutorial parts 在第三章中 在尝试使用数据装置时 我尝试了以下命令 php composer phar update 但
  • Laravel 按动态 ID 数组对集合进行排序 [重复]

    这个问题在这里已经有答案了 我有以下 people array 5 2 9 6 11 people collection People find people 但当我倾倒并死去时 people collection集合按 ID ASC 排序
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • PHP中如何识别服务器IP地址

    PHP中如何识别服务器IP地址 对于服务器 ip 来说是这样的 SERVER SERVER ADDR 这是港口的 SERVER SERVER PORT
  • 使用 DOJO 自动完成文本框

    我正在寻找一种使用 DOJO 进行文本框自动建议的简单方法 我将查询的数据库表 使用 PHP 脚本 以 JSON 形式返回 有超过 100 000 条记录 因此这确实不应该采用 FilteringSelect 或 ComboBox 的形式
  • 如何用javascript正确读取php cookies

    考虑这个 php 和 javascript 代码 然后我在控制台中看到的是 utma 111872281 291759993 1444771465 1445374822 1445436904 4 utmz 111872281 1444771
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • Zend Framework Zend_Form 装饰器: 位于按钮元素内部?

    我有一个像这样创建的按钮元素 submit new Zend Form Element Button submit submit gt setLabel My Button submit gt setDecorators array Vie

随机推荐

  • Spring学习笔记 搭建环境

    现在开始我们就要开始学习Spring框架了 首先要做的事情就是搭建Spring环境 为了让我们关注于Spring的功能 我在这里使用Spring Initializer 它会自动为我们创建一个包含了Spring依赖的项目 让我们能直接快速开
  • 试题 算法训练 二进制数数

    问题描述 给定L R 统计 L R 区间内的所有数在二进制下包含的 1 的个数之和 如5的二进制为101 包含2个 1 输入格式 第一行包含2个数L R 输出格式 一个数S 表示 L R 区间内的所有数在二进制下包含的 1 的个数之和 样例
  • linux 防火墙打开5432 端口,在ubuntu上打开端口5432

    我试图使用ufw使用sudo ufw allow 5432 tcp在ubuntu上打开端口5432 然后我使用nmap来查看端口5432是否已打开 我得到了这个 root domain sudo nmap sS O 127 0 0 1 St
  • Linux部署kettle并设置定时任务

    一 安装Kettle linux中使用kettle时首先需要jdk环境 这里就不概述linux中jdk的安装与配置了 1 首先将kettle压缩包放入linux并解压 unzip data integration zip kettle安装路
  • C++:理解this指针

    详情见 gt https blog csdn net keneyr article details 111758870
  • STM32 DAC 学习笔记

    本文基于SYM32F4 部分参数说明参考标准库 DAC简介 作用就是把输入的数字编码 转换成对应的模拟电压输出 DAC 可以按 8 位或 12 位模式进行配置 并且可与 DMA 控制器配合使用 在 12 位模式下 数据可以采用左对齐或右对齐
  • ASP.NET MVC Note1

    学习ASP NET MVC第一件事应该就是Route 下面的图摘自的Dino的书 由此粗略的学习可以归结于理解Routing Http Module和Http Handler Route Handler是Route Module的一部分 p
  • GAMES101回顾 -- Shading

    Shading 定义 将材质作用于对象的流程 Z Buffer 帧缓存 Frame Buffer Frame Buffer是一个用于存储图像像素数据的内存区域 它通常由一个二维数组表示 每个元素对应屏幕上的一个像素 Frame Buffer
  • c语言任意两个整数相减_c语言 大整数相减

    include include include include cin输入cout输出usingnamespacestd intmain void inta b c d e o f 210 0 h 210 0 g 210 0 include
  • Unity3D 中旋转和变换

    Transform 变换 是场景中最常打交道的类 用于控制物体的位移 旋转 缩放等功能 Transform Class inherits from Component IEnumerable Position rotation and sc
  • 小程序 bindtouchmove 使用拖动按钮 页面跟着滑动并拖动卡顿感 问题

    修改 bindtouchmove buttonMove 为 catchtouchmove buttonMove 使用touchmove监听滑动要更新视图层 导致动画卡顿 阻止冒泡可以解决
  • centos7下javac:未找到命令

    如果你配置了jdk的环境变量之后 如果输入javac 报下面错误 则你可以在终端使用命令 yum install java devel 完美解决
  • Monaco-Editor在Vue中使用(实现代码编辑与diff代码比较)

    Monaco在线代码编辑器使用总结 1 什么是Monaco Monaco编辑器是为VS代码提供支持的代码编辑器 官方API文档 2 Monaco Editor安装及使用 2 1安装 npm install monaco editor sav
  • Eu63-Collecter Euromap63协议采集接口实现

    Eu63 Collecter Euromap63协议采集接口实现 项目仓库 https github com tang0 0 Eu63 Collecter Euromap 63协议认识 https blog csdn net lblmlms
  • mysql单表数据过大的处理方法

    优先考虑表分区 其次考虑分表 最后考虑分库
  • ChatGPT与医学的结合:揭示未来医疗保健的潜力

    随着科技的不断发展 聊天机器人在诸多领域中扮演着越来越重要的角色 特别是在医学领域 通过将其与ChatGPT相结合 我们可以为医疗保健体系带来许多改变和益处 本文将探讨如何将ChatGPT应用于医学领域 以及这种结合所带来的潜在好处 1 患
  • uboot启动第一阶段详解——汇编代码部分start.S

    前言 uboot启动第一阶段是用汇编语言实现的 大部分都是Soc内部的初始化 可以理解成一些通用的初始化 只要使用该款Soc 第一阶段的初始化流程基本是一样的 不直接用C语言进行初始化是因为 C语言运行需要一定的环境 比如栈的设置 而汇编代
  • 【证书】操作大全--证书生成、格式转化、合并、导出、校验

    一 生成 1 生成秘钥key openssl genrsa out server key 2048 2 创建服务器证书的申请文件server csr 3 执行如下命令 生成凭证crt文件 openssl x509 req days 365
  • 中文特殊符号大全

    一二三四五六七八九十 一二三四五六七八九十百千万亿兆吉太拍艾分厘毫微零壹贰叁肆伍陆柒捌玖拾佰仟
  • TP5 阿里云短信验证

    方法一 1 composer下载 composer require mrgoon aliyun sms 2 验证方法代码 短信验证 public function sms Request request 接收参数 tel request g