微信小程序登录

一. 小程序不支持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是被加密过的数据,由于请求过程中因为编码原因+号变成了空格,所以我们需要用下面的方法转换回来
function define_str_replace($data){
return str_replace(' ','+',$data);
}
三、例子:
php
// 微信登录
public function weixin_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)
public function getUserInfo($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];
}
}
javascript
getUserInfo: function(cb) {
var that = this
if (this.globalData.userInfo) {
typeof cb == "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
typeof cb == "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) {
var data = JSON.parse(res.data.trim());
wx.setStorageSync('sessionid', data.sessionid);
}
})
},
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# 微信小程序
# 登录
# 登录详解
# 登录实例
# 微信小程序实战之登录页面制作(5)
# 微信小程序用户授权
# 以及判断登录是否过期的方法
# 微信小程序获取手机号授权用户登录功能
# 微信小程序实现授权登录
# 一步步教会你微信小程序的登录鉴权
# 微信小程序 登录的简单实现
# 微信小程序 后台登录(非微信账号)实例详解
# 微信小程序 如何保持登录状态
# 微信小程序静默登录的实现代码
# 一文教会你微信小程序如何实现登录
# 客户端
# 转成
# 希望能
# 不支持
# 点击下载
# 谢谢大家
# 需要用
# 过程中
# 变成了
# 发送给
# Session
# session_db
# weixin_login
# public
# str_replace
# return
# data
# php
# define_str_replace
# nbsp
相关文章:
电脑免费海报制作网站推荐,招聘海报哪个网站多?
C#怎么使用委托和事件 C# delegate与event编程方法
如何设置并定期更换建站之星安全管理员密码?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
如何选择建站程序?包含哪些必备功能与类型?
如何在阿里云高效完成企业建站全流程?
建站VPS能否同时实现高效与安全翻墙?
制作宣传网站的软件,小红书可以宣传网站吗?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
已有域名和空间,如何快速搭建网站?
广州美橙建站如何快速搭建多端合一网站?
微信小程序 五星评分(包括半颗星评分)实例代码
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
浅析上传头像示例及其注意事项
如何实现建站之星域名转发设置?
b2c电商网站制作流程,b2c水平综合的电商平台?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
建站主机无法访问?如何排查域名与服务器问题
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何在腾讯云服务器上快速搭建个人网站?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何用PHP工具快速搭建高效网站?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何选择靠谱的建站公司加盟品牌?
个人摄影网站制作流程,摄影爱好者都去什么网站?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
高性价比服务器租赁——企业级配置与24小时运维服务
重庆市网站制作公司,重庆招聘网站哪个好?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
网站制作企业,网站的banner和导航栏是指什么?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何用y主机助手快速搭建网站?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
如何高效配置香港服务器实现快速建站?
建站之星在线客服如何快速接入解答?
中山网站制作网页,中山新生登记系统登记流程?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何通过虚拟主机快速完成网站搭建?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
已有域名如何快速搭建专属网站?
制作门户网站的参考文献在哪,小说网站怎么建立?
太原网站制作公司有哪些,网约车营运证查询官网?
建站之星如何实现网站加密操作?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
建站之星导航菜单设置与功能模块配置全攻略
建站之星如何修改网站生成路径?
*请认真填写需求信息,我们会在24小时内与您取得联系。