微信授权登录流程以及公众号配置方法(golang后端)
一、准备一个已经认证OK的微信公众号和已经备案的域名,且解析好配置好https证书。
1.如上图 微信公众号 > 基本配置 ,设置开发者密码
2.设置IP白名单,白名单填写提供后端服务的服务器公网IP
二、公众号服务器配置。
1.找到基本配置
2.将服务器url填写为你备案的域名,关于URL请求超时
和token验证失败
,可以到下面的文章中查看解决方法。
解决方法传送门
三、设置jsapi安全域名、授权域名、业务域名。
1.如图找到 公众号设置>功能设置
2.三个参数都设置为域名
四、在后端设置一个路由返回微信的登录url
// AuthLogin @Title 授权URL
// @router /authLogin [post,get]
func (u *UserController) AuthLogin() {url := "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + baseUrl + "&response_type=code&scope=snsapi_userinfo&state=200#wechat_redirect"u.Success(0, url, "成功")
}
注释:
baseUrl为H5中授权成功返回的页面。
五、在网页H5中,打开第四步后端返回的链接进行微信授权,并且保存好微信授权返回的code参数;
1.首先获取授权的URL,然后直接跳转这个URL;
authLogin(){uni.$u.http.get("/user/authLogin").then(response=>{console.log(response)if (response.code === 0){window.location.href = response.data}else{}})}
2.用户点击我同意
之后,便会携带code
以及state
等参数跳转回uni-app的一个页面中,在onload事件里面触发,判断code
不为空,则调用第3步的后台接口,获取用户的资料信息。
oauthLogin() {this.loading = trueuni.$u.http.get(`/user/oAuthToken?code=${this.code}`).then(response => {if (response.code === 0) {this.$store.commit('user/token', response.data)uni.navigateTo({url: "/pages/serve"})} else {this.$store.commit('user/token', "")}this.loading = false})
},
onLoad: function(option) {if (option['state'] !== undefined && Number(option.state) === 200 && option['code'] !== undefined) {this.code = option['code']this.oauthLogin()} else {this.loading = falsethis.$wx.initJssdk()}this.loadmore()},
3.后端获取微信用户信息的接口如下,这里要先用code获取accessToken和openid,然后再用accessToken以及openid拿到用户信息,最后做一个缓存,避免重复获取。
// OAuthToken @Title OAuth获取用户信息
// @router /oAuthToken [post,get]
func (u *UserController) OAuthToken() {errRes := oAuthErrRes{}successRes := oAuthRes{}successInfoRes := oAuthInfoRes{}authorization := u.GetString("code", "")u.hasLogin = falseif u.hasLogin == false {url := "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + secret + "&code=" + authorization + "&grant_type=authorization_code"res, err := common.PostReq(url, "")logs.Error(res)err = json.Unmarshal([]byte(res), &errRes)err = json.Unmarshal([]byte(res), &successRes)if err != nil {u.Error(400, "请求错误")}if errRes.Errcode > 0 {u.Error(400, errRes.Errmsg)}url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + successRes.AccessToken + "&openid=" + successRes.Openid + "&lang=zh_CN"res, err = common.PostReq(url, "")logs.Error(res)err = json.Unmarshal([]byte(res), &errRes)err = json.Unmarshal([]byte(res), &successInfoRes)if err != nil {u.Error(400, "请求错误")}if errRes.Errcode > 0 {if u.hasLogin == true {_ = u.ac.Delete(u.token)_ = u.ac.Delete(u.token + "-info")}}_ = u.SetSession("access_token", successRes.AccessToken)_ = u.SetSession("openid", successRes.Openid)m := models.Member{NickName: successInfoRes.Nickname,Phone: 0,Sex: successInfoRes.Sex,LoginType: 1,HeadImgUrl: successInfoRes.Headimgurl,OpenId: successInfoRes.Openid,UnionId: successInfoRes.Unionid,AccessToken: successRes.AccessToken,Location: successInfoRes.Country + " " + successInfoRes.Province + " " + successInfoRes.City,}_ = m.Add()} else {successRes = u.authRessuccessInfoRes = u.infoReslogs.Error("登录缓存信息", successInfoRes)}token := common.GetToken()if u.hasLogin == true {token = u.token}data, _ := json.Marshal(successRes)_ = u.ac.Put(token, string(data), 28*60*60*time.Second)data, _ = json.Marshal(successInfoRes)_ = u.ac.Put(token+"-info", string(data), 28*60*60*time.Second)u.Success(0, token, "请求成功")
}
六、在第五步中,已经将获取到的用户信息保存在cache中,对应的key则是接口中返回的token,之后网页中其它接口,就可以直接拿cache中保存的用户信息,至此微信授权登录流程已经走完。
实际上对接并不难,就是要配置这配置那,哪一步没配置好,就导致出错。
相关文章:
微信授权登录流程以及公众号配置方法(golang后端)
一、准备一个已经认证OK的微信公众号和已经备案的域名,且解析好配置好https证书。 1.如上图 微信公众号 > 基本配置 ,设置开发者密码 2.设置IP白名单,白名单填写提供后端服务的服务器公网IP 二、公众号服务器配置。 1.找到基本配置 2.将服…...
【软件测试面试题】大厂头条:如何定位bug?实际案例拿offer还不简单......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 问题: 用…...
kubeconfig生成最高权限的token
参考文档 1.https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authentication/ 2. https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/ 操作流程 生成kubernetes集群最高权限admin用户的token admin-role.yaml kind: ClusterRoleBindin…...
Android 9.0 蓝牙去掉传输文件的功能
1.概述 在9.0的系统rom定制化产品开发中,在原生系统中蓝牙这块的功能也是非常重要的,所以在对蓝牙功能开发过程中,对功能的定制要求也多,在蓝牙的开发需求中,功能要求 也是越来越多的,产品需要要求在蓝牙文件传输过程中,进行限制就是不让蓝牙传输文件,所以要求在开始传…...
C语言指针易错点—字符数组与字符指针
C语言指针易错点—字符数组与字符指针字符数组与字符指针的区别字符数组与字符指针的区别举例字符指针必须先赋值,后引用字符数组与字符指针的区别 因为字符数组与字符指针都可以表示字符串,但他们不是等价的。下面就来讲讲他们的区别。 char sa[ ] &…...
Yolov3,v4,v5区别
网络区别就不说了,ipad笔记记录了,这里只说其他的区别1 输入区别1.1 yolov3没什么特别的数据增强方式1.2 yolov4Mosaic数据增强Yolov4中使用的Mosaic是参考2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,…...
基于Appium+WinAppDriver+Python的winUI3应用的自动化框架搭建分享(一)环境配置
安装WinAppDriver下载并安装WinAppDriver:来源 https://github.com/Microsoft/WinAppDriver/releases开启电脑的开发者模式设置-隐私和安全性-开发者选项-开发人员模式安装Appium安装Appium Server Gui https://github.com/appium/appium-desktop/releases安装Appium Inspector…...
使用docker安装RocketMQ
文章目录1.创建namesrv服务拉取镜像创建namesrv数据存储路径构建namesrv容器2.创建broker节点创建broker数据存储路径创建配置文件构建broker容器3.创建rockermq-console服务拉取镜像构建rockermq-console容器需要关闭防火墙或者开放namesrv和broker端口关闭防火墙开放指定端口…...
【FPGA仿真】Matlab生成二进制、十六进制的txt数据以及Vivado读取二进制、十六进制数据并将结果以txt格式保存
Matlab 生成二进制、十六进制数据 在使用Vivado软件进行Verilog程序仿真时可能需要对模块输入仿真的数据,因此我们需要一个产生数据的方法(二进制或者十六进制的数据),Matlab软件是一个很好的工具,当然你也可以使用VS…...
【第四章 IOC操作bean管理(基于注解方式创建对象,注入属性),完全注解开发】
第四章 IOC操作bean管理(基于注解方式创建对象,注入属性),完全注解开发 1.IOC操作bean管理(基于注解方式) (1)什么是注解: ①注解是代码特殊标记,格式&#…...
【手把手一起学习】(六) Altium Designer 20 STM32核心板Demo----PCB设计
1 PCB设计 PCB设计是制作STM32核心板的关键步骤,其关系到最终生产厂家制作的电路板能否正常使用,PCB设计包括布局,裁板,布线,覆铜,DRC检查等,其中要求、细节、技巧比较多,以后会更详…...
【蓝桥杯集训·周赛】AcWing 第92场周赛
文章目录第一题 AcWing 4864. 多边形一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第二题 AcWing 4865. 有效类型一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第三题 AcWing 4866. 最大数量一、题目1、原…...
编程参考 - GCC中的Basic ASM
asm关键字允许你在C代码中嵌入汇编程序指令。GCC提供两种形式的内联asm语句。一种是基本asm语句,是没有操作数的语句(见基本asm),而另一种扩展asm语句(见扩展asm)包括一个或多个操作数。在函数内部混合使用…...
软考中级-操作系统
1 操作系统地位计算机系统由硬件和软件组成,未配置软件的称为裸机,但这会导致效率低下。操作系统是为弥补用户与硬件之间的鸿沟的一种系统软件,汇编、编译、解释、数据库管理系统等系统软件和其他应用软件都在此基础。2 进程管理又称处理机管…...
MYD-Y6ULL开发笔记
MYD-Y6ULL开发 文章目录MYD-Y6ULL开发一、系统移植1. 核板说明2. 文件系统操作二、应用开发1. 应用自启动2. 应用编译3.系统应用4.网络5.系统参数一、系统移植 1. 核板说明 型号 MYIR-Y6UL Y2 V2-256N 256D-50I烧了固件命令 uuu.exe myd-y6ulx-y2-256n256d-core-base.auto2. 文…...
三天吃透Java虚拟机面试八股文
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…...
Spring Cloud Alibaba全家桶(二)——微服务组件Nacos注册中心
前言 本文为微服务组件Nacos注册中心相关知识,下边将对什么是 Nacos,Nacos注册中心(包括:注册中心演变及其设计思想、核心功能),Nacos Server部署(包括:单机模式、集群模式ÿ…...
命令执行漏洞 | iwebsec
文章目录1 靶场环境2 命令执行漏洞介绍3 靶场练习01-命令执行漏洞02-命令执行漏洞空格绕过03-命令执行漏洞关键命令绕过04-命令执行漏洞通配符绕过05-命令执行漏洞base64编码绕过4 命令执行漏洞危害01-读写系统文件02-执行系统命令03-种植恶意木马04-反弹shellpython反弹shellp…...
2023.02.26 学习周报
文章目录摘要文献阅读1.题目2.摘要3.介绍4.模型4.1 SESSION-PARALLEL MINI-BATCHES4.2 SAMPLING ON THE OUTPUT4.3 RANKING LOSS5.实验5.1 数据集5.2 验证方式5.3 baselines5.4 实验结果6.结论深度学习元胞自动机1.定义2.构成3.特性4.思想5.统计特征流形学习1.降维2.空间3.距离…...
局域网实现PC、Pad、Android互联
文章目录局域网实现PC、Pad、Android互联一、网络邻居1、 Windows 配置1.1 开启共享功能1.2 设置用户1.3 共享文件夹2、 Pad 连接二、 FTP & HTTP1、 电脑配置1.1 HTTP 服务1.2 FTP 服务2、 连接3、 电脑连接 FTP三、 其他方式局域网实现PC、Pad、Android互联 在我们使用多…...
AC自动机
AC自动机 该模型应用场景是什么样的?假如有一篇很长的文章,然后有一个敏感词表单,请从这篇文章里找出包含了哪些敏感词。即便是用KMP进行快速匹配,那也只能每次遍历整篇文章才能找到一种敏感词,KMP只适用于单一子串匹配…...
git入门
目录 1. git简介 1.1 git是什么 1.2 git与svn的区别 2. github 2.1 创建仓库 2.2 删除仓库 2.3 新建文件及文件夹 3. git的基本操作 3.1 配置账户及邮箱 3.2 git文件状态与工作区域 3.3 常用命令 3.4 克隆(clone) 3.5 查看git仓库的状态 3.…...
RK3568编译Android11和目录讲解
文章目录 前言一、下载android11源码二、环境搭建1.增加交换内存三、编译瑞芯微原厂源码四、目录讲解总结前言 本文记录在Ubuntu18.04中编译Android11,只有编译了源码,后面才能进行驱动的开发,有兴趣的小伙伴可以和我一起学习吧! 提示:以下是本篇文章正文内容,下面案例可…...
java泛型学习篇(二)
java泛型学习篇(二) 1 自定义泛型类 1.1 基本语法 Class 类型 <T,R,M...>{ //成员,其中...代表<>括号里面的参数可以有多个ja }1.2 注意点 1.2.1 属性和方法都是可以使用泛型的 T t;//属性使用泛型,合法public T getT() {return t;} //方法使用泛型,合法 publi…...
Java基础
Java基础Java基础一、课前问答二、概述三、Java的历史四、Java的特点五、计算机执行机制以及Java执行机制5.1 计算机的执行机制5.2 Java的执行机制六、常用DOS命令七、第一个Java程序八、包的使用九、编码规范十、注释Java基础 一、课前问答 1、什么是程序 2、什么是语言 3、什…...
骨骼控制(一)——动画动态节点(AnimDynamics)
文章目录一、引言二、骨骼控制三、UE蓝图中提供的骨骼控制节点——AnimDynamics动画蓝图节点1、什么是AnimDynamics动画蓝图节点①使用盒体计算惯性②使用约束来限制移动2、AnimDynamics节点的几种常用例子①单骨骼模拟②骨骼链模拟 <h2 id1>③群魔乱舞(这是错…...
Linux系统下搭建maven环境
文章目录前述从官网下载安装包安装 maven修改maven配置修改环境变量测试前述 安装 maven 环境前,需要先安装 java 环境,如果没有安装 java 环境,可以参考:https://blog.csdn.net/weixin_45583303/article/details/118631855 从官…...
English Learning - L2 语音作业打卡 Day3 2023.2.23 周四
English Learning - L2 语音作业打卡 Day3 2023.2.23 周四💌 发音小贴士:💌 当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音[ ɔ: ]&…...
RK3568平台开发系列讲解(驱动基础篇)GIC v3中断控制器
🚀返回专栏总目录 文章目录 一、什么是GIC二、GIC v3中断类型三、GIC v3基本结构3.1、Distributor3.2、CPU interface简介3.3、Redistributor简介3.4、ITS(Interrupt translation service)4、中断状态和处理流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢ARM多核…...
决策树、随机森林、极端随机树(ERT)
声明:本文仅为个人学习记录所用,参考较多,如有侵权,联系删除 决策树 通俗来说,决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话: 女儿&#x…...
武汉吧 百度贴吧/结构优化
可能有所经验的老鸟都知道,反射有两种用法:使用TypeDescriptor(包括PropertyDescriptor等)或者Type(包括PropertyInfo等MemberInfo)。但是我相信绝大多数童鞋们都很疑惑,微软为什么要整出两种反…...
在微信网站上做的微信名片是真的吗/搜索引擎营销简称
最近项目中考虑使用阿里大鱼的sms短信发送服务,不过,在找到阿里大鱼php sdk的 时候,尼玛,问题来了!我就想用个短信而已啊。。。。竟然给我打包了好多 什么httpdns 什么kfcsearch 什么area ?至于么? 至于么…...
望野诗/上海优化网站方法
参考文章https://access.redhat.com/articles/524353 在一个xshell中执行dd命令: time dd if/dev/zero oftest bs100M count256 convfdatasync 在另一个xshell中执行"iotop -tbo -d 1"以获得占用IO比较高的进程信息 [rootabc ~]# iotop -tbo -d 1…...
什么网站有做册子版/学生没钱怎么开网店
创业公司怎样才能被大公司收购?对于一家创业公司来说,虽然自己坚持下去也是个不错的选择,不过要是被像苹果或Google这样最具价值的公司收购,那将是一件无比激动人心的事,那怎么做才能受到它们的青睐,吸引它…...
网站的虚拟人怎么做的/百度seo如何快速排名
2.10 CS和IP(1)CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器,从名称上我们可以看出它们和指令的关系。在8086PC机中,任意时刻,设CS中的内容为&#…...
奉贤做网站/免费发布产品信息的网站
Scratch青少儿编程课堂分享丰富的编程案例发布最新的编程资讯这个世界上,总有人爱你如生命,但母亲爱你,远胜生命。关于母亲节,想必大家并不陌生,每年5月的第二个周日就是母亲节。那么,这个节你要怎么过呢&a…...