微信公众号开发中,获取用户资料的两种方式

微信公众号的开发主要是在服务号环境下进行,订阅号是拿不到用户的资料的,因此,下文的讨论都基于微信服务号。

微信公众号的两个access_token

在微信的开发文档中,存在两个access_token,需要对它们加以区别。为了区分这两个token,我把它们重新命名为core_token和user_token。

core_token就是微信公众号自己的access token,是你拥有的微信公众号作为众多公众号中的一个,向微信服务器申请的唯一凭证。这个token只需要你使用公众号的appid和appsceret就可以拿到了,文档在这里。但是注意,这个token的有效期只有7200秒,也就是说,微信会认为你很少用到这个token,而且它的安全级别也比较高,所以有效期比较短,每天能够申请该token的次数也被限制了。当然,微信也做了建议,如果你确实需要经常使用,那么在你的服务器上面保存它,这样避免反复的调用上面那篇文档里面的接口,消耗掉你的接口请求次数。但是有效期怎么办呢?在你的服务器上面跑一个定时任务,每隔一段时间就去检查一下这个token产生的时间与当前时间的差值,如果小于7200秒,说明还在有效期范围内,还可以继续使用,否则,就去申请一个新的替换掉老的。

core_token具体都有哪些用呢?比如创建自定义菜单接口、客服消息接口、素材管理等等。这里面还包括用户管理接口,这里先不表,它和我们下面所提到的用户接口有区别。总之,core_token是作为一个独立的公众号(把它当做一个用户)向微信进行操作,上传、修改、删除属于公众号自己的内容的凭证。

user_token就是用户自己的access token。公众号和用户是两种不同的对象,如果在没有core_token的情况下,开发过微博、QQ等开放平台的开发者应该都能理解这个access token的作用。也就是说,你拿到了这个token,那么你就可以操作用户,比如在微博开放平台,可以用这个token在微博帮助用户发微博、关注好友、删除好友等等。而在微信里面,这个access token仅能实现获取用户相关信息,而且其实它不属于公众号的范畴,而是属于网页授权Oauth2.0的范畴。也就是说,这个token不需要用户关注公众号,也可以通过Oauth2.0授权后获取(需要点击一个授权按钮)。它其实跟微信公众号一点关系都扯不上。

知道了这个关系,我们就可以知道,在微信里面要获取用户的昵称等信息,有两种途径,一种是依靠core_token,一种是依靠user_token,到底应该用哪一种呢?

使用公众号的access_token获取用户信息

如果你要求你的用户必须关注公众号(服务号)才能使用你提供的功能,那请选择这种方式。而且这种方式可以实现用户无需点击授权按钮,只需要经过几个跳转,就可以安静的进入你的系统。当然,缺点就是access token的每日获取次数有上限,没有安排好的小白开发者会导致这个access token获取次数用光。

好了,接下来我们进入开发阶段。现在你并不知道你的用户是否已经关注了你的公众号,你在你的网页上放置了一个按钮,用于登录网站,你希望实现如下逻辑:

if(用户关注了你的公众号,而且之前用公众号登录过你的系统) 直接登录;else if(用户关注了你的公众号,但是并没有在你的系统中注册成为用户) 用户登录,同时自动为他创建用户信息;else if(用户没有关注你的公众号) 要求用户必须关注;

1. 获取access token(core token)

首先,你需要获取core token,并且保存在服务器上面,注意,其实很多信息都需要保存在服务器上面,而且不能被任何用户自己拥有。能够公开的信息仅包括:APPID, openid。通过下面这个接口就可以拿到core token:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

只需要替换蓝色字为你自己的公众号的私有信息。在结果中就可以看到你需要的token信息了,注意只有7200秒的有效期。

2. 拿到openid

把你的页面中的登录按钮链接直接设置为:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=URL&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

当然,你需要把上面蓝色的字改为你自己的信息。注意,URL必须是在网页授权的地方填写的域名下的地址。这在我前面的一篇文章讲过了。这个链接的作用是什么呢?是进入网页授权的环节。等一下,我前面不是说了只有user token才跟授权有关系啊,现在我们讨论的是core token,怎么又跟授权扯上关系了?骚年,你不要急。在微信所有的接口中,只有这个接口可以实现在你的网页中点击一个链接而获得openid,只有拿到了openid才能拿到用户的信息。另一种拿到openid的方法,是用户在微信公众号里面,向你发消息,但是这个时候你没法在网页里面用啊。

不过可怜的是,上面这个链接并不能直接拿到openid,而拿到的是一个code,而且是在网页跳转过程中,通过url参数的形式返回。

拿到这个code之后,再请求下面这个接口,才能拿到openid:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

把上面这个URL中的蓝色字替换,其中CODE就是上面那个接口拿到的code。这个时候,才能成功拿到openid。

3. 判断用户是否关注公众号

接下来就是利用上面拿到的access token和openid做事情的时候了。首先来判断用户是否关注公众号,通过下面这个接口:

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

