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中文本操作的类
Mar 17 PHP
PHP insert语法详解
Jun 07 PHP
php横向重复区域显示二法
Sep 25 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
php视频拍照上传头像功能实现代码分享
Oct 08 PHP
Yii实现显示静态页的方法
Apr 25 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
PHP实现的分解质因数操作示例
Aug 01 PHP
PHP命名空间简单用法示例
Dec 28 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
PHP单元测试配置与使用方法详解
Dec 27 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
Python序列操作之进阶篇
2016/12/08 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
python实现经典排序算法的示例代码
2021/02/07 Python
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
教育专业自荐书范文
2013/12/17 职场文书
小学生家长评语大全
2014/02/10 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
应届大学生求职信
2014/07/20 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python