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



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