蓝色字就是我们前两步拿到的信息,通过这个接口的结果中的subscribe字段,就可以判断用户是否已经关注了公众号。如果用没有关注,那么该字段掉值为0,关注过了则为1.

4. 获取用户的信息

我们不需要再去请求另外的接口,在第3步的结果中,如果subscribe字段的值为1,那么用户的其它信息会同时显示出来。拿到用户信息了怎么办呢?去你的数据库去查询咯,用openid作为该用户对应的微信信息的字段去查,如果数据库里面有这个用户,说明之前登录过了,如果没有,那注册一个新用户吧。

现在,让这个登录,并且用用户的昵称作为系统内的昵称吧。

使用Oauth2.0授权的access_token获取用户信息

另外一种情况是,你不需要用户关注你的微信公众号,甚至,你根本没有公众号,而只需要用户使用微信登录你的系统。如果你没有公众号,你必须去微信开放平台注册一个应用。从这个角度讲,一个微信公众号其实就是一个应用。一旦你有了一个应用之后,就可以像在开发微博登录网站一样,实现一个微信登录网站的功能。当然,因为微信只有手机端才能授权,因此授权形式上比以往的PC网页授权又稍微复杂一点。不过本文讲述的,都是假设用户在微信浏览器中进行登录的操作,而不是PC网页端。

1. 拿到openid和access_token

和上一节的方法一模一样。而且,其实上一节本来就是用了授权方法拿到的code。但是有一点不一样,上一节的方法中,你发现整个页面没有任何停止,页面跳转了几下就完成了。现在,你必须要求用户点击一个微信官方的授权按钮,就像微博、QQ登录网站一样,要求用户去一个官方授权页面进行授权。

所以,在获取openid的第一步的scope参数和上一节不一样:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=URL&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

其它的就真的是一模一样的。授权完,通过code获得的结果中,同时包含了openid和access_token(user token),还有一个refresh_token,这个我们不讲,请阅读前面一篇《微信服务号用户授权接口》。

2.获取用户信息

我们马上就可以进入获取用户信息的步骤,上一步我们已经拿到了openid和access token,访问下面这个接口:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

这样就拿到了用户的昵称和头像信息。后面的操作也都和上面的一样咯。

总结

这是目前微信提供的两种可以获取微信用户信息的方式,只有这两种,其实我们的主要考虑的问题在于:到底应该用哪种方式?其实在前面的阐述中已经提到过了。

如果你要求你的用户必须关注你的微信公众号,那么只能使用第一种方法。这里面有一个地方可以节省时间。在微信中开启开发者模式后,当用户关注、向公众号发消息、取消关注时,微信服务器都会发一条消息到你指定的服务器上面。而在用户关注你的那一刻,你可以获得该用户的openid,同时,你可以自己去拿到core token,所以,在用户关注你的那一刻,你就可以先在系统中注册好这个用户。当他登录的时候,就无需再去判断是否已经注册过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10959.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信公众号与小程序数据互通

背景 最近做了一个有意思的功能《官网内容订阅》,用户在官网扫码后可以订阅官网栏目,订阅栏目后发送模版消息提醒用户订阅成功,模版消息关联了小程序,然后做了一个小程序来管理用户订阅的栏目,小程序提供订阅和新闻列表…

微信公众号发布消息不消耗群发次数怎么实现

通过微号帮平台工具提供的模板消息群发功能实现,可以不消耗公众号(服务号)每月4次群发次数发布消息,可以给所有粉丝或分组粉丝群发模板信息,模板信息没有图文形式、不支持插入封面图片,模板信息为固定格式的文本模块消息;模板信息…

微信公众号测试号配置,群发消息(go实现)

