基於PHP實現短信驗證碼接口的方法


步驟:

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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM