Page

[API]简单的ajax+php短信验证码接口制作

3140Anson16-06-07


今天终于把之前做的观众登记页面加上了手机验证码验证功能,现在我把其中涉及到的代码贴出来并做个简单说明。使用的短信平台qz876,代码ajax+php

首先、找到一个短信平台,购买套餐或者使用平台赠送的免费短信,这种平台可以自行百度,我使用的是qz876平台,这个平台也有提供免费的测试用验证短信,并提供了php的api接口代码,代码如下:


<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pramga: no-cache"); 

$randStr = str_shuffle('1234567890');
$rand = substr($randStr,0,4); 
$_SESSION["mbvfcode"]=$rand;  //将验证码存进session
$url='http://61.147.98.117:9001';//系统接口地址
$content=urlencode("【超宝验证】您的验证码是:".$rand.",5分钟后过期,请您及时验证!");
$username="";//平台用户名
$password="";//平台密码
$mobile=trim($_POST['tel']);//接受验证码的手机

$url=$url."/servlet/UserServiceAPI?method=sendSMS&extenno=&isLongSms=0&username=".$username."&password=".$password."&smstype=1&mobile=".$mobile."&content=".$content;
//echo $url;

$html = file_get_contents($url);
//echo $html;
if(!strpos($html,"success")){
  echo  "success";
}else{
	echo  "failed";
}
?>



前台ajax的代码如下:


 $("#verify_button").click(function(){  
                var phone=$("#tel").val();  
                if (tel!=="") {
                    $.ajax({
                        url:"verify.php",
                        data:"tel="+phone,
                        type:"post",
                        success:function(result){
                           
                           if (result=="success") {
                            alert("发送成功,请留言短信");
                           }else{
                            alert("发送失败,请重试");
                           }
                        }
                    })
                }else{
                    alert("请输入手机号码");
                }




解析:php代码作用是生成随机的验证码,并把验证码存进session,以供验证的时候调用,每一个短信平台都有自己不同的接口地址,编码方式以及url传值方式,这就需要大家认真阅读接口相关文档;ajax则是当用户点击获取验证码按钮的时候将手机号码传值到php文件中的变量mobile,然后使用file_get_contents向url发送相关数据并返回信息;


注意:我在调试这个api的时候遇到了短信内容乱码的现象,我的解决方法是使用iconv将短信内容从utf-8转到gbk,这主要取决于平台的默认设置,代码如下


$duanxin=iconv("utf-8", "gbk", "【验证码】您的验证码是:".$rand.",五分钟后过期,请您及时验证!");

$content=urlencode($duanxin);


最后,代码测试成功


来自Anson博客

2016年6月7日


---------------2016年6月12日更新---------------

经过一段时间的测试发现,一分钱一分货,qz876平台的验证码到达效率太低了,几十秒都很正常,所以找了其他253平台,这个平台短信不错,5、6秒到达。