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 相关文章推荐
Gregarius中文日期格式问题解决办法
Apr 22 PHP
php 小乘法表实现代码
Jul 16 PHP
PHP 远程关机实现代码
Nov 10 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
php实现读取超大文件的方法
Jul 28 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
如何在Mac上通过docker配置PHP开发环境
May 29 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手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
Python实用日期时间处理方法汇总
2015/05/09 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python 读取、写入txt文件的示例
2020/09/27 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
英语文学专业学生的自我评价
2013/10/31 职场文书
给儿子的表扬信
2014/01/15 职场文书
幼儿园中班教学反思
2014/02/10 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
个人安全生产承诺书
2014/05/22 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
初二英语教学反思
2016/02/15 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书