首先、找到一个短信平台,购买套餐或者使用平台赠送的免费短信,这种平台可以自行百度,我使用的是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秒到达。