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之第四天
Oct 09 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
smarty 缓存控制前的页面静态化原理
Mar 15 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
解析PHP 5.5 新特性
Jul 02 PHP
php防止SQL注入详解及防范
Nov 12 PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
mongodb和php的用法详解
Mar 25 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 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 include加载文件两种方式效率比较
2010/08/08 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
python去掉字符串中重复字符的方法
2014/02/27 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
实时获取Python的print输出流方法
2019/01/07 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
基于python实现模拟数据结构模型
2020/06/12 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
如何保障Web服务器安全
2014/05/05 面试题
内容编辑个人求职信
2013/12/10 职场文书
学校大课间活动方案
2014/01/30 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
保安部任务及岗位职责
2014/02/25 职场文书
会计核算科岗位职责
2014/03/19 职场文书
春节晚会主持词
2014/03/24 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
金融保险专业求职信
2014/09/03 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python