基于PHP实现短信验证码接口(容联运通讯)


Posted in PHP onSeptember 06, 2016

自己也是刚刚研究,希望对也在研究的伙伴有帮助。

步骤:

1、登录荣联运通讯注册获取ACCOUNT SID、AUTH TOKEN、Rest URL(生产)、AppID(默认);

2、注册测试用手机号码(先注册测试号码方可使用);

3、下载demo示例,并将代码放到项目中(最好单独建文件夹存储)。

代码区:

一、新建test.app.php(测试用控制器)

<?php
/*
* 短信接口测试
*/
class TestApp extends ShoppingbaseApp{
public function index(){
$this->display('test.html');
}
public function get_info()
{
include_once(ROOT_PATH.'/includes/rly_message/rest.app.php');//引入模板文件
//主帐号,对应开官网发者主账号下的 ACCOUNT SID
$accountSid = '';
//主帐号令牌,对应官网开发者主账号下的 AUTH TOKEN
$accountToken = '';
//应用Id,在官网应用列表中点击应用,对应应用详情中的APP ID
//在开发调试的时候,可以使用官网自动为您分配的测试Demo的APP ID
$appId ='';
//请求地址
//沙盒环境(用于应用开发调试):sandboxapp.cloopen.com
//生产环境(用户应用上线使用):app.cloopen.com
$serverIP ='app.cloopen.com';
//请求端口,生产环境和沙盒环境一致
$serverPort ='8883';
//REST版本号,在官网文档REST介绍中获得。
$softVersion ='2013-12-26';
//global $accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion;
$phone_mob = isset($_GET['phone_mob']) ? $_GET['phone_mob'] : '';
if($phone_mob){
$this->sendTemplateSMS($phone_mob,array('3519','5'),"1",$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion);//手机号码,替换内容数组,模板ID
}
}
/**
* 发送模板短信
* @param to 手机号码集合,用英文逗号分开
* @param datas 内容数据 格式为数组 例如:array('Marry','Alon'),如不需替换请填 null
* @param $tempId 模板Id,测试应用和未上线应用使用测试模板请填写1,正式应用上线后填写已申请审核通过的模板ID
*/ 
public function sendTemplateSMS($to,$datas,$tempId,$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion)
{
// 初始化REST SDK
$rest = new RestApp($serverIP,$serverPort,$softVersion);
$rest->setAccount($accountSid,$accountToken);
$rest->setAppId($appId);
// 发送模板短信
echo "Sending TemplateSMS to $to <br/>";
$result = $rest->sendTemplateSMS($to,$datas,$tempId);
if($result == NULL ) {
echo "result error!";
exit();
}
if($result->statusCode!=0) {
echo "error code :" . $result->statusCode . "<br>";
echo "error msg :" . $result->statusMsg . "<br>";
//TODO 添加错误处理逻辑
}else{
echo "Sendind TemplateSMS success!<br/>";
// 获取返回信息
$smsmessage = $result->TemplateSMS;
echo "dateCreated:".$smsmessage->dateCreated."<br/>";
echo "smsMessageSid:".$smsmessage->smsMessageSid."<br/>";
//TODO 添加成功处理逻辑
}
}
}

二、模板文件(rest.app.php可根据自己使用的框架重新命名,也可直接使用demo原先的名字)

