Methode zur Implementierung einer SMS-Verifizierungscode-Schnittstelle basierend auf PHP

墨辰丷
Freigeben: 2023-03-29 07:00:01
Original
3774 Leute haben es durchsucht

Dieser Artikel erklärt Schritt für Schritt den Implementierungscode der SMS-Bestätigungscode-Schnittstelle. Er ist sehr gut und hat einen Referenzwert. Interessierte Freunde sollten einen Blick darauf werfen.

Ich habe ihn gerade selbst studiert. und ich hoffe, dass es denjenigen, die es auch studieren, hilfreich sein wird.

Schritte:

1. Melden Sie sich bei Ronglianyun Communication an, um sich zu registrieren und KONTO-SID, AUTH-TOKEN und Rest-URL (Produktion) zu erhalten ), AppID (Standard);

2. Registrieren Sie eine Mobiltelefonnummer, bevor Sie sie verwenden.

3 Beispiel und fügen Sie den Code in das Projekt ein (am besten erstellen Sie einen separaten Ordner zur Speicherung).

Codebereich:

1. Neue test.app.php (Testcontroller) erstellen

<?php
/*
* 短信接口测试
*/
class TestApp extends ShoppingbaseApp{
public function index(){
$this->display(&#39;test.html&#39;);
}
public function get_info()
{
include_once(ROOT_PATH.&#39;/includes/rly_message/rest.app.php&#39;);//引入模板文件
//主帐号,对应开官网发者主账号下的 ACCOUNT SID
$accountSid = &#39;&#39;;
//主帐号令牌,对应官网开发者主账号下的 AUTH TOKEN
$accountToken = &#39;&#39;;
//应用Id,在官网应用列表中点击应用,对应应用详情中的APP ID
//在开发调试的时候,可以使用官网自动为您分配的测试Demo的APP ID
$appId =&#39;&#39;;
//请求地址
//沙盒环境(用于应用开发调试):sandboxapp.cloopen.com
//生产环境(用户应用上线使用):app.cloopen.com
$serverIP =&#39;app.cloopen.com&#39;;
//请求端口,生产环境和沙盒环境一致
$serverPort =&#39;8883&#39;;
//REST版本号,在官网文档REST介绍中获得。
$softVersion =&#39;2013-12-26&#39;;
//global $accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion;
$phone_mob = isset($_GET[&#39;phone_mob&#39;]) ? $_GET[&#39;phone_mob&#39;] : &#39;&#39;;
if($phone_mob){
$this->sendTemplateSMS($phone_mob,array(&#39;3519&#39;,&#39;5&#39;),"1",$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion);//手机号码,替换内容数组,模板ID
}
}
/**
* 发送模板短信
* @param to 手机号码集合,用英文逗号分开
* @param datas 内容数据 格式为数组 例如:array(&#39;Marry&#39;,&#39;Alon&#39;),如不需替换请填 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 添加成功处理逻辑
}
}
}
Nach dem Login kopieren

2. Vorlagendatei (rest.app.php kann entsprechend dem von Ihnen verwendeten Framework umbenannt werden, oder Sie können das Original verwenden Demo direkt Name)

<?php
class RestApp {
private $AccountSid ; 
private $AccountToken ; 
private $AppId ; 
private $ServerIP; // =&#39;app.cloopen.com&#39;
private $ServerPort ; //=&#39;8883&#39;
private $SoftVersion ; // =&#39;2013-12-26&#39;
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, &#39;a&#39;);
}
/**
* 设置主帐号
* 
* @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==&#39;json&#39;){
$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. "&#39;".$datas[$i]."&#39;,"; 
}
$body= "{&#39;to&#39;:&#39;$to&#39;,&#39;templateId&#39;:&#39;$tempId&#39;,&#39;appId&#39;:&#39;$this->AppId&#39;,&#39;datas&#39;:[".$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 = &#39;172003&#39;;
// $datas->statusMsg = &#39;返回包体错误&#39;; 
// }
//重新装填数据
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 = &#39;172004&#39;;
$data->statusMsg = &#39;IP为空&#39;;
return $data;
}
if($this->ServerPort<=0){
$data = new stdClass();
$data->statusCode = &#39;172005&#39;;
$data->statusMsg = &#39;端口错误(小于等于0)&#39;;
return $data;
}
if($this->SoftVersion==""){
$data = new stdClass();
$data->statusCode = &#39;172013&#39;;
$data->statusMsg = &#39;版本号为空&#39;;
return $data;
} 
if($this->AccountSid==""){
$data = new stdClass();
$data->statusCode = &#39;172006&#39;;
$data->statusMsg = &#39;主帐号为空&#39;;
return $data;
}
if($this->AccountToken==""){
$data = new stdClass();
$data->statusCode = &#39;172007&#39;;
$data->statusMsg = &#39;主帐号令牌为空&#39;;
return $data;
}
if($this->AppId==""){
$data = new stdClass();
$data->statusCode = &#39;172012&#39;;
$data->statusMsg = &#39;应用ID为空&#39;;
return $data;
} 
}
}
?>
Nach dem Login kopieren

3. Front-End-Vorlagencode (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>
Nach dem Login kopieren

4. js-Code

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

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.

Verwandte Empfehlungen:

phpImplementierung eines benutzerdefinierten Menüs für die WeChat-Entwicklung

phpEinfache Implementierung der Socket-Kommunikation

phpImplementierung der Baidu-Wettervorhersage für die WeChat-Entwicklung

Das obige ist der detaillierte Inhalt vonMethode zur Implementierung einer SMS-Verifizierungscode-Schnittstelle basierend auf PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage