微信公众号的开发主要是在服务号环境下进行【本文首发于唐霜的博客】【本文首发于唐霜的博客】,订阅号是拿不到用户的资料的,因此,下文本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】的讨论都基于微信服务号。
【作者:唐霜】本文作者:唐霜,转载请注明出处。微信公众号的两个access_token
在微信的开发文档中,存在两个access著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】_token,需要对它们加以区别。为了区【本文受版权保护】著作权归作者所有,禁止商业用途转载。分这两个token,我把它们重新命名为c转载请注明出处:www.tangshuang.net【转载请注明来源】ore_token和user_token本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net。
【原创不易,请尊重版权】原创内容,盗版必究。core_token就是微信公众号自己的access tok本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。en,是你拥有的微信公众号作为众多公众号本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】中的一个,向微信服务器申请的唯一凭证。这本文作者:唐霜,转载请注明出处。原创内容,盗版必究。个token只需要你使用公众号的appi【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。d和appsceret就可以拿到了,文档本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】在这里。但是注意,这个token的有效期只有7【转载请注明来源】【作者:唐霜】200秒,也就是说,微信会认为你很少用到本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】这个token,而且它的安全级别也比较高【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】,所以有效期比较短,每天能够申请该tok【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。en的次数也被限制了。当然,微信也做了建【未经授权禁止转载】转载请注明出处:www.tangshuang.net议,如果你确实需要经常使用,那么在你的服原创内容,盗版必究。转载请注明出处:www.tangshuang.net务器上面保存它,这样避免反复的调用上面那【未经授权禁止转载】转载请注明出处:www.tangshuang.net篇文档里面的接口,消耗掉你的接口请求次数【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】。但是有效期怎么办呢?在你的服务器上面跑【转载请注明来源】【作者:唐霜】一个定时任务,每隔一段时间就去检查一下这【本文首发于唐霜的博客】【未经授权禁止转载】个token产生的时间与当前时间的差值,【原创不易,请尊重版权】【本文首发于唐霜的博客】如果小于7200秒,说明还在有效期范围内【本文受版权保护】未经授权,禁止复制转载。,还可以继续使用,否则,就去申请一个新的著作权归作者所有,禁止商业用途转载。【本文受版权保护】替换掉老的。
【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。core_token具体都有哪些用呢?比【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】如创建自定义菜单接口、客服消息接口、素材著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。管理等等。这里面还包括用户管理接口,这里本文作者:唐霜,转载请注明出处。【未经授权禁止转载】先不表,它和我们下面所提到的用户接口有区【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】别。总之,core_token是作为一个著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】独立的公众号(把它当做一个用户)向微信进转载请注明出处:www.tangshuang.net【转载请注明来源】行操作,上传、修改、删除属于公众号自己的【本文受版权保护】著作权归作者所有,禁止商业用途转载。内容的凭证。
【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】user_token就是用户自己的access token。【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。公众号和用户是两种不同的对象,如果在没有【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】core_token的情况下,开发过微博【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net、QQ等开放平台的开发者应该都能理解这个【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。access token的作用。也就是说【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net,你拿到了这个token,那么你就可以操【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】作用户,比如在微博开放平台,可以用这个t【版权所有,侵权必究】【原创内容,转载请注明出处】oken在微博帮助用户发微博、关注好友、本文作者:唐霜,转载请注明出处。【未经授权禁止转载】删除好友等等。而在微信里面,这个acce【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。ss token仅能实现获取用户相关信息【原创不易,请尊重版权】【转载请注明来源】,而且其实它不属于公众号的范畴,而是属于本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】网页授权Oauth2.0的范畴。也就是说本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。,这个token不需要用户关注公众号,也未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】可以通过Oauth2.0授权后获取(需要【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】点击一个授权按钮)。它其实跟微信公众号一本文作者:唐霜,转载请注明出处。【作者:唐霜】点关系都扯不上。
原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】知道了这个关系,我们就可以知道,在微信里【本文受版权保护】未经授权,禁止复制转载。面要获取用户的昵称等信息,有两种途径,一【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net种是依靠core_token,一种是依靠本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netuser_token,到底应该用哪一种呢【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net?
【作者:唐霜】【作者:唐霜】【原创不易,请尊重版权】使用公众号的access_token获取用户信息
如果你要求你的用户必须关注公众号(服务号著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。)才能使用你提供的功能,那请选择这种方式【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net。而且这种方式可以实现用户无需点击授权按本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。钮,只需要经过几个跳转,就可以安静的进入著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】你的系统。当然,缺点就是access t【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。oken的每日获取次数有上限,没有安排好【本文首发于唐霜的博客】【原创内容,转载请注明出处】的小白开发者会导致这个access to本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】ken获取次数用光。
著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。【转载请注明来源】好了,接下来我们进入开发阶段。现在你并不【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。知道你的用户是否已经关注了你的公众号,你【作者:唐霜】著作权归作者所有,禁止商业用途转载。在你的网页上放置了一个按钮,用于登录网站转载请注明出处:www.tangshuang.net【转载请注明来源】,你希望实现如下逻辑:
【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】if(用户关注了你的公众号,而且之前用公本文作者:唐霜,转载请注明出处。【作者:唐霜】众号登录过你的系统) 直接登录;else未经授权,禁止复制转载。未经授权,禁止复制转载。 if(用户关注了你的公众号,但是并没有原创内容,盗版必究。【未经授权禁止转载】在你的系统中注册成为用户) 用户登录,同【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】时自动为他创建用户信息;else if(【作者:唐霜】【关注微信公众号:wwwtangshuangnet】用户没有关注你的公众号) 要求用户必须关【作者:唐霜】原创内容,盗版必究。注;
本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net
1. 获取access token(core token)
首先,你需要获取core token,并本文版权归作者所有,未经授权不得转载。【本文受版权保护】且保存在服务器上面,注意,其实很多信息都【版权所有】唐霜 www.tangshuang.net【本文受版权保护】需要保存在服务器上面,而且不能被任何用户【转载请注明来源】【作者:唐霜】自己拥有。能够公开的信息仅包括:APPI【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。D, openid。通过下面这个接口就可【本文首发于唐霜的博客】未经授权,禁止复制转载。以拿到core token:
【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.nethttps://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
只需要替换蓝色字为你自己的公众号的私有信本文作者:唐霜,转载请注明出处。原创内容,盗版必究。息。在结果中就可以看到你需要的token【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】信息了,注意只有7200秒的有效期。
【原创不易,请尊重版权】【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net2. 拿到openid
把你的页面中的登录按钮链接直接设置为:
【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.nethttps://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=URL&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
当然,你需要把上面蓝色的字改为你自己的信【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。息。注意,URL必须是在网页授权的地方填写的著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。域名下的地址。这在我前面的一篇文章讲过了。这个链接的本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。作用是什么呢?是进入网页授权的环节。等一转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。下,我前面不是说了只有user toke【本文受版权保护】【未经授权禁止转载】n才跟授权有关系啊,现在我们讨论的是co未经授权,禁止复制转载。【未经授权禁止转载】re token,怎么又跟授权扯上关系了【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】?骚年,你不要急。在微信所有的接口中,只【原创不易,请尊重版权】【本文首发于唐霜的博客】有这个接口可以实现在你的网页中点击一个链【作者:唐霜】【原创内容,转载请注明出处】接而获得openid,只有拿到了open著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.netid才能拿到用户的信息。另一种拿到ope著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。nid的方法,是用户在微信公众号里面,向本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】你发消息,但是这个时候你没法在网页里面用【本文首发于唐霜的博客】【未经授权禁止转载】啊。
【原创不易,请尊重版权】【原创内容,转载请注明出处】不过可怜的是,上面这个链接并不能直接拿到未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。openid,而拿到的是一个code,而著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。且是在网页跳转过程中,通过url参数的形【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net式返回。
【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。【本文首发于唐霜的博客】拿到这个code之后,再请求下面这个接口转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net,才能拿到openid:
转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
把上面这个URL中的蓝色字替换,其中CO【转载请注明来源】【本文受版权保护】DE就是上面那个接口拿到的code。这个【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net时候,才能成功拿到openid。
未经授权,禁止复制转载。【转载请注明来源】【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】3. 判断用户是否关注公众号
接下来就是利用上面拿到的access t【本文受版权保护】原创内容,盗版必究。oken和openid做事情的时候了。首【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net先来判断用户是否关注公众号,通过下面这个原创内容,盗版必究。转载请注明出处:www.tangshuang.net接口:
著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
蓝色字就是我们前两步拿到的信息,通过这个未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。接口的结果中的subscribe字段,就转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。可以判断用户是否已经关注了公众号。如果用【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。没有关注,那么该字段掉值为0,关注过了则【作者:唐霜】著作权归作者所有,禁止商业用途转载。为1.
【版权所有】唐霜 www.tangshuang.net【作者:唐霜】本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。4. 获取用户的信息
我们不需要再去请求另外的接口,在第3步的【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。结果中,如果subscribe字段的值为未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。1,那么用户的其它信息会同时显示出来。拿著作权归作者所有,禁止商业用途转载。【转载请注明来源】到用户信息了怎么办呢?去你的数据库去查询转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net咯,用openid作为该用户对应的微信信本文作者:唐霜,转载请注明出处。【转载请注明来源】息的字段去查,如果数据库里面有这个用户,【转载请注明来源】【版权所有】唐霜 www.tangshuang.net说明之前登录过了,如果没有,那注册一个新本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】用户吧。
【未经授权禁止转载】【本文首发于唐霜的博客】现在,让这个登录,并且用用户的昵称作为系本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。统内的昵称吧。
【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】使用Oauth2.0授权的access_token获取用户信息
另外一种情况是,你不需要用户关注你的微信【原创不易,请尊重版权】【作者:唐霜】公众号,甚至,你根本没有公众号,而只需要著作权归作者所有,禁止商业用途转载。【本文受版权保护】用户使用微信登录你的系统。如果你没有公众【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。号,你必须去微信开放平台注册一个应用。从【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net这个角度讲,一个微信公众号其实就是一个应转载请注明出处:www.tangshuang.net原创内容,盗版必究。用。一旦你有了一个应用之后,就可以像在开原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】发微博登录网站一样,实现一个微信登录网站著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】的功能。当然,因为微信只有手机端才能授权未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】,因此授权形式上比以往的PC网页授权又稍著作权归作者所有,禁止商业用途转载。【转载请注明来源】微复杂一点。不过本文讲述的,都是假设用户原创内容,盗版必究。【未经授权禁止转载】在微信浏览器中进行登录的操作,而不是PC本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】网页端。
著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】1. 拿到openid和access_token
和上一节的方法一模一样。而且,其实上一节未经授权,禁止复制转载。【原创不易,请尊重版权】本来就是用了授权方法拿到的code。但是【转载请注明来源】【本文受版权保护】有一点不一样,上一节的方法中,你发现整个著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。页面没有任何停止,页面跳转了几下就完成了【原创不易,请尊重版权】原创内容,盗版必究。。现在,你必须要求用户点击一个微信官方的原创内容,盗版必究。【原创内容,转载请注明出处】授权按钮,就像微博、QQ登录网站一样,要【转载请注明来源】原创内容,盗版必究。求用户去一个官方授权页面进行授权。
原创内容,盗版必究。【转载请注明来源】所以,在获取openid的第一步的sco【转载请注明来源】原创内容,盗版必究。pe参数和上一节不一样:
【作者:唐霜】著作权归作者所有,禁止商业用途转载。【转载请注明来源】https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=URL&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
其它的就真的是一模一样的。授权完,通过c【作者:唐霜】【原创内容,转载请注明出处】ode获得的结果中,同时包含了openi【未经授权禁止转载】【原创不易,请尊重版权】d和access_token(user 【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】token),还有一个refresh_t【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。oken,这个我们不讲,请阅读前面一篇《微信服务号用户授权接口》。
【转载请注明来源】【原创内容,转载请注明出处】2.获取用户信息
我们马上就可以进入获取用户信息的步骤,上【作者:唐霜】【转载请注明来源】一步我们已经拿到了openid和acce【作者:唐霜】著作权归作者所有,禁止商业用途转载。ss token,访问下面这个接口:
【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
这样就拿到了用户的昵称和头像信息。后面的【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。操作也都和上面的一样咯。
本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】【原创内容,转载请注明出处】总结
这是目前微信提供的两种可以获取微信用户信【本文首发于唐霜的博客】【转载请注明来源】息的方式,只有这两种,其实我们的主要考虑【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。的问题在于:到底应该用哪种方式?其实在前【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】面的阐述中已经提到过了。
【原创不易,请尊重版权】【原创不易,请尊重版权】未经授权,禁止复制转载。如果你要求你的用户必须关注你的微信公众号【本文首发于唐霜的博客】未经授权,禁止复制转载。,那么只能使用第一种方法。这里面有一个地【作者:唐霜】【访问 www.tangshuang.net 获取更多精彩内容】方可以节省时间。在微信中开启开发者模式后本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】,当用户关注、向公众号发消息、取消关注时【版权所有,侵权必究】【原创内容,转载请注明出处】,微信服务器都会发一条消息到你指定的服务【版权所有,侵权必究】转载请注明出处:www.tangshuang.net器上面。而在用户关注你的那一刻,你可以获本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。得该用户的openid,同时,你可以自己【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。去拿到core token,所以,在用户【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】关注你的那一刻,你就可以先在系统中注册好本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】这个用户。当他登录的时候,就无需再去判断【未经授权禁止转载】【原创内容,转载请注明出处】是否已经注册过。
【版权所有,侵权必究】【作者:唐霜】原创内容,盗版必究。Oauth2.0授权这一块,微信和微博、未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。QQ有很大的区别。用户授权后,第三方只能【版权所有,侵权必究】转载请注明出处:www.tangshuang.net获取用户的信息,而不能对用户进行任何操作本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】(比如在用户的朋友圈儿发消息),因此实际本文作者:唐霜,转载请注明出处。【本文受版权保护】上这个授权没多大用处,所以微信里面也没有【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。任何一个地方可以让用户去取消授权。
【作者:唐霜】未经授权,禁止复制转载。不过微信公众号的第三方却比较危险。什么是【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。微信公众号第三方平台呢?就是你把core【原创不易,请尊重版权】原创内容,盗版必究。 token交给第三方平台,让第三方平台转载请注明出处:www.tangshuang.net【未经授权禁止转载】可以操作你的公众号,甚至给关注公众号的用【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net户发推送消息(需要管理员刷二维码)。但是转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】core token只有7200秒的有效【本文首发于唐霜的博客】原创内容,盗版必究。期怎么办?所以,你必须把APPID和AP【原创不易,请尊重版权】【版权所有,侵权必究】PSECRET都托管在第三方平台上,这样著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。第三方平台可以保持一直连接你的微信公众号本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。。当然,第三方平台有些功能比较好,比如可【未经授权禁止转载】未经授权,禁止复制转载。视化的统计等功能。
【未经授权禁止转载】本文作者:唐霜,转载请注明出处。2016-04-22 51591



还有一个,普通公众号并不能对不关注的用户进行获取信息操作吧,只有服务号可以
不太对欸,我用测试号使用oauth2让不关注的用户打开连接,给的提示是微信登陆失败,必须关注此测试号。
可能这篇文章写的时候的规则跟现在不一样了。现在可能,对于公众号而言,需要关注才可以。