最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
微信小程序 登录实例详解
时间:2017-01-20 编辑:简简单单 来源:一聚教程网
微信小程序登录
一. 小程序不支持cookie会话
1. 通过传递与检验3rd_session来保持会话
2. 3rd_session可以执行‘`head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168`该命令生成
3. 使用Redis或者数据库存储session
4. 生成的3rd_session发送给客户端,写入storage
5. 客户端的每次请求必须带上3rd_session
二、加密数据解码
1. $iv,$code是被加密过的数据,由于请求过程中因为编码原因+号变成了空格,所以我们需要用下面的方法转换回来
functiondefine_str_replace($data){
returnstr_replace(' ','+',$data);
}
三、例子:
php
代码如下 | 复制代码 |
// 微信登录 publicfunctionweixin_login(){ $session_db=D('Session'); $session_id=I('get.sessionid',''); $session=$session_db->getSession($session_id); if( !empty($session) ){ $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_id]); }else{ $iv=define_str_replace(I('get.iv'));//把空格转成+ $encryptedData=urldecode(I('get.encryptedData')); //解码 $code=define_str_replace(I('get.code'));//把空格转成+ $msg=D('Weixin')->getUserInfo($code,$encryptedData,$iv);//获取微信用户信息(openid) if($msg['errCode']==0){ $open_id=$msg['data']->openId; $users_db=D('Users'); $info=$users_db->getUserInfo($open_id); if(!$info||empty($info)){ $users_db->addUser(['open_id'=>$open_id,'last_time'=>['exp','now()']]);//用户信息入库 $info=$users_db->getUserInfo($open_id); //获取用户信息 $session_id=`head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168`; //生成3rd_session $session_db->addSession(['uid'=>$info['id'],'id'=>$session_id]);//保存session } if($session_id){ $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_id]); //把3rd_session返回给客户端 }else{ $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_db->getSid($info['id'])]); }
}else{ $this->ajaxReturn(['error_code'=>'用户信息获取失败!']); }
} } |
获取微信信息模型(包括信息解密,官方例子点击下载)
代码如下 | 复制代码 |
require_once ABS_APP_PATH.'/Addon/Aes/wxBizDataCrypt.php' class WeixinModel{ // 获取微信的用户信息(openid) publicfunctiongetUserInfo($code,$encryptedData,$iv){ $appid=C('appid'); $secret=C('secret'); $grant_type='authorization_code' $url='https://api.weixin.qq.com/sns/jscode2session' $url= sprintf("%s?appid=%s&secret=%s&js_code=%s&grant_type=%",$url,$appid,$secret,$code,$grant_type); $user_data=json_decode(file_get_contents($url)); $session_key= define_str_replace($user_data->session_key); $data=""; $wxBizDataCrypt=new\WXBizDataCrypt($appid,$session_key); $errCode=$wxBizDataCrypt->decryptData($encryptedData,$iv,$data); return['errCode'=>$errCode,'data'=>json_decode($data),'session_key'=>$session_key]; } } |
代码如下 | 复制代码 |
getUserInfo:function(cb) { varthat =this if(this.globalData.userInfo) { typeofcb =="function"&& cb(this.globalData.userInfo) }else{ //调用登录接口 wx.login({ success:function(r) { wx.getUserInfo({ success:function(res) { that.login({ code: r.code, iv: res.iv, encryptedData: encodeURIComponent(res.encryptedData), }) that.globalData.userInfo = res.userInfo typeofcb =="function"&& cb(that.globalData.userInfo) } }) } }) } }, login:function(param) { wx.request({ url:this.requestUrl('Index/weixin_login'), data: param, header: { 'content-type':"application/json", }, success:function(res) { vardata = JSON.parse(res.data.trim()); wx.setStorageSync('sessionid', data.sessionid); } }) }, |
相关文章
- sora软件价格介绍 02-22
- sora官网入口地址一览 02-22
- Sora生成的视频使用教程 02-22
- 《梦幻西游》元宵灯谜线索答案大全2024 02-22
- 《原神》有朋自远方来第一天通关攻略 02-22
- 《苏醒之路》四个结局达成攻略 02-22