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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
php二维数组排序详解
Nov 06 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
PHP模板解析类实例
Jul 09 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
CI框架数据库查询之join用法分析
May 18 PHP
PHP的swoole扩展安装方法详细教程
May 18 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
PHP实现打包下载文件的方法示例
Oct 07 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
php解决约瑟夫环算法实例分析
Sep 30 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 登录记住密码实现思路
2013/05/07 PHP
php实现aes加密类分享
2014/02/16 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
Python批量更改文件名的实现方法
2017/10/29 Python
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
NumPy 数组使用大全
2019/04/25 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
致接力运动员广播稿
2014/02/17 职场文书
开业庆典策划方案
2014/02/18 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
2016年母亲节广告语
2016/01/28 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS