700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php 小程序登录授权解密 微信小程序授权登录 PHP解密数据 并返回用户信息token记

php 小程序登录授权解密 微信小程序授权登录 PHP解密数据 并返回用户信息token记

时间:2022-10-19 04:49:50

相关推荐

php 小程序登录授权解密 微信小程序授权登录 PHP解密数据 并返回用户信息token记

首先创建一个项目,把这些代码都清空,我们自己写!

首先index.wxml,写一个button用于发起登录

index.wxml

点击授权

然后写index.js

通过wx.login()来获取code

如果成功获取,那么返回code

然后调用wx.request()向服务端发起一个请求,即向登录api接口发送code

换取openid和session_key

//index.js

//获取应用实例

const app = getApp()

Page({

data: {

},

//授权登录

onGotUserInfo(e) {

// console.log(e)

},

//登录获取code

bindGetUserInfo(e) {

var that = this;

that.setData({

kais: false,

userimg: e.detail.userInfo.avatarUrl,

username: e.detail.userInfo.nickName,

});

wx.login({

success: function (res) {

wx.getUserInfo({ //得到rawData, signatrue, encryptData

success: function (data) {

var rawData = data.rawData;

var signature = data.signature;

var encryptedData = data.encryptedData;

var iv = data.iv;

wx.request({

url: '/api/user/login',

data: {

"code": res.code,

"rawData": rawData,

"signature": signature,

'iv': iv,

'encryptedData': encryptedData

},

method: 'POST',

success: function (info) {

console.log(info);

that.setData({

token: info.data,

kais: false,

});

//存储登录信息

if (wx.getStorageSync('key') == '') {

wx.setStorage({

key: 'key',

data: info.data,

});

};

}

})

}

})

},

})

},

})

app.js,这个清空,留下这样就行了

//app.js

App({

})

写到这小程序端酒写完了,现在开始写服务端了

vget($url); // 一个使用curl实现的get方法请求

$arr = json_decode($arr, true);

$openid = $arr['openid'];

$session_key = $arr['session_key'];

// 数据签名校验

$signature = input('signature');

$rawData = input('rawData');

$signature2 = sha1($rawData . $session_key);

if ($signature != $signature2) {

return json(['code' => 500, 'msg' => '数据签名验证失败!']);

}

Vendor("PHP.wxBizDataCrypt"); //加载解密文件,在官方有下载(下载后放到vender目录去)

$encryptedData = input('encryptedData');

$iv = input('iv');

$pc = new \WXBizDataCrypt($APPID, $session_key);

$errCode = $pc->decryptData($encryptedData, $iv, $data); //其中$data包含用户的所有数据

$data = json_decode($data,true);

if ($errCode == 0) {

$user_id = md5($data['openId']);

//缓存七天

//Cache::set("$user_id",$data['openId'],60*60*24*7);

$userInfo = [

'open_id' => $data['openId'],

'nickName' => $data['nickName'],

'avatarUrl' => $data['avatarUrl'],

'gender' => $data['gender'],

'country' => $data['language'],

'province' => $data['province'],

'city' => $data['city'],

'create_time'=> date('Y-m-d H:i:s'),

'update_time'=> date('Y-m-d H:i:s'),

];

$uid = Db::name('wx_user')->field('id')->where('open_id',$data['openId'])->find()['id'];

//判断用户是否已经授权登录(没有则注册)

if(empty($uid)){

$uid = Db::name('wx_user')->insertGetId($userInfo);

}

//存储7天作为登录时的验证(token),其中键是md5加密后的openId,值是数据库中用户的id

Cache::set("$user_id",$uid,60*60*24*7);

dump($data);

echo $user_id;

die;//打印解密所得的用户信息

} else {

echo $errCode;//打印失败信息

}

}

public function vget($url){

$info=curl_init();

curl_setopt($info,CURLOPT_RETURNTRANSFER,true);

curl_setopt($info,CURLOPT_HEADER,0);

curl_setopt($info,CURLOPT_NOBODY,0);

curl_setopt($info,CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($info,CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($info,CURLOPT_URL,$url);

$output= curl_exec($info);

curl_close($info);

return $output;

}

}

后台可以通过openID和session_key解密打印用户的所有信息

最后服务端会返回token,小程序本地保存下来,下次需要用到用户相关的接口时记得携带就可以了

php 小程序登录授权解密 微信小程序授权登录 PHP解密数据 并返回用户信息token记住登录状态...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。