# 附件六 阿里大于短信接口

[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,附件六 阿里大于短信接口相关推荐

  1. python接口自动化(六)--发送get请求接口(详解)

    简介 如果想用python做接口测试,我们首先有不得不了解和学习的模块.它就是第三方模块:Requests. 虽然Python内置的urllib模块,用于访问网络资源.但是,它用起来比较麻烦,而且,缺 ...

  2. Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用...

    近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...

  3. 短信验证码的实现(阿里云)

    文章目录 前言 一.短信验证码的基本步骤 二.阿里云短信验证 三.导入依赖坐标 四.调用API 五.随机生成验证码工具类 六.发送请求调用 前言 背景:目前在很多项目中都出现使用短信验证码来实现注册. ...

  4. 阿里云短信服务(完整指南),短信发送功能实现。

    本篇文章是根据阿里云短信接口,为什么选择阿里呢,首先,名气大,然后,对其他云不熟,最后,阿里云短信开通后只需要充十块钱,就够你用好久,一条四分钱,其他短信不太清楚,不过有的必须要你一次性买多少万条才能 ...

  5. PHP实现飞信接口来通过网页免费发短信

    首先感谢郝同学告诉我这么一个神奇的接口 可以输入你的手机号.密码.对方手机号.发送内容直接给对方发短信. 源作者博客地址为:http://blog.quanhz.com/ 郝同学的博客地址:http: ...

  6. java短信接口 调用_带你了解短信接口的调用

    查看接口说明 image.png 注册账号 注册成功的页面如下: image.png 设置短信内容的签名 比如:将短信签名设置为yzc image.png 查取短信接口密钥 image.png 设计J ...

  7. 【阿里云短信服务SMS】使用阿里云发送短信

    使用阿里云发送短信 前期准备工作 1.添加签名 2.添加短信模板 3.创建子用户,得到密钥:AccessKeyId和 AccessKeySecret 4.给子用户添加权限 5.收集好之前步骤中的4个关 ...

  8. 国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统

    国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统 此接口为发送接口可直接通过pos直接调用 直接发送,源码短信平台搭建平台时 包含此功能,在客户端中可查看API接口文档 接口名称 ...

  9. 短信接口被恶意调用?企业短信防火墙+【中昱维信】短信验证码【Java】

    短信接口被恶意调用?企业短信防火墙+[中昱维信]短信验证码[Java] 一.企业短信防火墙的实现 1.1 简介 1.2 第一步:获取防火墙帐号密钥 1.3 第二步:下载防火墙服务器 1.4 第三步:业 ...

最新文章

  1. Sublime Text 3 插件的安装、升级和卸载
  2. python的用途实例-python进程池作用展示及实例解析
  3. Scala代码案例:100以内的数求和,求出当和第一次大于20的当前数(循环中断机制)
  4. Matlab 预防性维修,使用 MATLAB 进行预测性维护简介
  5. LevelDB 源码剖析(一)准备工作:环境搭建、接口使用、常用优化
  6. 第5次基金申请终于中了!这个血泪教训一定要避免
  7. ado.net mysql 连接池_ADO.NET数据连接池
  8. 案例 体检套餐管理系统 需求一览 c# 1614099219
  9. C#算法设计排序篇之01-冒泡排序(附带动画演示程序)
  10. 微会显示服务器当前线路忙,免费电话之争:触宝电话/微会谁更强
  11. Centos7 wordpress4.8.2
  12. JS连续赋值与求值顺序
  13. 安装torchsnooper、convokit、entmax库
  14. 安卓分辨率_华为平板M6会不会是最强安卓平板?
  15. r型聚类分析怎么做_聚类分析原理及R语言实现过程
  16. bootice安装grub2-00 到硬盘或者U盘mbr
  17. 世硕科技推荐:Shockman 最新音译 登峰侠
  18. 定义一个复数类Complex,使得代码能够进行下面的工作:
  19. 解决50%宽度div再加上边框无法左右排列问题
  20. uchar t 单片机C语言的注释是什么,uchar(单片机中uchar是什么意思)

热门文章

  1. 卷积神经网络 ——卷积神经网络的基本思想
  2. 【工具】win10+VMware+Ubuntu+Logitech鼠标滚轮失效问题
  3. 如何在matlab中打开一个.dat文件,并载入数据
  4. gdtv.php,梦想新大陆2021兑换码大全 2021最新礼包码汇总
  5. C语言中数组长度的计算详解
  6. python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序
  7. 第86讲:Scala中For表达式的生成器、定义和过滤器学习笔记
  8. 关于AIR724UG接入TLINK云平台(未完成)
  9. 世界,就在窗外(序)
  10. 个人服务器的搭建(腾讯云服务器)