这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 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 实现短信验证码接口(容联运通讯),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/0731/342847.html