php阿里云短信验证码
<?php
namespace App\Controller;
use Think\Controller;
/**
* 签名助手 2017/11/19
*
* Class SignatureHelper
*/
class AlismsPubController extends Controller{
function __construct() {
parent::__construct();
}
/**
* 生成签名并发起请求
*
* @param $accessKeyId string AccessKeyId (https://ak-console.aliyun.com/)
* @param $accessKeySecret string AccessKeySecret
* @param $domain string API接口所在域名
* @param $params array API具体参数
* @param $security boolean 使用https
* @param $method boolean 使用GET或POST方法请求,VPC仅支持POST
* @return bool|\stdClass 返回API接口调用结果,当发生错误时返回false
*/
public function request($accessKeyId, $accessKeySecret, $domain, $params, $security=false, $method='POST') {
$apiParams = array_merge(array (
"SignatureMethod" => "HMAC-SHA1",
"SignatureNonce" => uniqid(mt_rand(0,0xffff), true),
"SignatureVersion" => "1.0",
"AccessKeyId" => $accessKeyId,
"Timestamp" => gmdate("Y-m-d\TH:i:s\Z"),
"Format" => "JSON",
), $params);
ksort($apiParams);
$sortedQueryStringTmp = "";
foreach ($apiParams as $key => $value) {
$sortedQueryStringTmp .= "&" . $this->encode($key) . "=" . $this->encode($value);
}
$stringToSign = "${method}&%2F&" . $this->encode(substr($sortedQueryStringTmp, 1));
$sign = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret . "&",true));
$signature = $this->encode($sign);
$url = ($security ? 'https' : 'http')."://{$domain}/";
try {
$content = $this->fetchContent($url, $method, "Signature={$signature}{$sortedQueryStringTmp}");
return json_decode($content);
} catch( \Exception $e) {
return false;
}
}
private function encode($str)
{
$res = urlencode($str);
$res = preg_replace("/\+/", "%20", $res);
$res = preg_replace("/\*/", "%2A", $res);
$res = preg_replace("/%7E/", "~", $res);
return $res;
}
private function fetchContent($url, $method, $body) {
$ch = curl_init();
if($method == 'POST') {
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
} else {
$url .= '?'.$body;
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"x-sdk-client" => "php/2.0.0"
));
if(substr($url, 0,5) == 'https') {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
$rtn = curl_exec($ch);
if($rtn === false) {
// 大多由设置等原因引起,一般无法保障后续逻辑正常执行,
// 所以这里触发的是E_USER_ERROR,会终止脚本执行,无法被try...catch捕获,需要用户排查环境、网络等故障
trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);
}
curl_close($ch);
return $rtn;
}
}
/*******************************************************************************************************/
<?php
namespace App\Controller;
use Think\Controller;
use App\Controller\AlismsPubController;
/**
* 签名助手 2017/11/19
*
* Class SignatureHelper
*/
class AlismsController extends AlismsPubController{
function __construct($signName,$codeId) {
parent::__construct();
$this->accessKeyId = "******************"; //AccessKeyId
$this->accessKeySecret = "***********************"; //AccessKeySecret
$this->SignName = $signName; //签名
$this->CodeId = $codeId; //验证码模板ID
}
//发送验证码
public function code($phone,$code=''){
if(!$this->isphone($phone)){
return false;
}
$params["PhoneNumbers"] = $phone;
$params["TemplateCode"] = $this->CodeId; //模板
$params['TemplateParam'] = ["code" => $code]; //验证码
return $this->send($params);
}
//验证手机号是否正确
private function isphone($phone){
if(!is_numeric($phone)){
return false;
}else{
return preg_match("/^1[3456789]{1}\d{9}$/", $phone) ? true : false;
}
}
private function send($params=[]){
$params["SignName"] = $this->SignName;
if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
$params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
}
$helper = new AlismsPubController();
$content = $helper->request(
$this->accessKeyId,
$this->accessKeySecret,
"dysmsapi.aliyuncs.com",
array_merge($params,array(
"RegionId" => "cn-hangzhou",
"Action" => "SendSms",
"Version" => "2017-05-25"
))
);
if($content===false){
return false;
}else{
$data = (array)$content;
if($data['Code']=="OK"){
return true;
}else{
return false;
}
}
}
}
/******************************************************************************************/
验证码使用:
$alisms = new AlismsController('*****','*******');
if($alisms->code($phone,$code)){
return true;
}else{
return false;
}
通知使用:
$alisms = new AlismsController('天将神兵通知','SMS_205468305');
if($alisms->code($phone,'')){
return true;
}else{
return false;
}
php阿里云短信验证码相关推荐
- nodejs实现阿里云短信验证码
nodejs实现阿里云短信验证码 事先准备 1.开通阿里云短信服务 2.获取 AccessKey 代码编写 事先准备 1.开通阿里云短信服务 1⃣️登陆阿里云,然后进入到 https://dysms. ...
- 使用阿里云短信验证码API发送短信验证码(配置,获取短信验证码,注册,登录,密码重置)
获取阿里云短信验证码需要的配置信息. 如果是新用户,可以免费领取3个月,老用户的话就只能购买了,但是也不贵. 申请短信签名 申请短信模板 编写发送短信验证码的工具类 代码中我已经进行了详细的注释,也写 ...
- 阿里云短信验证码实战
一.创建阿里云短信权限用户 1.登陆阿里云之后我们点击头像,接着点击AccessKey: 2.选择开始使用子用户 : 3.我们先要创建一个用户组: 4.依次点击新建的用户组--授权管理,给用户组授权, ...
- 【阿里云短信验证码】麻瓜教程~~~从注册---申请---代码---执行
阿里云短信验证码 当然啦,学习任何东西第一步就是去注册当前网站的账号. 阿里云的官网:https://www.aliyun.com/?utm_content=se_1008364713 ◆[1.先注册 ...
- springboot 使用shiro集成阿里云短信验证码
目录 1.阿里云短信验证码服务 2.发送短信验证码 3.shiro配置多个realm 4.验证短信验证码 5.一些修改思路 引言:短信验证码是通过发送验证码到手机的一种有效的验证码系统,主要用于验证用 ...
- C# ASP.NET MVC 阿里云短信验证码Demo
相信大家在开发过程中又很多使用到验证码验证的功能,今天将验证码的验证整理一下写了一个Demo 通过本篇后你能学习到: 阿里云短信服务 Drapper连接SQL Server进行增改操作 JS前端倒计时 ...
- [风一样的创作]二次封装阿里云短信 验证码 发送短信 查询短信 编辑短信
1.首先要注册阿里云,购买阿里云短信服务,拿到AccessKey ID和AccessKey Secret 链接: https://usercenter.console.aliyun.com/#/man ...
- Thinkphp3.2开发阿里云短信验证码
之前一直使用的是创蓝253的短信验证码,开发起来比较方便,不想阿里云这么复杂.有兴趣的同学可以去看一下创蓝253的短信验证码(https://www.253.com). 今天主要说一下阿里云的短信验证 ...
- 阿里云短信验证码的坑.....
阿里云短信的坑 博主在集成阿里云短信的时候发生了此问题: 明明生成6位数字的验证码结果,通过阿里云短信发送出来有时只有5位. 解决办法也很简单我就直接贴代码,说原因了. 原因是: 问题原因:因为我返回 ...
- 短信验证--阿里云短信验证码接口
前言 公司最近项目需要一个手机验证码的功能,任务确定后,倍感亚历山大,以为和第三方对接的都好麻烦,查阿里的API.网上大神写的博客,各种查之后才发现,简单的一塌糊涂,这里想说个问题,不知道其他的攻城狮 ...
最新文章
- 复盘一次服务安装失败问题
- JavaSE基础之构造器(构造方法)和一般方法
- C++编程思想重点笔记(下)
- java易语言_java程序员,0基础学习开发易语言。
- Linux命令 比较文件
- 男程序员怎么保养皮肤【护肤】?
- minwindow java_Java经典算法:最小窗口子字符串
- [vue] prop验证的type类型有哪几种?
- android token机制_你真的了解16.6ms刷新机制吗?
- C/C++ OpenCV图像的载入,显示,输出
- Redis 与 key 相关的常用命令
- c# 操作word中在右下角插入图片
- 适用于Photoshop,Xd和Sketch的UI套件
- 20150823 命令练习总结
- tensorflow之tfrecord
- MySQL入门总结和学习笔记
- MySQL 定时备份数据库(非常全),值得收藏!
- 最简单的基于FFMPEG的封装格式转换器(致敬雷霄骅)
- Twaver-HTML5基础学习(1)两点一线
- sqlite stmt