SDK下载地址: http://docs.ucpaas.com/doku.php?id=sms_sdk
首先把 Ucpaas.class.php文件放在根目录app/common/sms/lib/下 (目录自己随意)
新建路由 (laravel5.4版本)
//短信注册处理页面
Route::any('register','Home\RegisterController@index');
//验证码
Route::get('code','Home\RegisterController@code');
//验证短信验证码
Route::any('smsyzm','Home\RegisterController@smsyzm');
RegisterController.php 控制器内容
<?php
namespace App\Http\Controllers\Home;
use App\Models\Tel_user;
use Illuminate\Http\Request;
//使用类
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Validator;
//注册控制器 短信
class RegisterController extends Controller{
/* 验证 注册 */
public function index(Request $request){
if($request->isMethod('POST')){
$valArr = $request->all();
$valArr['code'] = base64_decode($request->input('code'));
//Validator 类验证
$validator = Validator::make($valArr,[
'name' => 'required|max:8',
'pwd' => 'required|min:6',
'pwd_confirmation' => 'required|min:6|same:pwd',
'phone' => 'required|unique:tel_user|regex:/^1[34578][0-9]{9}$/',
'code' => 'same:yzm',//生成赋值的验证码
'yzm' => 'required|between:4,4', //输入的验证码
],[
'required' => ':attribute为必填项',
'min' => ':attribute长度不符合要求',
'max' => ':attribute长度不符合要求',
'phone.unique' =>':attribute只能接收一次验证码',
'phone.regex' =>':attribute格式不对',
'pwd_confirmation.same' => ':attribute和密码不一样',
'between'=>'attribute长度不符合要求',
'code.same' => ':attribute输入错误',
],[
'name'=>'用户名',
'pwd'=>'密码',
'pwd_confirmation' => '确认密码',
'phone'=>'手机号',
'code'=>'验证码',
'yzm'=>'验证码',
]);
if($validator->fails()){//如果验证出错误
return response() -> json($validator->getMessageBag()->first());
}
$arr = $request->only(['name','phone']);
$arr['pwd']= Crypt::encrypt($request->input('pwd'));//密码加密
$arr['status']=1;
$arr['create_time']=time();
if(Tel_user::insert($arr)){
return 1;
}else{
return 0;
}
}
return view("home.register");
}
/* 发短信 */
public function smsyzm(Request $request){
//dd($request->all());
//载入ucpass类
require_once("../app/common/sms/lib/Ucpaas.class.php");
//初始化必填
//填写在开发者控制台首页上的Account Sid
$options['accountsid']='xxxxxxxxxxxxxxxxx';
//填写在开发者控制台首页上的Auth Token
$options['token']='xxxxxxxxxxxxxxxxx';
//初始化 $options必填
$ucpass = new \Ucpaas($options);
$appid = "xxxxxxxxxxxxxxxxx"; //应用的ID,可在开发者控制台内的短信产品下查看
$templateid = "xxxxxx"; //可在后台短信产品→选择接入的应用→短信模板-模板ID,查看该模板ID
$yzm = base64_decode($request->input('yzm')); //多个参数使用英文逗号隔开(如:param=“a,b,c”),如为参数则留空 code进行解密
$time = 5;
$param="$yzm,$time";
$mobile = $request->input('yzmtel');//$_POST['yzmtel']
$uid = "";
//70字内(含70字)计一条,超过70字,按67字/条计费,超过长度短信平台将会自动分割为多条发送。分割后的多条短信将按照具体占用条数计费。
echo $ucpass->SendSms($appid,$templateid,$param,$mobile,$uid);
}
/*生成验证码*/
public function code(){
$code_len=4;
$code=array_merge(range('A','Z'),range('a','z'),range(1,9));//需要用到的数字或字母
$keyCode=array_rand($code,$code_len);//真正的验证码对应的$code的键值
if($code_len==1){
$keyCode=array($keyCode);
}
shuffle($keyCode);//打乱数组
$verifyCode="";
foreach ($keyCode as $key){
$verifyCode.=$code[$key];//真正验证码
}
echo base64_encode($verifyCode); //加密
}
}
register.blade.php 模板文件 (用的weui)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>手机验证码注册页面</title>
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
<link rel="stylesheet" href="{{asset('style/weui/css/weui.css')}}"/>
<link rel="stylesheet" href="{{asset('style/weui/css/weuix.css')}}"/>
<script src="{{asset('style/weui/js/zepto.min.js')}}"></script>
<script src="{{asset('style/weui/js/zepto.weui.js')}}"></script>
<script type="text/javascript">
var countdown=60;
function settime(obj){
//60秒倒计时
if (countdown == 0){
obj.removeAttribute("disabled");
obj.value="发送短信验证码";
countdown = 60;
return;
}else{
obj.setAttribute("disabled", true);
obj.value="重新发送(" + countdown + ")";
countdown--;
}
setTimeout(function() {
settime(obj) }
,1000)
}
$(document).ready(function() {
//清除输入文字信息
function cleartxt(obj){
$(obj).prev().find('.weui-input').val("");
return false;
};
//点击发送短信验证码
$("#yzmfs").click(function () {
//确保手机号不为空
var mobile=$("#phone").val();
if(mobile.length==0)
{
$.toptip('请输入手机号码!');
$("#phone").focus();
return false;
}
if(mobile.length!=11)
{
$.toptip('请输入11位手机号!');
$("#phone").focus();
return false;
}
var myreg = /^((1[3|4|5|8][0-9]{1})+\d{8})$/;
if(!myreg.test(mobile))
{
$.toptip('请输入正确的手机号码!');
document.getElementById("phone").focus();
return false;
}
//点击发送短信验证码
$.ajax({
async : false,
type: "get",
url: "{{url('code')}}", //
data: {},
success: function (data) {
//发送短信验证码
$("#code").val(data); //获取生成验证码赋值 加密
$.ajax({
async : false,
type: "post",
url: "{{url('smsyzm')}}", //
data: {
"yzm": data,
'yzmtel': $('#phone').val(),
'_token':'{{csrf_token()}}'
},
dataType: "json",
success: function (data) {
}
});
}
});
})
})
//注册 ajax提交
function register(){
var name = $("#name").val();
var pwd = $("#pwd").val();
var pwd_confirmation = $("#pwd_confirmation").val();
var phone = $("#phone").val();
var code = $("#code").val();
var yzm = $("#yzm").val();//手动输入的验证码
$.post("{{url('register')}}",{
"name":name,
"pwd":pwd,
"pwd_confirmation":pwd_confirmation,
"phone":phone,
"code":code,
"yzm":yzm,
"_token":"{{csrf_token()}}",
},function(data,status){
//$.toptip(data);
if(data==1){
$.toast("注册成功");
window.location.href="http://www.xxxxxx.com/";
}else if(data==0){
$.toast("注册失败", "forbidden");
}else{
$.toptip(data);
}
});
}
</script>
</head>
<body>
<form action="" onsubmit="return false;" id="formRegister">
{{csrf_field()}}
<div class="weui-cells weui-cells_form">
<div class="weui-cell margin5 margin15 border-radius w">
<div class="weui-cell__hd">
<label class="weui-label">用户名</label></div>
<div class="weui-cell__bd">
<input class="weui-input" placeholder="请输入用户名" type="text" name="name" id="name">
</div>
<i class="weui-icon-clear" onclick="cleartxt(this)"></i>
</div>
<div class="weui-cell margin5 margin15 border-radius w">
<div class="weui-cell__hd">
<label class="weui-label">密码</label></div>
<div class="weui-cell__bd">
<input class="weui-input" placeholder="请输入密码" type="password" name="pwd" id="pwd">
</div>
<i class="weui-icon-clear" onclick="cleartxt(this)"></i>
</div>
<div class="weui-cell margin5 margin15 border-radius w">
<div class="weui-cell__hd">
<label class="weui-label">确认密码</label></div>
<div class="weui-cell__bd">
<input class="weui-input" placeholder="请重复输入密码" type="password" name="pwd_confirmation" id="pwd_confirmation">
</div>
<i class="weui-icon-clear" onclick="cleartxt(this)"></i>
</div>
<div class="weui-cell margin5 margin15 border-radius w">
<div class="weui-cell__hd">
<label class="weui-label">手机号</label>
</div>
<div class="weui-cell__bd">
<input class="weui-input" placeholder="请输入手机号" type="number" name="phone" id="phone">
</div>
<i class="weui-icon-clear" onclick="cleartxt(this)"></i>
</div>
<!--<input id="msg" hidden>-->
<input id="code" hidden name="code">
<div class="weui-cell margin5 margin15 border-radius w">
<div class="weui-cell__bd">
<input class="weui-input" type="text" id="yzm" name="yzm">
</div>
<i class="weui-icon-clear" onclick="cleartxt(this)"></i>
<div class="weui-cell__hd">
<input class="weui-input" type="button" id="yzmfs" value="发送短信验证码" onclick="settime(this)" />
</div>
</div>
<div class="weui-btn-area">
<input class="weui-btn weui-btn_primary" type="submit" value="注册" onclick="register()">
</div>
</div>
</form>
</body>
</html>
数据表: