微信公众平台开发:通过全局Access Token获得用户基本信息的几种方式
https://www.cnblogs.com/kenshinobiy/p/5376297.html2、通过OAuth2.0方式弹出授权页面获得用户基本信息 (用授权Access Token)
3、通过OAuth2.0方式不弹出授权页面获得用户基本信息 (用全局Access Token)
通过OAuth2.0方式弹出授权页面(不弹出授权页面)获得用户基本信息(公众号支付的时候用于获取openID)
【定义】授权回调页面域名:用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。
此处只需要配置授权访问的域名就ok了,这里我配置的是http://paycentertest.emaxcard.com/emax-paycenter-web
注意:要保证域名可访问,并且要把MP_verify_****.txt放到站点相应的目录下(应用(webapp)的根目录下就可以),否则点击“确认”按钮会提示的。
https://open.weixin.qq.com/connect/oauth2/authorize? appid=wxd79d42656279ce9a&redirect_uri=http://paycentertest.emaxcard.com/emax-paycenter-web/pay/jsapi?tokenId=1559915356166726,33,11& response_type=code&scope=snsapi_userinfo&state=state&connect_redirect=1#wechat_redirect
scope=snsapi_userinfo 表示应用授权作用域为请求用户信息
scope=snsapi_base 表示应用授权作用域为 不弹出授权页面,直接跳转,只获取用户openid
★ connect_redirect=1 如果没有有这个参数微信会重定向到return_url两回
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://mascot.duapp.com/oauth2.php?userid=oc7tbuPA9BgUCLADib5nB3k2KWWg&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
如果scope=snsapi_base 则不会跳出下面授权页面
③ 回调页面得到链接如下,回调url中将包含参数code
http://paycentertest.emaxcard.com/emax-paycenter-web/pay/jsapi?tokenId=1559915356166726,33,11&code=0613yGze0xJELz1pFkye016Lze03yGzb&state=state 或者 http://paycentertest.emaxcard.com/emax-paycenter-web/pay/jsapi?tokenId=1559915356166726,33,11&userid=oc7tbuPA9BgUCLADib5nB3k2KWWg&code=0613yGze0xJELz1pFkye016Lze03yGzb&state=state
④再使用code获取oauth2的授权access_token url如下
https://api.weixin.qq.com/sns/oauth2/access_token? appid=wx8888888888888888&secret=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&code=00b788e3b42043c8459a57a8d8ab5d9f&grant_type=authorization_code
获得授权Access Token 和 openId: (公众号支付到此获得poenid即可,特殊需求再做特殊处理即可)
{ "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw", "expires_in": 7200, "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A", "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc", "scope": "snsapi_userinfo," }
⑤再使用授权Access Token获取用户信息 url如下
https://api.weixin.qq.com/sns/userinfo?access_token=OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw&openid=oLVPpjqs9BhvzwPj5A-vTYAX3GLc
返回如下
{ "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc", "nickname": "刺猬宝宝", "sex": 1, "language": "zh_CN", "city": "深圳", "province": "广东", "country": "中国", "headimgurl": "http://wx.qlogo.cn/mmopen/utpKYf69VAbCRDRlbUsPsdQN38DoibCkrU6SAMCSNx558eTaLVM8PyM6jlEGzOrH67hyZibIZPXu4BK1XNWzSXB3Cs4qpBBg18/0", "privilege": [] }
获取code时两次重定向的问题
当通过上述步骤②用来获取code的时候 会有微信两次 重定向到 return_url的情况,后来发现是构建获取code的url时其中一个参数在搞鬼,刚开始没有connect_redirect=1这个参数,后来加上就可以了就可以了
https://open.weixin.qq.com/connect/oauth2/authorize? appid=wxd79d42656279ce9a&redirect_uri=http://paycentertest.emaxcard.com/emax-paycenter-web/pay/jsapi?tokenId=1559915356166726,33,11& response_type=code&scope=snsapi_userinfo&state=state&connect_redirect=1#wechat_redirect
官方网站:http://oauth.net/ http://oauth.net/2/
权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web,mobile and desktop applications.
OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth 2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
新浪微博API目前也使用OAuth 2.0。
二、微信公众平台OAuth2.0授权
微信公众平台OAuth2.0授权详细步骤如下:
1. 用户关注微信公众账号。
2. 微信公众账号提供用户请求授权页面URL。
3. 用户点击授权页面URL,将向服务器发起请求
4. 服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无此步骤)
5. 用户同意(scope为snsapi_base时无此步骤)
6. 服务器将CODE通过回调传给微信公众账号
7. 微信公众账号获得CODE
8. 微信公众账号通过CODE向服务器请求Access Token
9. 服务器返回Access Token和OpenID给微信公众账号
10. 微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)
11. 服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)