官方文档微信小程序登录
- 授权登录
<button open-type="getUserInfo" @getuserinfo="GetUserInfo">授权登录</button>
GetUserInfo() {
uni.getUserInfo({
provider: 'weixin',
success: function(infoRes) {
that.tologin() ;
},
fail(res) {
console.log("用户在register页面取消授权") ;
}
});
}
- 发送请求给后台
// 登录
tologin(){
var that = this ;
this.$api.loading('登录中...');
uni.login({
provider: 'weixin',
success:function(res){
var code = res.code ;
uni.getUserInfo({
success(res) {
uni.request({
url:url,
method:"POST",
data:{
code : code ,
encryptedData:res.encryptedData ,
iv : res.iv
},
success:function(res){
console.log(res);
}
})
}
})
}
})
},
- php后台
class User
{
public function getSess(Request $request)
{
$data = $request->param();
$code = $data['code'];
$iv = $data['iv'];
$encryptedData = $data['encryptedData'];
$appid = config('xcx.APPID');
$secret = config('xcx.SECRET');
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appid . "&secret=" . $secret . "&js_code=" . $code . "&grant_type=authorization_code";
//利用code得到session_key 和 openid
$res = json_decode(file_get_contents($url),true);
$session_key = $res['session_key'];
//利用session_key解密用户数据
$ret = $this->decryUser($appid,$session_key ,$encryptedData ,$iv) ;
$ret = json_decode($ret,true) ;
//第三方session 自己设置规则
$three_session = md5($ret['openId'].$res['session_key']) ;
//要保存到数据库中的用户数据
$data = [
];
$user_id = UserModel::where("open_id",$ret['openId'])->value('user_id');
// 如果已经存入过数据库 就更新数据库
if($user_id){
$updateRes = UserModel::where("user_id",$user_id)->update($data);
//判断updateRes是否成功然后设置返回状态
$return = ['msgcode'=>1,'three_session'=>$three_session] ;
}else {
//没有就保存数据库
$saveRes = UserModel::create($data) ;
//判断saveRes是否成功然后设置返回状态
$return = ['msgcode'=>1,'three_session'=>$three_session] ;
}
return self::jsonReturn($return) ;
}
// 解密
private function decryUser($appid ,$sessionKey ,$encryptedData ,$iv)
{
import('wxBizDataCrypt',EXTEND_PATH) ;
$pc = new \WXBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
return $data ;
}
}
- 官方解密算法:用户信息解密