<?php
class RestApp {
private $AccountSid ; 
private $AccountToken ; 
private $AppId ; 
private $ServerIP; // ='app.cloopen.com'
private $ServerPort ; //='8883'
private $SoftVersion ; // ='2013-12-26'
private $Batch; //时间戳
private $BodyType = "xml";//包体格式,可填值:json 、xml
private $enabeLog = true; //日志开关。可填值:true、
private $Filename="./log.txt"; //日志文件
private $Handle; 
function __construct($ServerIP,$ServerPort,$SoftVersion) 
{
$this->RestApp($ServerIP,$ServerPort,$SoftVersion);
}
function RestApp($ServerIP,$ServerPort,$SoftVersion)
{
$this->Batch = date("YmdHis");
$this->ServerIP = $ServerIP;
$this->ServerPort = $ServerPort;
$this->SoftVersion = $SoftVersion;
$this->Handle = fopen($this->Filename, 'a');
}
/**
* 设置主帐号
* 
* @param AccountSid 主帐号
* @param AccountToken 主帐号Token
*/ 
function setAccount($AccountSid,$AccountToken){
$this->AccountSid = $AccountSid;
$this->AccountToken = $AccountToken; 
}
/**
* 设置应用ID
* @param AppId 应用ID
*/
function setAppId($AppId){
$this->AppId = $AppId; 
}
/**
* 打印日志
* 
* @param log 日志内容
*/
function showlog($log){
if($this->enabeLog){
fwrite($this->Handle,$log."\n"); 
}
}
/**
* 发起HTTPS请求
*/
function curl_post($url,$data,$header,$post=1)
{
//初始化curl
$ch = curl_init();
//参数设置 
$res= curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, $post);
if($post)
{
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
$result = curl_exec($ch);
//连接失败
if($result == FALSE){
if($this->BodyType=='json'){
$result = "{\"statusCode\":\"172001\",\"statusMsg\":\"网络错误\"}";
} else {
$result = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Response><statusCode>172001</statusCode><statusMsg>网络错误</statusMsg></Response>"; 
} 
}
curl_close($ch);
return $result;
} 
/**
* 发送模板短信
* @param to 短信接收?肥只?怕爰??用英文逗号分开
* @param datas 内容数据
* @param $tempId 模板Id
*/ 
function sendTemplateSMS($to,$datas,$tempId)
{
//主帐号鉴权信息验证,对必选参数进行判空。
//$auth=$this->accAuth();
// if($auth!=""){
// return $auth;
// }
// 拼接请求包体
if($this->BodyType=="json"){
$data="";
for($i=0;$i<count($datas);$i++){
$data = $data. "'".$datas[$i]."',"; 
}
$body= "{'to':'$to','templateId':'$tempId','appId':'$this->AppId','datas':[".$data."]}";
}else{
$data="";
for($i=0;$i<count($datas);$i++){
$data = $data. "<data>".$datas[$i]."</data>"; 
}
$body="<TemplateSMS>
<to>$to</to> 
<appId>$this->AppId</appId>
<templateId>$tempId</templateId>
<datas>".$data."</datas>
</TemplateSMS>";
}
$this->showlog("request body = ".$body);
// 大写的sig参数 
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
// 生成请求URL 
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/TemplateSMS?sig=$sig";
$this->showlog("request url = ".$url);
// 生成授权:主帐户Id + 英文冒号 + 时间戳。
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
// 生成包头 
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
// 发送请求
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json"){//JSON格式
$datas=json_decode($result); 
}else{ //xml格式
$datas = simplexml_load_string(trim($result," \t\n\r"));
}
// if($datas == FALSE){
// $datas = new stdClass();
// $datas->statusCode = '172003';
// $datas->statusMsg = '返回包体错误'; 
// }
//重新装填数据
if($datas->statusCode==0){
if($this->BodyType=="json"){
$datas->TemplateSMS =$datas->templateSMS;
unset($datas->templateSMS); 
}
}
return $datas; 
} 
/**
* 主帐号鉴权
*/ 
function accAuth()
{
if($this->ServerIP==""){
$data = new stdClass();
$data->statusCode = '172004';
$data->statusMsg = 'IP为空';
return $data;
}
if($this->ServerPort<=0){
$data = new stdClass();
$data->statusCode = '172005';
$data->statusMsg = '端口错误(小于等于0)';
return $data;
}
if($this->SoftVersion==""){
$data = new stdClass();
$data->statusCode = '172013';
$data->statusMsg = '版本号为空';
return $data;
} 
if($this->AccountSid==""){
$data = new stdClass();
$data->statusCode = '172006';
$data->statusMsg = '主帐号为空';
return $data;
}
if($this->AccountToken==""){
$data = new stdClass();
$data->statusCode = '172007';
$data->statusMsg = '主帐号令牌为空';
return $data;
}
if($this->AppId==""){
$data = new stdClass();
$data->statusCode = '172012';
$data->statusMsg = '应用ID为空';
return $data;
} 
}
}
?>

三、前台模板代码(test.html)

<div style="height:100px;border:1px solid gray;text-align:center;padding-top:20px;">
<form action="" method="post">
请输入手机号码:<input type="text" name="phone_mob" ><input type="button" name="btn" value="点击获取验证码"><br />
输入验证码:<input type="text" name="yzm" value=""><br />
<input type="submit" name="sbt" value="提交">
</form>
</div>

四、js代码

<script type="text/javascript">
$(function(){
$('input[name=btn]').on('click',function(){
var phone_mob = $('input[name=phone_mob]').val();
$.ajax({
type: "GET",
url: "index.php?app=test&act=get_info",//请求后台的URL地址
dataType: "json",
data:{'phone_mob' : phone_mob},
success:function(data){
if(data.done && data.retval)
{ 
//console.log(data.retval);
alert('成功!');
}
}
});
}); 
});
</script>

以上所述是小编给大家介绍的基于PHP实现短信验证码接口(容联运通讯),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
提升PHP执行速度全攻略(下)
Oct 09 PHP
PHP 中执行系统外部命令
Oct 09 PHP
967 个函式
Oct 09 PHP
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
PHP学习之数组值的操作
Apr 17 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
php获取服务器操作系统相关信息的方法
Oct 08 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
PHP7 新特性详细介绍
Sep 06 #PHP
PHP会员找回密码功能的简单实现
Sep 05 #PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 #PHP
浅谈mysql_query()函数的返回值问题
Sep 05 #PHP
PHP针对多用户实现更换头像功能
Sep 04 #PHP
PHP加密技术的简单实现
Sep 04 #PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 #PHP
You might like
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
Python监控主机是否存活并以邮件报警
2015/09/22 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
教师求职推荐信范文
2013/11/20 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
党日活动总结
2014/05/07 职场文书
运动会入场词
2015/07/18 职场文书
运动会1000米加油稿
2015/07/21 职场文书
小学大队委竞选口号
2015/12/25 职场文书
六年级作文之关于梦
2019/10/22 职场文书
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers