thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO
为大家分享一个阿里大于短信发送接口:
首先创建一个发送模型(Send.php):
<?php
namespace app\index\model;
use think\Validate;
class Send extends \think\Model
{
public static $sms_config = [
'appkey' => '',//阿里大于APPKEY
'secretKey' => '',//阿里大于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)
{//该函数用于转化阿里大于返回的数据,将simplexml格式转化为数组,方面后续使用
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;
}
}
}
?>
创建好模型后,可在其他地方调用,下面我们创建一个简单的index控制器,用来测试:
<?php
namespace app\index\controller;
use app\index\model\Send;
error_reporting(0);
class Index extends \think\Controller
{
public function sms()
{
if(request()->isPost()){
$Send = new Send;
$result = $Send->sms([
'param' => ['code'=>'123456','product'=>'安德兔'],
'mobile' => input('post.mobile/s','','trim,strip_tags'),
'template' => 'SMS_12940581',
]);
if($result !== true){
return $this->error($result);
}
return $this->success('短信下发成功!');
}
return $this->fetch();
}
}
创建简单的模板文件用来测试:
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>阿里大于短信发送测试</title>
<base href="{:request()->domain()}" />
<link href="static/css/bootstrap.css" rel="stylesheet">
<link href="static/css/common.css" rel="stylesheet">
<link href="static/css/admin.css" rel="stylesheet">
<script src="static/js/jquery-1.12.0.min.js"></script>
<script src="static/js/bootstrap.min.js"></script>
<script src="static/js/jquery.qrcode.min.js"></script>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
</head>
<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<strong>阿里大于短信发送测试</strong>
</div>
<div class="panel-body">
<form class="form-horizontal sms-form" method="post" action="{:url('index/index/sms')}">
<div class="form-group">
<label class="col-sm-2 control-label">接收手机号</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="mobile" value="">
<p class="help-block">点击发送短信,您将收到:“【安德兔】验证码123456,您正在注册成为安德兔用户,感谢您的支持。”</p>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success">发送短信</button>
</div>
</div>
</form>
</div>
<div class="panel-footer"> </div>
</div>
</div>
<script>
$(function(){
$('.sms-form').submit(function(){
var $this = $(this);
if(!$this.hasClass('lock-form')){
$this.addClass('lock-form');//锁定表单
var formData = new FormData($this[0]);
$.ajax({
url:$this.attr("action"),
type:'POST',
data:formData,
dataType:'json',
cache: false,
contentType: false,
processData: false,
success:function(s){
$this.removeClass('lock-form');//解锁表单
var html = (s.code != 1 ? '错误代码:' : '')+s.msg;
$('.panel-footer').html(html);
return false;
}
});
}
return false;
});
});
</script>
</body>
</html>
thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO的更多相关文章
- PHP阿里大于发短信教程
PHP阿里大于发短信教程 1 先去控制台 https://www.alidayu.com/center/user/account?spm=a3142.7791109.1999204004.5.ZtBQ ...
- Java版阿里云通信短信发送API接口实例(新)
阿里云通信(原名阿里大于)的短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码.短信通知等. 完美支撑双11期间2亿用户,发送6亿短信 ...
- 短信发送接口demo
public class SendValidCode { // 短信发送的接口网关 private static String sendUrl = "******************** ...
- 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本
前言 承接前文<短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求>,文中有讲到一个定位非法IP的shell脚本,现在就来公布一下吧,并没有什么技术难度,只是当时花了些时间去写 ...
- 短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场
前言 短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜 短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本 ...
- Python2-Django配置阿里大于的短信验证码接口
1.短信发送开发指南地址:https://help.aliyun.com/document_detail/55491.html?spm=a2c4g.11186623.6.568.l5zTwH 2.SD ...
- 通过sails和阿里大于实现短信验证
通过sails与阿里大于来实现注册短信验证码的发送,逻辑图如下 1.用户在客户端发送手机号给服务器,服务器接收到手机号,生成对应时间戳,随机四位数验证码 2.服务器将电话号码和验证码告诉阿里大于服务器 ...
- Delphi - Delphi7 调用阿里大于实现短信消息验证
阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信.语音.流量直充.私密专线.店铺手机号等个性化服务.每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到.官方文档提供 ...
- 给安卓端调用的短信发送接口demo
package com.js.ai.modules.pointwall.action; import java.io.IOException; import java.util.HashMap; im ...
随机推荐
- vs2010 每行代码显示虚线
快捷键:Ctrl+R,W或Ctrl+E,S,即可去除 或者是编辑菜单——高级——查看空白 VS12010代码编辑器横向滚动条 工具----选项-----文本编辑器---所有语言---右侧 自动换行去掉
- Gym 100531B Buffcraft (贪心+暴力+前缀和)
题意:给定两个加血的方式,一个是直接加多少,另一种是加百分之几,然后你能够你选 k 种,问你选哪 k 种. 析:首先肯定要选加的多的,所以我们先排序,从大到小,然后用前缀和存储一下,再去枚举从第一种和 ...
- FOJ2252:Yu-Gi-Oh!
传送门 题意 略 分析 枚举合成ab的数量,在此基础上合成bc和ac,复杂度\(O(n)\) trick 代码 #include<cstdio> #include<algorithm ...
- bzoj 3512: DZY Loves Math IV【欧拉函数+莫比乌斯函数+杜教筛】
参考:http://blog.csdn.net/wzf_2000/article/details/54630931 有这样一个显然的结论:当\( |\mu(n)|==1 \)时,\( \phi(nk) ...
- Ubuntu安装配置vsftpd
1. 安装 1. sudo apt-get install vsftpd 2. sudo apt-get install db4.8-util 用于创建虚拟用户 2. 创建用户 创建文 ...
- jenkins软件工具部署
Jenkins服务软件的安装部署 1.我们在linux安装部署Jenkins的时候,因为jenkins是一个java web程序,所以首先要保证linux系统上已经安装配置好java JDK环境,并安 ...
- [POI2001]Goldmine
Description Byteman作为Byteland的The Goldmine(某一公司厂矿)的最有功的雇员之一,即将在年末退休.为了表示对他的 认真勤恳的工作的承认,The Goldmine的 ...
- “玲珑杯”第七届郑州轻工业学院ACM程序设计大赛 ------- D:社交网络
题目链接: http://acm.zzuli.edu.cn/problem.php?cid=1099&pid=3 题目大意: 国语题目,题意显而易见, 解题思路: 只需要对每一个节点进行假设, ...
- 229 Majority Element II 求众数 II
给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 你的算法应该在O(1)空间中以线性时间运行. 详见:https://leetcode.com/problems/major ...
- Android开发学习--MVP模式入门
1.模型与视图完全分离,我们可以修改视图而不影响模型2.可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部3.我们可以将一个Presenter用于多个视图,而不需要改变Pr ...