后台:
public function login(Request $request)
{
$code=$request['code'];
// dd($code);
$appid='wx101e36c98383213e';
$server='e7005b757195845b865723d871142fce';
$url='https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code';
$url = sprintf($url, $appid, $server, $code);
$client=new Client(['timeout'=>5,'verify'=>false]);
$res=$client->get($url);
// dd($res);
$ret=(string)$res->getBody();
$arr=json_decode($ret,true);
// return $arr;die;
try {
$res=DB::table('user')->insert(['openid'=>$arr['openid']]);
return $res;
}catch (\Exception $exception){
return $arr;
}
}
public function wxlogin(Request $request)
{
$openid=$request['openid'];
$data=User::where('openid',$openid)->first();
if ($data){
return json_encode($data);
}else{
$data=User::create(['openid'=>$openid]);
return json_encode($data);
}
}
public function phone(Request $request)
{
include_once "wxBizDataCrypt.php";
$appid = 'wx101e36c98383213e';
$sessionKey = $request['session_key'];
$encryptedData=$request['encryptedData'];
$iv = $request['iv'];
$pc = new WXBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
print($data . "\n");
} else {
print($errCode . "\n");
}
}
public function phonelogin(Request $request)
{
$data=User::where('phone',$request['phone'])->first();
if ($data){
return json_encode($data);
}else{
$data=User::where('openid',$request['openid'])->update(['phone'=>$request['phone']]);
$data=$data->where('phone',$request['phone'])->first();
return json_encode($data);
}
}
xml页面
<view class="container">
<view class="userinfo">
<block wx:if="{{!hasUserInfo}}">
<button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
<button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>
</block>
<block wx:else>
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
</view>
</view>
xss:
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
color: #aaa;
}
.userinfo-avatar {
overflow: hidden;
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.usermotto {
margin-top: 200px;
}
js:
data: {
userInfo: {},
hasUserInfo: false,
canIUseGetUserProfile: false,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
if (wx.getUserProfile) {
this.setData({
canIUseGetUserProfile: true
})
}
},
getUserProfile(e) {
let openid=wx.getStorageSync('openid')
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '用于完善会员资料',
// 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
// console.log(res.userInfo);
wx.request({
url: 'http://localhost/index.php/api/wxlogin',
data:{openid},
success:e=>{
// console.log(e)
}
})
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
},
getUserInfo(e) {
// 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
},
getPhoneNumber (e) {
let session_key =wx.getStorageSync('session_key')
let openid =wx.getStorageSync('openid')
// console.log(e)
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
wx.request({
url: 'http://localhost/index.php/api/phone',
data:{
encryptedData:e.detail.encryptedData,
iv:e.detail.iv,
session_key:session_key
},
success:ret=>{
console.log(ret)
wx.request({
url: 'http://localhost/index.php/api/phonelogin',
data:{
openid:openid,
phone:ret.data.purePhoneNumber
},
success:evt=>{
console.log(evt);
this.setData({
userInfo:evt.data,
hasUserInfo:true
})
}
})
}
})
app.js
App({
onLaunch() {
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
timeout:2000,
success: ({code}) => {
// console.log(code)
wx.request({
url: 'http://localhost/index.php/api/login',
data:{code},
method:'POST',
success:e=>{
console.log(e)
wx.setStorageSync('openid', e.data.openid)
wx.setStorageSync('session_key', e.data.session_key)
// console.log(e.data.session_key);
}
})
}
})
},
globalData: {
userInfo: null
}
})