微信小程序
login.wxml 页面
<button bindtap="getUserInfo" open-type="getUserInfoProFile">授权登录</button>
<button bindtap="getPhoneLogin">手机号登录</button>
login.js 授权登录
//授权登录
getUserInfo(e) {
wx.getUserProfile({
desc: 'desc',
success: res => {
// console.log(res)
let userInfo = res.userInfo
wx.login({
success: even => {
// console.log(even)
let code = even.code
wx.request({
url: 'http://www.1902a.com/get_token',
method: 'GET',
data: {
code,
nickname: userInfo.nickName,
avatar: userInfo.avatarUrl
},
success: res => {
// console.log(res.data)
let token = res.data.result
wx.setStorageSync('token', token)
if (res.data.errCode == 0) {
wx.navigateBack({
delta: 1,
})
}
}
})
}
})
}
})
},
PHP 后台
//获取token
public function getToken()
{
$param = input();
//获取小程序的code
$code = $param['code'];
// AppID:wxf13a256d46f75fe4
// AppSecret:668a6e30a946616b2cd18d77d1da0b98
$appid = 'AppID';
$secret = 'AppSecret';
//微信小程序授权的url
$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";
//请求回调
$data = geturl($url);
//获取用户信息
$userInfo = User::where('openid',$data['openid'])->find();
//如果为空进行创建新用户
if(empty($userInfo)){
$param['openid'] = $data['openid'];
$param['session_key']=$data['session_key'];
User::create($param,true);
}
//生成token
$token = md5($data['openid'].rand(1,999999).date('Y-m-d',time()));
//存入缓存
Cache::set($token,$userInfo,7200);
return checkJson($token);
}
phone_login.wxml 手机号登录页面
<view class="container">
<view class='row'>
<input placeholder='请输入手机号' bindinput='bindPhoneInput'/>
</view>
<view class='row'>
<input placeholder='请输验证码' bindinput='bindCodeInput' style='width:70%;'/>
<button class='codeBtn' bindtap='getCode' >获取验证码</button>
</view>
<view>
<button class='save' bindtap='save' >保存</button>
</view>
</view>
phone_login.js
Page({
/**
* 页面的初始数据
*/
data: {
phone: '',
code: '',
},
//手机号输入
bindPhoneInput(e) {
// console.log(e.detail.value);
var val = e.detail.value;
this.setData({
phone: val
})
},
//获取短信验证码
getCode(e) {
let phone = this.data.phone
console.log(phone)
let str = /^1\d{10}$/
if (phone.length !== 11) {
wx.showToast({
title: '手机号不正确',
icon: 'error'
})
return false
}
if (!str.test(phone)) {
wx.showToast({
title: '手机号不正确',
icon: 'error'
})
return false
}
wx.request({
url: 'http://www.1902a.com/get_code?phone=' + phone,
method: 'GET',
success: res => {
console.log(res.data.result)
}
})
},
//验证码输入
bindCodeInput(e) {
this.setData({
code: e.detail.value
})
},
save(){
let phone = this.data.phone
let str = /^1\d{10}$/
if (phone.length !== 11) {
wx.showToast({
title: '手机号不正确',
icon: 'error'
})
return false
}
if (!str.test(phone)) {
wx.showToast({
title: '手机号不正确',
icon: 'error'
})
return false
}
console.log(phone)
let phoneCode = this.data.code
console.log(phoneCode)
wx.request({
url: 'http://www.1902a.com/phone_login',
method:'POST',
data:{
phone,
phoneCode
},
success:res=>{
console.log(res.data.result)
wx.setStorageSync('token', res.data.result)
wx.navigateBack({
delta: 2,
})
}
})
},
}
获取验证码
public function getPhoneCode()
{
$phone = input('phone');
$statusStr = array(
"0" => "短信发送成功",
"-1" => "参数不全",
"-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
"30" => "密码错误",
"40" => "账号不存在",
"41" => "余额不足",
"42" => "帐户已过期",
"43" => "IP地址限制",
"50" => "内容含有敏感词"
);
$smsapi = "http://api.smsbao.com/";
$user = "****"; //短信平台帐号
$pass = md5("*****"); //短信平台密码
$code = rand(1111,9999);
$content="【好心情】您的验证码为{$code},在5分钟内有效";//要发送的短信内容
$phone = $phone;//要发送短信的手机号码
$sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);
$result =file_get_contents($sendurl);
Cache::set('phone_code',$code,300);
return checkJson($code,$statusStr[$result]);
}
验证手机号与验证码是否正确
public function phoneLogin()
{
$phone = input('phone');
// print_r($phone);
$chars = "/^1[34578]\d{9}$/";
if(!preg_match($chars,$phone,$matches) || strlen($phone)!=11){
return checkJson([],'手机号不正确','10001');
}
$phoneCode = input('phoneCode');
// print_r($phoneCode);
if($phoneCode!=Cache::get('phone_code') || empty($phoneCode)){
return checkJson([],'验证码不正确','10002');
}
//获取用户信息
$userInfo = User::where('phone',$phone)->find();
//如果为空进行创建新用户
if(empty($userInfo)){
User::create([
'phone' => $phone
]);
}
//生成token
$token = md5($phone.rand(1,999999).date('Y-m-d',time()));
//存入缓存
Cache::set($token,$userInfo);
return checkJson($token);
}