配置服务器(以本地服务器127.0.0.1:8080为例) ⑴新建项目(这里用的goframe框架) 路由: var (Main gcmd.Command{Name: "main",Usage: "main",Brief: "start http server",Func: fu…

微信公众号测试账号申请,后台获取公众号关注取关事件,获取用户发送消息

目录 1、访问微信公众号平台2、扫码登录3、登录后进行接口信息配置4、完成以上配置和代码,将代码部署到服务器上,后台就可以接收到公众号的关注、取关、用户发送的消息等等事件拉! 1、访问微信公众号平台 微信公众号测试地址 2、扫码登录 …

微信公众号群发模板消息占用每月4次群发次数吗

实现微信公众号群发模板消息不占用每月4次群发次数,微号帮提供了模板消息群发功能实现,可以在线给公众号群发模板消息,模板消息内容可以添加粉丝昵称、换行、自定义文字颜色,通过功能可以实现公众号不占用每月4次群发次数&#xf…

基于chatGPT的问答机器人开发-qdrant向量数据库的集合功能封装

之前一直再开发基于GPT的问答知识库机器人,主要是靠qdrant的向量搜索,搜索出相关的条目,然后发送给GPT回答 qdrant向量数据库有集合的概念,相当于表,每个集合里面可以创建多个向量数据。 那么针对集合的操作就是下面这…

Datawhale-chatGPT开发应用指南:相似匹配

Embedding介绍 相关API LMAS Embedding API chatGPT Style 提prompt embedding应用 用于文本预处理,相似的人,离奇的点等。 相关文献

【回答问题】ChatGPT上线了!如何将Disco Diffusion 部署到GPU云服务器上?

【回答知乎用户长时间没有回答问题】ChatGPT上线了!如何将Disco Diffusion 部署到GPU云服务器上? 若要将 Disco Diffusion 部署到 GPU 云服务器上,您可以按照以下步骤进行: 准备一台 GPU 云服务器,并确保您已经安装了…

ChatGPT,程序员修改bug的神器??

ChatGPT是OpenAI开发的一个大型预训练语言模型,目前尚处于免费测试阶段,它主要以连续对话的形式与人建立交互。 网友们已经把ChatGPT玩出了花,无论大事小事,找ChatGPT问问总不会出错。 当然,作为程序员的我们&#x…

AI将颠覆教育行业:CallAnnie,MyShell,Brisk Teaching

人工智能颠覆教育的速度加快了,最近A在教育上的应用越来越丰富,今天给大家介绍3个非常强大的人工智能教育工具,如果你能掌握其中一个少说也能省下上万块钱的辅导费。 随着ChatGPT的火热,很多AI的工具变得越来越智能化&#xff0c…

抢先微软,Google版Copilot上线!谷歌宣布给Google全家桶开放Bard功能

夕小瑶科技说 原创 作者 | 智商掉了一地、兔子酱 就在本月 5 号,Bard 和 Google Workspace 同步更新了一则新闻,宣布 Workspace 的团队用户即日起可以申请体验由 Bard 大模型驱动的生成式 AI 工具。 这项计划在今年 3 月份首次公布,当时该工具…

国内某巨头电商APP利用Android漏洞细节曝光:内嵌提权代码、动态下发Dex

点击“开发者技术前线”,选择“星标” 让一部分开发者看到未来 来自 | OSC开源社区(ID:oschina2013) 近日,独立安全研究机构 DarkNavy 发表文章披露,国内一家互联网巨头的 APP 利用了 Android 系统漏洞提权使其难以卸载…

领英退出中国,谷歌Bard集成进安卓,陆奇最新演讲,HuggingFace网传遭禁|今日科技圈要闻

夕小瑶科技说 原创 作者 | 智商掉了一地、兔子酱 AI 新闻速递来咯!搬好小板凳,一起了解近期发生了什么新鲜事~ 领英职场退出中国 领英是一个专注于职业发展、招聘和营销等方面的社交平台。Linkdein 官方公众号发布公告称,由于面临日趋激烈…

安卓APP源码和设计报告——仿淘宝购物APP

2021—2022学年第二学期期末考试 《Android手机软件开发》实践考核 项目设计说明书 项目名称: 购物APP的设计与实现 专 业: 计算机科学与技术 学 号: 姓 名: 任课教师: 2022年6月12日 目 录 1.项目概述11 2…

Android Studio最新版 Studio Bot使用

最近由ChatGPT引起的AI热潮已席卷各行各业,其中Google已在Android studio中开发出了类似ChatGPT的工具,可以协助我们编码,大大提高效率。 本文主要讲述如何下载及使用带有Studio Bot功能的版本,以及会遇到的一些坑。 效果图 安装…

Studio Bot - 让 AI 帮我写 Android 代码

Google I/O 2023 不出所料,今年的 I/O 大会只突出了一个关键词 “AI”。Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品 Android Studio 也新增了 Studio bot 功能,希望通过 AI 帮助开发者更轻松地写代码: Studio Bot…

试用国内chatgpt网站的第一天:小镜AI

最近发现了一个国内挺好用的chatgpt网站!不仅可以切换GPT3.5和GPT4,还支持包月和聊天续存。最吸引我的一点是它可以多端使用,不仅可以使用网页,还有小程序!!我一般都是用网页版,听说安卓好像还可…

宝塔+x-ui面板共存,并使用Cloudflare WARP一键脚本解决openai 1020错误代码的问题记录

本文是根据网络上的资料后自行组合整理, 网站面板下载地址:宝塔 x-ui面板项目地址: x-ui Cloudflare WARP一键脚本项目地址: Cloudflare WARP 服务器版本:Ubuntu 22.04 x64 域名托管:cloudflare 宝塔安装 …

LTD推出数字化官网ChatGPT解决方案

​ LTD推出的数字化官网ChatGPT解决方案 致力于提供一套基于数字化官网与ChatGPT的高效AI服务,采用业界领先的生成式AI技术,与数字化官网的业务场景紧密结合,为客户带来丰富的应用体验和实际价值。 在数字化官网的四大能力基础上&#xff0c…

ChatGPT热潮方兴未艾,超级车载或将成为现实

近期,由OpenAI 公司推出的ChatGPT聊天机器人软件突然爆红,再一次掀起了人们对AI技术的狂热追捧。 ChatGPT的本质是一个大型语言预训练模型,但其凭借无所不知、无所不能的AI聊天能力,短短三个月就吸引了超1亿活跃用户,…