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

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

步骤:

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实现短信验证码接口(容联运通讯),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-09-25 01:17:31

基于PHP实现短信验证码接口(容联运通讯)的相关文章

C#代码实现短信验证码接口示例_C#教程

本文实例为大家分享了C#实现短信验证码接口示例,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Net; using System.IO; using System

通过第三方接口发送短信验证码/短信通知(推荐)_java

需求:将首次交付密码为公共默认密码的方式改为点击入职功能,用短信方式发送系统自动生成的八位含数字.大小写字母和特殊符号生成的密码.短信发送服务由云通信http://www.yuntongxun.com/提供. 随机密码生成方法: /** * 生成随即密码 * @author chao.gao * @param pwd_len 生成的密码的总长度 * @return 密码的字符串 */ public static String genRandomNum(int pwd_len) { // Stri

云之讯语音、短信验证码实现

使用云之讯语音验证码功能,需要到云之讯开放平台去注册对应的账号,才能使用. 这里http://www.ucpaas.com/doc/doc_rest3-2.jsp 是官方文档 ,需要自己研究第一行文字,才能 明白业务功能的实现点. 下面是一个封装好的类,针对使用该SDK的帮助类: // // HYBUCSSDKHelper.h // UCSVoiceOrSMSVerifyCodeDemo // // Created by 黄仪标 on 15/2/2. // #import <Foundation

应用开发流程设计之验证码短信API接口

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在互联网信息泛滥的今天,大量的不真实手机号码.无效的信息铺满网站,给企业对网站用户回访等带来诸多不遍,如何获取真实可靠的客户信息,显得尤为重要. 为了让网站自动验证客户联系手机号码的真实性,启科网络与中国移动. 联通.电信三大通信运行商合作,研发了一套大型的短信发送应用平台,通过短信接口网关发送手机验证码,即解决了手机号码的认证问题,可以用来

短信接口-如何防止别人恶意刷新短信验证码,大家有没有好的方法

问题描述 如何防止别人恶意刷新短信验证码,大家有没有好的方法 昨天网站,调用短信接口的验证码被别人恶意刷了,幸亏短信商及时提醒了我们,说真的,用了好几年了一直很稳定,没有出现这种情况,大家有没有更好的方法解决一下呢.我们咨询过短信商这一块,它们说防止恶意获取可以加一下图片验证码,限制IP,限制手机号提交次数等,但大家还有没有更好一些的方法呢.短信发送验证码如下 public string SendNoteCode() { //官方网站:http://www.56dxw.com string ci

基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)_jquery

相关阅读: 基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能) 今天测试提了一个bug,发送短信倒计时功能,要求关闭页面也要进行倒计时.这想到了,当年我参与的周杰伦演唱会的先付先抢功能.与之类似,只不过,那个项目的时间都是服务器时间,本人目前有点偷懒,就用客户端的时间了. 一下是完整的代码,只不过在客户端的效率不是很好. <!doctype html> <html lang="en"> <head> <meta

基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)_javascript技巧

相关阅读: 基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭) 下面一段代码是小编给大家带来的js发送短信验证码后实现倒计时功能,代码简单易懂. 具体代码如下所示: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus

java-手机端的注册功能需要短信验证码 怎么用springmvc rest 还有httpclient实现

问题描述 手机端的注册功能需要短信验证码 怎么用springmvc rest 还有httpclient实现 开发工具eclipse 数据库mysql 框架spring springmvc mybatis 现在是不是都用http 一般的业务不用webservice cxf了 解决方案 需要用第三方短信接口,如容联云的 http://www.yuntongxun.com/activity/smsDemo#point2 解决方案二: 有阿里大鱼,便宜又靠谱,官网有sdk,用httplicent就可以调

Spring MVC 中 短信验证码功能的实现方法_java

在外部网站中短信的验证很有必要,比如在实现注册.验证用户信息等的情况下.在SpringMVC中的实现如下: 短信接口 短信接口,有些企业会购买的有移动的短信平台接口.如果是个人或者是小企业可以使用一些云服务的.比如百度的API Store上面的. 我使用的是:http://apistore.baidu.com/apiworks/servicedetail/1018.html 当然短信接口肯定都是要付费的,而且是基于模板的,具体的使用说明可以看这个网址里面的使用说明. 前端界面 前端的界面,可能如