小程序前端代码

function WXlogin(){
wx.login({
success: function (code) {
wx.getUserInfo({
success:function(userInfo){
//发起请求
wx.request({
url: domain+'wxopen/wxapp/login',
method:"POST",
data:{
code: code.code,
encryptedData: userInfo.encryptedData,
iv: userInfo.iv,
rawData: userInfo.rawData,
signature: userInfo.signature,
appid:extConfig.appid
},
success:function(res){
console.log(res,'login')
wx.setStorageSync('session_3rd', res.data);//存token
}
})
}
}) }
});
} //重新登陆更新
function reLogin(sess_3rd){
console.log(sess_3rd,'s3rd')
//发起请求
wx.request({
url: domain + 'wxopen/wxapp/reLogin',
method: "POST",
data: {
session: sess_3rd,
},
success: function (res) {
console.log(res, 'relogin')
if(res.data == 0){
WXlogin();//重新登陆
}else{
wx.setStorageSync('session_3rd', res.data);//存token
} }
})
}

  

后端PHP代码

function login(){
$code = input('code');//登陆凭证
$encryptedData = input('encryptedData');//
$iv = input('iv');//
$rawData = input('rawData');//
$signature = input('signature');//
$appid = input('appid'); //第三方token,换取session_key
$comp_token = $this->component->getAccessToken();
$url ='https://api.weixin.qq.com/sns/component/jscode2session?appid='.$appid.'&js_code='.$code.'&grant_type=authorization_code&component_appid='.$this->appid.'&component_access_token='.$comp_token; $result = send_get($url);
$result = json_decode($result,true);
trace($result,'登陆返回'); //根据业务需要对数据包进行签名校验,确保数据的完整性。
$signature2 = sha1( $rawData.$result['session_key']);
if ($signature != $signature2){
return ['msg'=>'签名检验失败','status'=>0];
} //解密获得用户的完整敏感信息
$pc = new wxappBizDataCrypt($appid, $result['session_key']); $errCode = $pc->decryptData($encryptedData, $iv, $data ); if ($errCode == 0) {
$data = json_decode($data,true);
$data['appid'] = $data['watermark']['appid'];
$session_3rd = bin2hex(random_bytes(9)); $data['session_3rd'] = $session_3rd; //检查用户是否存在,进行增加更新操作
$userInfo = new UserInfo();
$users = $userInfo::get(['openid'=>$result['openid']]);
if ($users){
$ret = $userInfo->allowField(true)->isUpdate(true)->save($data,['openid'=>$result['openid']]); }else{
$ret = $userInfo->allowField(true)->isUpdate(false)->save($data);
} if ($ret)
return $session_3rd;
}
return 0;
} //登陆过期,重新登陆
function reLogin(){
$session = input('session');
$users = $this->user->where(['session_3rd'=>$session])->find();
if ($users){
$session_3rd = bin2hex(random_bytes(9));
$ret = $this->user->where('id',$users['id'])->update(['session_3rd'=>$session_3rd]);//更新3rd return $session_3rd;
}else{
return 0;
}
}

  

微信小程序登陆授权的更多相关文章

  1. 补充ABP Zero集成微信小程序登陆的BUG修复部分

    感谢园友 @turingguo 发布的 https://www.cnblogs.com/turingguo/p/9019026.html  文章,详细介绍了ABP Zero集成微信小程序登陆的实现过程 ...

  2. nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId

    nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId 前言: 我准备用nodejs+koa+uniapp实现一款餐饮点单小程序,以及nodejs+koa+vue实现后端管理 ...

  3. 微信小程序+php 授权登陆,完整代码

    先上图        实现流程: 1.授权登陆按钮和正文信息放到了同一个页面,未授权的时候显示登陆按钮,已授权的时候隐藏登陆按钮,显示正文信息,当然也可以授权和正文分开成两个页面,在授权页面的onlo ...

  4. 关于微信小程序拒绝授权后,重新授权并获取用户信息

    最近公司做了一些有关微信小程序的项目,涉及到授权获取用户基本信息,但是在拒绝授权之后就不会再出现授权窗口: 看网上也有很多人遇到了同样的问题,所以记录下来我的处理方法,供大家和自己学习和记录: 当调用 ...

  5. 微信小程序button授权页面,用户拒绝后仍可再次授权

    微信小程序授权页面,进入小程序如果没授权跳转到授权页面,授权后跳转到首页,如果用户点拒绝下次进入小程序还是能跳转到授权页面,授权页面如下 app.js  中的 onLaunch或onShow中加如下代 ...

  6. 微信小程序拒绝授权后重新拉起授权窗口

    问题: 在首次进入小程序时,我们常常会收到一些获取权限的申请,比如「获取地理位置权限」.需要微信登录时请求「获得你的公开信息(昵称.头像等)」.对于这些权限申请,开发者当然希望获得所有权限,而用户拒绝 ...

  7. WebAPI 微信小程序的授权登录以及实现

    这个星期最开始 ,老大扔了2个任务过来,这个是其中之一.下面直接说步骤: 1.  查阅微信开发文档  https://developers.weixin.qq.com/miniprogram/dev/ ...

  8. 微信小程序最新授权方法,getUserInfo

    20180511微信小程序正式关闭原先getUserInfo的逻辑 不再允许自动弹出授权框. 方法一: index.wxml(准备一个用于给用户授权的页面,我这里直接用了一个全屏按钮) <vie ...

  9. uni-app微信小程序登录授权

    微信小程序授权是非常简单和常用的功能,但为了方便,还是在此记录一下要点: 首先是需要用到一个授权按钮来触发获取用户信息授权: 关键在于 open-type 为 getUserInfo , 然后有个@g ...

随机推荐

  1. 以通配符(%)开始的like字符串,走索引

    在对oracle的SQL优化过程中经常会遇到[like'%abc']破坏索引的问题,但是如果真有此类需求,该如何在不破坏索引的基础上进行查询呢. [sql] view plain copy sys@m ...

  2. java爬虫简单实现

    package WebSpider; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  3. SpringBoot学习笔记

    SpringBoot个人感觉比SpringMVC还要好用的一个框架,很多注解配置可以非常灵活的在代码中运用起来: springBoot学习笔记: .一.aop: 新建一个类HttpAspect,类上添 ...

  4. HTML5 桌面通知:Notification API

    原文地址:http://blog.gdfengshuo.com/article/23/ 前言 Notification API 是 HTML5 新增的桌面通知 API,用于向用户显示通知信息.该通知是 ...

  5. ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】

    为了创建或打开一个网络数据集,你必须使用NetworkDatasetFDExtension对象(文件地理数据库中的数据集)或NetworkDatasetWorkspaceExtension对象(对于S ...

  6. bzoj 5016: [Snoi2017]一个简单的询问

    Description 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. Input 第 ...

  7. RabbitMQ之消费者Demo(队列参数详细说明)

    package com.jiefupay; import java.io.IOException; import java.util.HashMap; import java.util.Map; 8 ...

  8. ln 命令详解

    ln 命令 作用:它的功能是为某一个文件在另外一个位置建立一个同步的链接 参数:必要参数:  -b 删除,覆盖以前建立的链接  -d 允许超级用户制作目录的硬链接  -f 强制执行  -i 交互模式, ...

  9. SpringMVC处理multipart请求.

    一.简述 multipart格式的数据会将一个表单拆分为多个部分(part),每个部分对应一个输入域.在一般的表单输入域中,它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是 ...

  10. 聚簇(或者叫做聚集,cluster)索引和非聚簇索引

    字典的拼音目录就是聚簇(cluster)索引,笔画目录就是非聚簇索引.这样查询“G到M的汉字”就非常快,而查询“6划到8划的字”则慢. 聚簇索引是一种特殊索引,它使数据按照索引的排序顺序存放表中.聚簇 ...