步骤:

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

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

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

代码区:

<?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)

<p 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>

</p>

四、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实现短信验证码接口的方法的更多相关文章

  1. php短信验证码接口接入流程及代码示例

    对于绝大部分企业来说,所使用的短信验证码接口都是第三方短信服务商所提供,目前市场上短信服务商有很多,在此向大家推荐一家动力思维乐信,运营13年,值得信赖! 就拿动力思维乐信短信验证码接口为例,详细介绍 ...

  2. 重构客户注册-基于ActiveMQ实现短信验证码生产者

    重构目标:将bos_fore项目中的CustomerAction作为短信消息生产者,将消息发给ActiveMQ,创建一个单独的SMS项目,作为短信息的消费者,从ActiveMQ获取短信消息,调用第三方 ...

  3. Python2-Django配置阿里大于的短信验证码接口

    1.短信发送开发指南地址:https://help.aliyun.com/document_detail/55491.html?spm=a2c4g.11186623.6.568.l5zTwH 2.SD ...

  4. 请给你的短信验证码接口加上SSL双向验证

    序言 去年年底闲来几天,有位同事专门在网上找一些注册型的app和网站,研究其短信接口是否安全,半天下来找到30来家,一些短信接口由于分析难度原因,没有继续深入,但差不多挖掘到20来个,可以肆意被调用, ...

  5. C# 开发(创蓝253)手机短信验证码接口

    创蓝253: https://www.253.com/ #region 获取手机验证码(创蓝253) /// <summary> /// 获取手机验证码(创蓝253) /// </s ...

  6. asp实现阿里大鱼短信API接口的方法

    阿里大鱼是阿里推出的产品,官方提供JAVA..NET.PHP等版本的SDK下载,不知为何,唯独不提供ASP版本的SDK. 不提供没关系,自己写就是了,参照官方提供的API写一个就是了. 本来以为无非是 ...

  7. 如何对接网建SMS短信通短信验证码接口

    1首先注册登录网建SMS网站  http://www.smschinese.cn/ 2.下载Java代码 3.JAVA调用 import java.io.UnsupportedEncodingExce ...

  8. java 随机生成6位短信验证码

    生成6位随机数字其实很简单,只需一行代码,具体如下: String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000) ...

  9. iOS点击获取短信验证码按钮

    概述 iOS点击获取短信验证码按钮, 由于 Demo整体测试运行效果 , 整个修改密码界面都已展现, 并附送正则表达式及修改密码逻辑. 详细 代码下载:http://www.demodashi.com ...

随机推荐

  1. sping ioc 源码分析(一)-- register(componentClasses) 方法

    一.测试环境的搭建: public class Apple { } @Component public class MyComponet { } public class MyCondition im ...

  2. @Autowired,@Resource,@Qualifier,@Primary,@Inject的作用和区别

    @Autowired注解的用法:可以用于构造器,方法,参数,字段进行属性注入,有一个required属性,默认是true,当改成false时,如果注入的属性在容器中不存在也不会报错@Resource该 ...

  3. Java 实现常见内排序

    一.内排序 1.排序基本概念 (1)什么是排序? 排序指将一个数据元素集合或者序列 按照某种规则 重新排列成一个 有序的集合或者序列.分为内排序.外排序.排序算法的好坏直接影响程序的执行速度以及存储空 ...

  4. k8s下的jenkins如何设置maven

    关于k8s环境的jenkins集群 k8s下搭建了jenkins集群后,执行任务时会新建pod,任务完成后pod被销毁,架构如下图所示: 在k8s搭建jenkins集群的步骤请参照<> 关 ...

  5. sipp3.6对freeswitch进行压力测试

    一.安装sipp 1.下载地址: https://github-production-release-asset-2e65be.s3.amazonaws.com/13161657/99df6100-9 ...

  6. 使用 .NET 进行游戏开发

    微软是一家综合性的网络公司,相信这点来说不用过多的赘述,没有人不知道微软这个公司,这些年因为游戏市场的回报,微软收购了很多的游戏公司还有独立工作室,MC我的世界就是最成功的的案例,现在市值是排在全世界 ...

  7. TP5本地运行正常,线上运行某页面出现【模板文件不存在】问题的解决办法

    相信许多小伙伴和我一样,明明在本地运行页面一切正常,而到线上(本人是用的虚拟主机)出现了如下图的问题: 其实这个问题出现的原因很简单,就是我们开发是在windows 系统下,windows系统对大小写 ...

  8. 为什么说switch比if快

    C++的switch语法 在C++中,switch只接受整型常量作为分支的值: switch (expr) { case integral-constant : \\... break; case i ...

  9. C语言编程丨循环链表实现约瑟夫环!真可谓无所不能的C!

    循环链表   把链表的两头连接,使其成为了一个环状链表,通常称为循环链表. 和它名字的表意一样,只需要将表中最后一个结点的指针指向头结点,链表就能成环儿,下图所示.   需要注意的是,虽然循环链表成环 ...

  10. 编程福利:50本C语言电子书,你还怕没书看吗!

    推荐适合编程新手入门的几本经典的C语言书籍. 1.<C程序设计语言> C语言之父的著作,被称为C语言的的圣经.全球最经典的C语言教程.这本书最大的特点是精炼.读起来不会觉得"啰嗦 ...