阿里大于短信接口php,附件六 阿里大于短信接口
# 附件六 阿里大于短信接口
[TOC]
* 2017-12-10
阿里大于 短信API接口 TP5专用类库
https://www.kancloud.cn/mikkle/thinkphp5_study/475226
### TP5 接口类文件
~~~
namespace app\base\controller;
use think\Controller;
use think\Validate;
class SendSms extends Controller
{
public static $sms_config = [
'appkey'=> '2358*****',//阿里大于APPKEY
'secretKey' => '60ec4baf8dfb46*******************',//阿里大于secretKey
'FreeSignName' => '短信签名',//短信签名
];
public function sms($data=[])
{
$validate = new Validate([
['param','require|array','参数必填|参数必须为数组'],
['mobile','require|/1[34578]{1}\d{9}$/','手机号错误|手机号错误'],
['template','require','模板id错误'],
]);
if (!$validate->check($data)) {
return $validate->getError();
}
define('TOP_SDK_WORK_DIR', CACHE_PATH.'sms_tmp/');
define('TOP_SDK_DEV_MODE', false);
vendor('alidayu.TopClient');
vendor('alidayu.AlibabaAliqinFcSmsNumSendRequest');
vendor('alidayu.RequestCheckUtil');
vendor('alidayu.ResultSet');
vendor('alidayu.TopLogger');
$config = self::$sms_config;
$c = new \TopClient;
$c->appkey = $config['appkey'];
$c->secretKey = $config['secretKey'];
$req = new \AlibabaAliqinFcSmsNumSendRequest;
$req->setExtend('');
$req->setSmsType('normal');
$req->setSmsFreeSignName($config['FreeSignName']);
$req->setSmsParam(json_encode($data['param']));
$req->setRecNum($data['mobile']);
$req->setSmsTemplateCode($data['template']);
$result = $c->execute($req);
$result = $this->_simplexml_to_array($result);
if(isset($result['code'])){
return $result['sub_code'];
}
return true;
}
private function _simplexml_to_array($obj)
{
if(count($obj) >= 1){
$result = $keys = [];
foreach($obj as $key=>$value){
isset($keys[$key]) ? ($keys[$key] += 1) : ($keys[$key] = 1);
if( $keys[$key] == 1 ){
$result[$key] = $this->_simplexml_to_array($value);
}elseif( $keys[$key] == 2 ){
$result[$key] = [$result[$key], $this->_simplexml_to_array($value)];
}else if( $keys[$key] > 2 ){
$result[$key][] = $this->_simplexml_to_array($value);
}
}
return $result;
}else if(count($obj) == 0){
return (string)$obj;
}
}
}
~~~
## 调用方法
~~~
/**
* 发送手机短信验证码
* #User: Mikkle
* #Email:776329498@qq.com
* #Date:
* @param bool|false $mobile
* @return 出错返回1003错误码和错误详情|返回错误码
*/
public function sendRegSms($mobile=false){
if (!$this->request->isAjax() ) return $this->showCode(1002);
if(!$mobile) $mobile=$this->request->param('mobile');
if (!$mobile) return $this->showCode(1004);
if (model('base/User')->infoByMobile($mobile)) return $this->showCode(1003,'该手机已经注册过,请勿重新注册');
$data_mobile['mobile']=$mobile;
$result_mobile=$this->checkValidate($data_mobile,'base/Register.mobile',true);
if ( isset($result_mobile['code']) ) return $result_mobile;
if(!$this->checkRegSms($mobile)) return $this->showCode(1003,'请勿一分钟内重复申请验证码');
$req=$this->sendSmsCode($mobile);
if ($req===true){
return $this->showCode(1001);
}else{
return $this->showCode(1003,$req);
}
}
~~~
### 调用方法(私有)
~~~
protected function sendSmsCode($mobile = false)
{
if (!$mobile) return false;
$code = rand(10000, 99999);
$data = [
'param' => ['code' => (string)$code, 'product' => '【****】'],
'mobile' => $mobile,
'template' => 'SMS_37185084',
];
$req = controller('base/SendSms')->sms($data);
if ($req === true) {
$data_cache = [
'mobile' => $mobile,
'code' => (string)$code,
'times' => time() + 60,
];
$this->setRegSmsCache($data_cache);
return true;
} else {
return $req;
}
}
~~~
### 设置手机短息验证码缓存setRegSmsCache 方法
~~~
/**
* 设置手机短息验证码缓存
* #User: Mikkle
* #Email:776329498@qq.com
* #Date:
* @param $data_cache
*/
protected function setRegSmsCache($data_cache)
{
Cache::set('sms_' . $data_cache['mobile'], $data_cache, 300);
}
~~~
### 检测手机短信验证码检测手机短信验证码
~~~
/**
* 检测手机短信验证码
* #User: Mikkle
* #Email:776329498@qq.com
* #Date:
* @param $mobile
* @param bool|false $code
* @return bool
*/
protected function checkRegSms($mobile, $code = false)
{
if (!$mobile) return false;
if ($code === false) { //判断60秒以内是否重复发送
if (!Cache::has('sms_' . $mobile)) return true;
if (Cache::get('sms_' . $mobile)['times'] > time()) {
return false;
} else {
return true;
}
} else { //判断验证码是否输入正确
if (!Cache::has('sms_' . $mobile)) return false;
if (Cache::get('sms_' . $mobile)['code'] == $code) {
return true;
} else {
return false;
}
}
}
~~~
阿里大于短信接口php,附件六 阿里大于短信接口相关推荐
- python接口自动化(六)--发送get请求接口(详解)
简介 如果想用python做接口测试,我们首先有不得不了解和学习的模块.它就是第三方模块:Requests. 虽然Python内置的urllib模块,用于访问网络资源.但是,它用起来比较麻烦,而且,缺 ...
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用...
近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...
- 短信验证码的实现(阿里云)
文章目录 前言 一.短信验证码的基本步骤 二.阿里云短信验证 三.导入依赖坐标 四.调用API 五.随机生成验证码工具类 六.发送请求调用 前言 背景:目前在很多项目中都出现使用短信验证码来实现注册. ...
- 阿里云短信服务(完整指南),短信发送功能实现。
本篇文章是根据阿里云短信接口,为什么选择阿里呢,首先,名气大,然后,对其他云不熟,最后,阿里云短信开通后只需要充十块钱,就够你用好久,一条四分钱,其他短信不太清楚,不过有的必须要你一次性买多少万条才能 ...
- PHP实现飞信接口来通过网页免费发短信
首先感谢郝同学告诉我这么一个神奇的接口 可以输入你的手机号.密码.对方手机号.发送内容直接给对方发短信. 源作者博客地址为:http://blog.quanhz.com/ 郝同学的博客地址:http: ...
- java短信接口 调用_带你了解短信接口的调用
查看接口说明 image.png 注册账号 注册成功的页面如下: image.png 设置短信内容的签名 比如:将短信签名设置为yzc image.png 查取短信接口密钥 image.png 设计J ...
- 【阿里云短信服务SMS】使用阿里云发送短信
使用阿里云发送短信 前期准备工作 1.添加签名 2.添加短信模板 3.创建子用户,得到密钥:AccessKeyId和 AccessKeySecret 4.给子用户添加权限 5.收集好之前步骤中的4个关 ...
- 国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统
国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统 此接口为发送接口可直接通过pos直接调用 直接发送,源码短信平台搭建平台时 包含此功能,在客户端中可查看API接口文档 接口名称 ...
- 短信接口被恶意调用?企业短信防火墙+【中昱维信】短信验证码【Java】
短信接口被恶意调用?企业短信防火墙+[中昱维信]短信验证码[Java] 一.企业短信防火墙的实现 1.1 简介 1.2 第一步:获取防火墙帐号密钥 1.3 第二步:下载防火墙服务器 1.4 第三步:业 ...
最新文章
- Sublime Text 3 插件的安装、升级和卸载
- python的用途实例-python进程池作用展示及实例解析
- Scala代码案例:100以内的数求和,求出当和第一次大于20的当前数(循环中断机制)
- Matlab 预防性维修,使用 MATLAB 进行预测性维护简介
- LevelDB 源码剖析(一)准备工作:环境搭建、接口使用、常用优化
- 第5次基金申请终于中了!这个血泪教训一定要避免
- ado.net mysql 连接池_ADO.NET数据连接池
- 案例 体检套餐管理系统 需求一览 c# 1614099219
- C#算法设计排序篇之01-冒泡排序(附带动画演示程序)
- 微会显示服务器当前线路忙,免费电话之争:触宝电话/微会谁更强
- Centos7 wordpress4.8.2
- JS连续赋值与求值顺序
- 安装torchsnooper、convokit、entmax库
- 安卓分辨率_华为平板M6会不会是最强安卓平板?
- r型聚类分析怎么做_聚类分析原理及R语言实现过程
- bootice安装grub2-00 到硬盘或者U盘mbr
- 世硕科技推荐:Shockman 最新音译 登峰侠
- 定义一个复数类Complex,使得代码能够进行下面的工作:
- 解决50%宽度div再加上边框无法左右排列问题
- uchar t 单片机C语言的注释是什么,uchar(单片机中uchar是什么意思)
热门文章
- 卷积神经网络 ——卷积神经网络的基本思想
- 【工具】win10+VMware+Ubuntu+Logitech鼠标滚轮失效问题
- 如何在matlab中打开一个.dat文件,并载入数据
- gdtv.php,梦想新大陆2021兑换码大全 2021最新礼包码汇总
- C语言中数组长度的计算详解
- python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序
- 第86讲:Scala中For表达式的生成器、定义和过滤器学习笔记
- 关于AIR724UG接入TLINK云平台(未完成)
- 世界,就在窗外(序)
- 个人服务器的搭建(腾讯云服务器)