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

怎麼用php實作簡訊驗證碼發送

php中世界最好的语言
php中世界最好的语言原創
2018-05-14 13:52:1115031瀏覽

我在眾多的第三方簡訊服務商裡選擇了雲片網這個簡訊服務商,我也會盡可能利用最簡單的方式去幫助廣大開發者解決簡訊驗證碼功能模組的實作。

再次之前我也參考了大部分網路上的部落格等,大多數都是把雲片網的demo原封不動上去,對於我這個前端人員來說,根本毫無頭緒,故此我將細緻的講解如何操作,以及獻上我的源碼。

我的業務流程就是透過點擊發送驗證碼這個按鈕,觸發一個ajax請求事件,將手機號碼傳送到後台,後台產生驗證碼傳送到手機端,並返回這個驗證碼給前台進行驗證碼的驗證。

請求的php後端程式碼如下

post.php

<?php
header("Content-Type:text/html;charset=utf-8");
$apikey = "xxxxxxxxxxxxxxx"; //修改为您的apikey(https://www.yunpian.com)登录官网后获取
$mobile =$_POST[&#39;mobile&#39;]; //获取传入的手机号
// $mobile = "xxxxxxxxxxx"; //请用自己的手机号代替
$num = rand(1000,9999);   //随机产生四位数字的验证码
setcookie(&#39;shopCode&#39;,$num);
$text="【蒙羊羊】您的验证码是".$num."。";
$ch = curl_init();
 
/* 设置验证方式 */
curl_setopt($ch, CURLOPT_HTTPHEADER, array(&#39;Accept:text/plain;charset=utf-8&#39;,
&#39;Content-Type:application/x-www-form-urlencoded&#39;, &#39;charset=utf-8&#39;));
/* 设置返回结果为流 */
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
/* 设置超时时间*/
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
 
/* 设置通信方式 */
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 
// 取得用户信息
$json_data = get_user($ch,$apikey);
$array = json_decode($json_data,true);
// echo &#39;<pre class="brush:php;toolbar:false">&#39;;print_r($array);
 
// 发送短信
$data=array(&#39;text&#39;=>$text,&#39;apikey&#39;=>$apikey,&#39;mobile&#39;=>$mobile);
$json_data = send($ch,$data);
$array = json_decode($json_data,true);
// echo &#39;<pre class="brush:php;toolbar:false">&#39;;print_r($array);
 
// 发送模板短信
// 需要对value进行编码
$data = array(&#39;tpl_id&#39; => &#39;1&#39;, &#39;tpl_value&#39; => (&#39;#code#&#39;).
&#39;=&#39;.urlencode($num).
&#39;&&#39;.urlencode(&#39;#company#&#39;).
&#39;=&#39;.urlencode(&#39;蒙羊羊&#39;), &#39;apikey&#39; => $apikey, &#39;mobile&#39; => $mobile);
// print_r ($data);
$json_data = tpl_send($ch,$data);
$array = json_decode($json_data,true);
 
 
echo $num;
 
 
// 发送语音验证码
// $data=array(&#39;code&#39;=>$num,&#39;apikey&#39;=>$apikey,&#39;mobile&#39;=>$mobile);
// $json_data =voice_send($ch,$data);
// $array = json_decode($json_data,true);
// echo $num;
 
// 发送语音通知,务必要报备好模板
/*
模板: 课程#name#在#time#开始。 最终发送结果: 课程深度学习在14:00开始
 */
 
$tpl_id = &#39;xxxxxxx&#39;; //修改为你自己后台报备的模板id
$tpl_value = urlencode(&#39;#time#&#39;).&#39;=&#39;.urlencode($num).&#39;&&#39;.urlencode(&#39;#name#&#39;).&#39;=&#39;.urlencode(&#39;蒙羊羊&#39;);
$data=array(&#39;tpl_id&#39;=>$tpl_id,&#39;tpl_value&#39;=>$tpl_value,&#39;apikey&#39;=>$apikey,&#39;mobile&#39;=>$mobile);
$json_data = notify_send($ch,$data);
$array = json_decode($json_data,true);
// echo $num;
 
 
curl_close($ch);
 
/************************************************************************************/
//获得账户
function get_user($ch,$apikey){
curl_setopt ($ch, CURLOPT_URL, &#39;https://sms.yunpian.com/v2/user/get.json&#39;);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(&#39;apikey&#39; => $apikey)));
$result = curl_exec($ch);
$error = curl_error($ch);
checkErr($result,$error);
return $result;
}
function send($ch,$data){
curl_setopt ($ch, CURLOPT_URL, &#39;https://sms.yunpian.com/v2/sms/single_send.json&#39;);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec($ch);
$error = curl_error($ch);
checkErr($result,$error);
return $result;
}
function tpl_send($ch,$data){
curl_setopt ($ch, CURLOPT_URL,
&#39;https://sms.yunpian.com/v2/sms/tpl_single_send.json&#39;);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec($ch);
$error = curl_error($ch);
checkErr($result,$error);
return $result;
}
function voice_send($ch,$data){
curl_setopt ($ch, CURLOPT_URL, &#39;http://voice.yunpian.com/v2/voice/send.json&#39;);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec($ch);
$error = curl_error($ch);
checkErr($result,$error);
return $result;
}
function notify_send($ch,$data){
curl_setopt ($ch, CURLOPT_URL, &#39;https://voice.yunpian.com/v2/voice/tpl_notify.json&#39;);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec($ch);
$error = curl_error($ch);
checkErr($result,$error);
return $result;
}
 
function checkErr($result,$error) {
if($result === false)
{
echo &#39;Curl error: &#39; . $error;
}
else
{
//echo &#39;操作完成没有任何错误&#39;;
}
}
 
?>

這個php後台是我在官方提供的demo上進行修改的,刪除了語音驗證這個功能,只保留了簡訊驗證,並將傳回給前端的資料只保留了四位數字的驗證碼,方便前端進行驗證碼的驗證。

官方原demo連接如下···連結

index.html

如下程式碼是進行點擊並發送ajax請求,將請求的驗證碼並儲存到localStorage中

$.ajax({
  type: "post",
  url: "post.php", //后台代码文件名
  data: {
  mobile:$(&#39;#phone&#39;).val()//获取输入的手机号
  },
  // dataType: "json",
  success:function(data){
  console.log(data);
  layer.msg(&#39;验证码发送成功,请注意查收!&#39;);
  localStorage.setItem(&#39;code&#39;, JSON.stringify(data))
  },
  error:function(err){
  console.log(err);
  }
});

進行驗證碼驗證

var code = JSON.parse(localStorage.getItem(&#39;code&#39;))
if($(&#39;#code&#39;).val() != code ){
  layer.msg(&#39;验证码输入错误&#39;);
  return false;
 }

相信看了這些案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

相關閱讀:

實例講解Ajax非同步請求技術

PHP 大流量最佳化?

php自訂函數產生笛卡爾積的方法

#

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

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