php利用云片网实现短信验证码功能的示例代码


Posted in PHP onNovember 18, 2017

本文将以php举例,介绍网页短信验证码功能的实现。

在众多的第三方短信服务商中我选择了云片网这个短信服务商,本文也将尽可能利用最简单的方式去帮助广大开发者解决短信验证码功能模块的实现。

再次之前我也参考了大部分网上的博客等,大多数都是把云片网的demo原封不动搬上去,对于我这个前端人员来说,根本毫无头绪,故此我将细致的讲解如何操作,以及献上我的源码。

我的业务流程就是通过点击发送验证码这个按钮,触发一个ajax请求事件,将手机号发送到后台,后台生成验证码发送到手机端,并返回这个验证码给前台进行验证码的验证。

请求的php后端代码如下

post.php

<?php
header("Content-Type:text/html;charset=utf-8");
$apikey = "xxxxxxxxxxxxxxx"; //修改为您的apikey(https://www.yunpian.com)登录官网后获取
$mobile =$_POST['mobile']; //获取传入的手机号
// $mobile = "xxxxxxxxxxx"; //请用自己的手机号代替
$num = rand(1000,9999);   //随机产生四位数字的验证码
setcookie('shopCode',$num);
$text="【蒙羊羊】您的验证码是".$num."。";
$ch = curl_init();

/* 设置验证方式 */
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept:text/plain;charset=utf-8',
'Content-Type:application/x-www-form-urlencoded', 'charset=utf-8'));
/* 设置返回结果为流 */
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 '<pre>';print_r($array);

// 发送短信
$data=array('text'=>$text,'apikey'=>$apikey,'mobile'=>$mobile);
$json_data = send($ch,$data);
$array = json_decode($json_data,true);
// echo '<pre>';print_r($array);

// 发送模板短信
// 需要对value进行编码
$data = array('tpl_id' => '1', 'tpl_value' => ('#code#').
'='.urlencode($num).
'&'.urlencode('#company#').
'='.urlencode('蒙羊羊'), 'apikey' => $apikey, 'mobile' => $mobile);
// print_r ($data);
$json_data = tpl_send($ch,$data);
$array = json_decode($json_data,true);


echo $num;


// 发送语音验证码
// $data=array('code'=>$num,'apikey'=>$apikey,'mobile'=>$mobile);
// $json_data =voice_send($ch,$data);
// $array = json_decode($json_data,true);
// echo $num;

// 发送语音通知,务必要报备好模板
/* 
模板: 课程#name#在#time#开始。 最终发送结果: 课程深度学习在14:00开始
 */

$tpl_id = 'xxxxxxx'; //修改为你自己后台报备的模板id
$tpl_value = urlencode('#time#').'='.urlencode($num).'&'.urlencode('#name#').'='.urlencode('蒙羊羊');
$data=array('tpl_id'=>$tpl_id,'tpl_value'=>$tpl_value,'apikey'=>$apikey,'mobile'=>$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, 'https://sms.yunpian.com/v2/user/get.json');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('apikey' => $apikey)));
$result = curl_exec($ch);
$error = curl_error($ch);
checkErr($result,$error);
return $result;
}
function send($ch,$data){
curl_setopt ($ch, CURLOPT_URL, 'https://sms.yunpian.com/v2/sms/single_send.json');
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, 
'https://sms.yunpian.com/v2/sms/tpl_single_send.json');
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, 'http://voice.yunpian.com/v2/voice/send.json');
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, 'https://voice.yunpian.com/v2/voice/tpl_notify.json');
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 'Curl error: ' . $error;
}
else
{
//echo '操作完成没有任何错误';
}
}

?>

这个php后台是我在官方提供的demo上进行修改的,删除了语音验证这个功能,只保留了短信验证,并将返回给前端的数据只保留了四位数字的验证码,方便前端进行验证码的验证。

官方原demo连接如下···链接

index.html

如下代码是进行点击并发送ajax请求,将请求的验证码并保存到localStorage中

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

进行验证码验证

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

以上验证码功能讲解完毕,如需源码请点击(源码) 自行下载,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
目录,文件操作详谈―PHP
Nov 25 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
深入php list()函数的详解
Jun 05 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
PHP使用JSON和将json还原成数组
Feb 12 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHPTree――php快速生成无限级分类
Mar 30 PHP
php实现在线考试系统【附源码】
Sep 18 PHP
PHP递归算法的简单实例
Feb 28 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 PHP
swoole和websocket简单聊天室开发
Nov 18 #PHP
php单元测试phpunit入门实例教程
Nov 17 #PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 #PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 #PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 #PHP
PHP实现求解最长公共子串问题的方法
Nov 17 #PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 #PHP
You might like
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
python基础教程之序列详解
2014/08/29 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
Python当中的array数组对象实例详解
2019/06/12 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
一篇.NET面试题
2014/09/29 面试题
销售会计工作职责
2013/12/02 职场文书
化妆品店促销方案
2014/02/24 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
会计电算化专业求职信
2014/06/10 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
房屋买卖协议样本
2014/11/16 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
警用民用对讲机找不同
2022/02/18 无线电