首頁  >  文章  >  後端開發  >  php怎麼實作簡訊驗證

php怎麼實作簡訊驗證

藏色散人
藏色散人原創
2022-11-07 09:34:102289瀏覽

php實作簡訊驗證的方法:1、註冊帳號並下載介面;2、設定參數變數;3、呼叫介面測試簡訊;4、透過程式碼「if(strtolower($_SESSION["captcha"] ) == strtolower($captcha)){echo $_POST["captcha"]."...";$_SESSION["captcha"] = "";if(...)...」實作驗證即可。

php怎麼實作簡訊驗證

本教學操作環境:windows7系統、PHP8.1版、Dell G3電腦。

php怎麼實作簡訊驗證?

php實作手機簡訊驗證碼全過程

在我們的工作生活中,使用各類網站、APP時,無論註冊、支付,或是修改密碼等情境下,都被要求取得簡訊驗證碼進行驗證,那麼驗證碼是如何發送的呢?接下來以華興雲端簡訊為例(僅作為範例,主要了解實現想法),為大家詳細介紹一下php發送簡訊驗證碼的實作過程(同時實作防刷簡訊驗證碼機制,加密通訊)。

一、實現想法

php怎麼實作簡訊驗證

二、實作流程

1、註冊帳號

註冊華興雲端簡訊帳號,填寫基本信息,會有專人聯繫開戶,並預送少量短信供測試使用。

2、下載介面

點選“產品中心”,進入產品頁,選擇對應的php安全雲端簡訊介面及HTTPS版雲端簡訊介面文件下載;下載完畢文件如下:

php怎麼實作簡訊驗證

3、設定參數變數

設定demo_https.php檔案:

(1)將demo_https.php檔案中的curlPost,curlGet, sendSMS三個方法拷貝到項目中對應的位置,如果有需求取得餘額的,同時拷貝getBalance方法。

(2)將sendSMS方法中的註冊碼($reg_code),密碼($reg_pw),簽章($signature),簡訊內容($content )修改成自己的訊息。注意:簡訊內容可能需要報備。

(3)將目標手機號碼和內容依照程式碼裡面的註解規則修改,在需要發送簡訊的地方呼叫sendSMS這個方法就可以了。

4、報備簡訊範本

將待發內容提交至華興客服工作人員,由工作人員進行黑名單、敏感字詞等檢查,完成報案工作。

5、呼叫介面測試簡訊

完成前期的一系列準備工作,實際測試呼叫php雲端簡訊介面的簡訊傳送情況。

三、運行代碼

查看HTTPS版雲短信接口文檔查看接口地址,參數說明及示例,調用下圖代碼配置好參數後,調用該方法測試發送短信,打印返回值,可查看文件中錯誤碼

image_captcha.php產生圖片驗證碼(防刷機制)

<?php
/**
* 字母+数字的验证码生成
*/
// 开启session
session_start();
//1.创建黑色画布
$image = imagecreatetruecolor(100, 30);
//2.为画布定义(背景)颜色
$bgcolor = imagecolorallocate($image, 255, 255, 255);
//3.填充颜色
imagefill($image, 0, 0, $bgcolor);
// 4.设置验证码内容
//4.1 定义验证码的内容
$content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
//4.1 创建一个变量存储产生的验证码数据,便于用户提交核对
$captcha = "";
for ($i = 0; $i < 4; $i++) {
// 字体大小
$fontsize = 10;
// 字体颜色
$fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
// 设置字体内容
$fontcontent = substr($content, mt_rand(0, strlen($content)), 1);
$captcha .= $fontcontent;
// 显示的坐标
$x = ($i * 100 / 4) + mt_rand(5, 10);
$y = mt_rand(5, 10);
// 填充内容到画布中
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
$_SESSION["captcha"] = $captcha;
//4.3 设置背景干扰元素
for ($$i = 0; $i < 200; $i++) {
$pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
}
//4.4 设置干扰线
for ($i = 0; $i < 3; $i++) {
$linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);
}
//5.向浏览器输出图片头信息
header(&#39;content-type:image/png&#39;);
//6.输出图片到浏览器
imagepng($image);
//7.销毁图片
//imagedestroy($image); 
index.html前端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>短信验证码</title>
</head>
<body>
<form action="./sendsms.php" method="post">
<div>
手机号:<input id="phone" type="text" name="phone" value="" />
</div>
<div>验证码: <input type="text" name="captcha" placeholder="请输入图片中的验证码">
<img  src="image_captcha.php" onclick="this.src=&#39;image_captcha.php?&#39;+new Date().getTime();"    style="max-width:90%"  style="max-width:90%" alt="php怎麼實作簡訊驗證" ><br/></div>
<div> <input type="submit" value="验证"></div>
</form>
</body>
</html>

sendsms.php後端執行程式碼:

<?php
/**
* 接受用户登陆时提交的验证码
*/
session_start();
//1. 获取到用户提交的验证码、手机号
$phone = $_POST[&#39;phone&#39;];//手机号
$captcha = $_POST["captcha"];
//2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交
if(strtolower($_SESSION["captcha"]) == strtolower($captcha)){
echo $_POST["captcha"]."验证码正确!";
$_SESSION["captcha"] = "";
if(preg_match_all("/^1[34578]\d{9}$/", $phone)) { 
//得到手机号 
$url = &#39;https://www.stongnet.com/sdkhttp/sendsms.aspx&#39;;
$reg_code = &#39;101100-WEB-HUAX-111111&#39;; //华兴软通注册码,请在这里填写您从客服那得到的注册码
$reg_pw = &#39;11111111&#39;; //华兴软通注册码对应的密码,请在这里填写您从客服那得到的密码
$source_add = &#39;&#39;; //子通道号(最长10位,可为空
//$phone = &#39;15891234567&#39;; //手机号码(最多1000个),多个用英文逗号(,)隔开,不可为空
$content = &#39;华兴软通验证码:&#39; . range(1000,9999);; //短信内容(含有中文,特殊符号等非ASCII码的字符,用户必须保证其为UTF-8编码格式)
$param_arry = array();
$param_arry[&#39;reg&#39;] = $reg_code;
$param_arry[&#39;pwd&#39;] = $reg_pw;
$param_arry[&#39;sourceadd&#39;] = $source_add;
$param_arry[&#39;phone&#39;] = $phone;
$param_arry[&#39;content&#39;] = $content;
$ca_info = dirname(__FILE__) . &#39;/cacert.pem&#39;; //根证书文件路径,相对路径和绝对路径均可,推荐使用绝对路径;demo里文件和源码放在一起了,为了安全证书文件最好不要和应用代码放在一起
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($param_array));
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); //验证交换证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //检查SSL证书公用名是否存在,并且是否与提供的主机名匹配
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); //设置实现协议为TLS1.0版本
curl_setopt($ch, CURLOPT_CAINFO, $ca_info); 
$data = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if(!empty($error)){ //curl有错误
echo $error;
}else{ //输出请求结果
echo $data;
}
}else{echo "请输入正确手机号";}
}else{
echo "验证码提交不正确!";
}

依照範例可使用客服提供的註冊號碼密碼進行手機號碼簡訊驗證碼的傳送測試,依照介面回傳碼和文件依自己的要求做進一步的功能開發。

推薦學習:《PHP影片教學

以上是php怎麼實作簡訊驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn