第一步:用户同意授权,获取code

  1. 在确保公众账号拥有授权作用域(scope参数)的权限的前提下,引导关注者打开如下页面:
    尤其注意:如果链接的参数顺序不对,授权页面将无法正常访问

    https://open.weixin.qq.com/connect/oauth2/authorize
    ?appid=APPID // 公众号的唯一标识
    &redirect_uri=REDIRECT_URI // 授权后重定向的回调链接地址, 使用 urlEncode 对链接进行处理
    &response_type=code // 返回类型,填写code
    &scope=SCOPE // 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
    &state=STATE#wechat_redirect // 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节。#wechat_redirect 是   无论直接打开还是做页面302重定向时候,必须带此参数若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
    
  2. 参考链接(请在微信客户端中打开此链接体验):
    尤其注意:跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。

    // scope为snsapi_base
    https://open.weixin.qq.com/connect/oauth2/authorize
    ?appid=wx520c15f417810387
    &redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60
    &response_type=code
    &scope=snsapi_base
    &state=123#wechat_redirect//scope为snsapi_userinfo
    https://open.weixin.qq.com/connect/oauth2/authorize
    ?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php
    &response_type=code
    &scope=snsapi_userinfo
    &state=STATE#wechat_redirect
    


用户同意授权后
如果用户同意授权,页面将跳转至

redirect_uri/?code=CODE&state=STATE。

第二步:通过code换取网页授权access_token

公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。

// 请求方法
// 获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token
?appid=APPID // 公众号的唯一标识
&secret=SECRET // 公众号的appsecret
&code=CODE // 填写第一步获取的code参数
&grant_type=authorization_code //  填写为authorization_code// 返回说明
// 正确时返回的JSON数据包如下:
{"access_token":"ACCESS_TOKEN", // 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同"expires_in":7200, // access_token接口调用凭证超时时间,单位(秒)"refresh_token":"REFRESH_TOKEN", // 用户刷新access_token"openid":"OPENID", // 用户唯一标识"scope":"SCOPE"  // 用户授权的作用域,使用逗号(,)分隔
}

第三步:刷新access_token(如果需要)

access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。

// 请求方法
// 获取第二步的refresh_token后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/refresh_token
?appid=APPID // 公众号的唯一标识
&grant_type=refresh_token // 填写为refresh_token
&refresh_token=REFRESH_TOKEN // 填写通过access_token获取到的refresh_token参数//返回说明
//正确时返回的JSON数据包如下:
{ "access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"SCOPE"
}

第四步:拉取用户信息(需scope为 snsapi_userinfo)

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

//请求方法
//http:GET(请使用https协议)
https://api.weixin.qq.com/sns/userinfo
?access_token=ACCESS_TOKEN // 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
&openid=OPENID // 用户的唯一标识
&lang=zh_CN // 国家地区语言版本//返回说明
//正确时返回的JSON数据包如下:
{   "openid": "OPENID","nickname": NICKNAME,"sex": 1,"province":"PROVINCE","city":"CITY","country":"COUNTRY","headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46","privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

附:检验授权凭证(access_token)是否有效

// 请求方法
// http:GET(请使用https协议)
https://api.weixin.qq.com/sns/auth
?access_token=ACCESS_TOKEN
&openid=OPENID

示例:

<script>// 1、授权export default {onLoad() {this.wx_login();},methods: {//微信登录wx_login(){let appId= 'wxe1*******2d0d3d';let Host = encodeURIComponent('https://ceshi.com/pages/guide/getOpenid');console.log(Host);window.location.href =`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${Host}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`},},}// getOpenid页面获取openidexport default {onLoad(option) {var arr = window.location.search;var code = arr.split('=')[1].split('&')[0];this.$http.post("/api/WxPay/getOpenid",{code:code}).then(res=>{if(res.code == 1){uni.setStorageSync('openid', res.data.openid);this.$goBack(3,'/pages/index/index')}})},}
</script>

微信:公众号授权登录相关推荐

  1. 微信公众号授权登录(asp.net + angular)

    微信是时下最火的,上面有数以亿计的用户,如果能接入微信将大大减低注册门槛,当然,接入微信登录是有门槛的.微信登录一般有两个,一个是微信开放平台授权登录,一个是微信公众号授权登录,两者都需要认证才可以继 ...

  2. vue移动端项目微信公众号授权登录

    前言 在我们做移动端项目时, 很多功能是以登录后才能进行后续的操作, 并且许多pc端的网页都有微信扫码登录功能, 为了做到pc与移动端统一, 往往移动端项目需要添加微信登录功能, 那么为什么手机端不能 ...

  3. Java在Web端微信公众号授权登录

    Java在Web端微信公众号授权登录 1.需要在微信开发平台配置 url:是自己服务中的微信需要推给你的地址(需要使用二级域名,可以去添加链接描述)购买9块钱1个月使用权或者白嫖都可 token 这个 ...

  4. H5 微信公众号 授权登录 前后端分离篇(资料准备+前端01)

    实现微信公众号授权登录,很简单,但是注意的地方要细心,小伙伴们跟着我的思路一起实现吧! 文章目录 一.帐号申请 1. 正式账号 2. 测试帐号 二.微信文档 2.1. 文档主页 2.2. 授权流程 2 ...

  5. 【SpringBoot学习】46、SpringBoot 集成 Uniapp 实现微信公众号授权登录

    文章目录 一.公众号环境搭建 二.Spring Boot 集成微信公众号 1.application.yml 微信配置 2.控制层接口 三.Uniapp 实现授权登录 一.公众号环境搭建 本篇文章使用 ...

  6. uni-app 对FastAdmin微信公众号授权登录实例

    uni-app 对FastAdmin微信公众号授权登录实例 uniapp 微信公众号授权登录代码 跳转获取code 提交fastadmin 第三方登录插件 进行登录验证 存储token onLoad( ...

  7. RuoYi-App移动版(uni-app)微信公众号授权登录

    前言 略 uni-app 未提供微信公众号授权登录 uni.login是一个客户端API,统一封装了各个平台的各种常见的登录方式,包括App手机号一键登陆.三方登录(微信.微博.QQ.Apple.go ...

  8. Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息

    引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...

  9. 基于Spring Boo微信公众号授权登录获取用户信息(附带完整源码)

    简介 微信公众号开发中,必不少可少的一环:公众号授权登录.获取微信用户信息. 本地完整运行环境准备 内网渗透=>生成本地指定端口映射的外网域名 传送门:内网渗透工具Natapp使用详解 域名生成 ...

  10. uniapp微信公众号授权登录,本地调试

    在项目如何集中微信公众号授权登录 后端跳转获取code码,最后拼接, //保留登录前的页面参数.为了不让参数传到后台,并且在微信授权链接带来带去,可以将参数和登录前的地址存到本地缓存let route ...

最新文章

  1. RocksDB线程局部缓存
  2. [翻译]No.9352 SharePoint Pages(1)之SharePoint页面体系架构
  3. a*算法的优缺点_轻松理解机器学习算法-朴素贝叶斯
  4. UA SIE545 优化理论基础1 凸分析3 凸集与凸包
  5. 关于Git下载上传项目的操作指令
  6. 5G(10)----5G 终端发展
  7. eclipse maven maven-archetype-webapp 创建失败
  8. java file 实例_Java File类的详解及简单实例
  9. ajax中的一些参数的含义及用法
  10. 新美域杂志新美域杂志社新美域编辑部2022年第6期目录
  11. 区块链从业者地摊致富秘籍
  12. win10命令窗口在哪里
  13. matlab多元方程整数解,matlab多元非线性方程组解法
  14. H5,小程序中实现小红书式排序 瀑布流(横向排序) macy插件实际使用
  15. 恒州诚思——2022-2028全球硫酸镱行业调研及趋势分析报告
  16. js实现图片瀑布流布局
  17. 关于rac环境中的alter ext进程名, begin now
  18. netstat -tlun
  19. matlab一直系统函数画脉冲响应,Matlab 相关分析法求系统脉冲响应(三)
  20. 那些年,我们一起追过的Code......

热门文章

  1. 在达梦数据库下创建数据库
  2. SAP License:ERP系统和OA系统的区别?
  3. 计算机及软件工程专业基础综合,2019年东华大学854计算机及软件工程专业基础综合考研初试大纲...
  4. 计算机教师计算机网络面试题,初中信息技术教师资格面试真题及答案:IP地址...
  5. 面对疫情,大学生如何保持良好的心理状态
  6. lenovo启动热键_联想的u盘启动快捷键是什么_电脑开机如何进入u盘启动
  7. WebView下载文件
  8. Xshell远程连接服务器
  9. word图片另存为变黑色_五种方法可将Word文档转换成图片文件
  10. python控制电脑休眠唤醒键_使用Python实现Wake On Lan远程开机功能