ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

微信支持的Authorization code授权模式(公众号开发)(开放平台资料中心中的代公众号发起网页授权)

2019-08-22 11:55:50  阅读:343  来源: 互联网

标签:code 用户 refresh access 公众 token appid 授权


 

链接:https://blog.csdn.net/ASZJBGD/article/details/82838356

主要流程分为两步:

1.获取code

2.通过code换取accesstoken

流程图:

第一步:请求CODE

请求方法

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(一般而言,已微信认证的服务号拥有snsapi_base和snsapi_userinfo),使用微信客户端打开以下链接(严格按照以下格式,包括顺序和大小写,并请将参数替换为实际内容):

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

若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

参数说明

参数是否必须说明
appid 公众号的appid
redirect_uri 重定向地址,需要urlencode,这里填写的应是服务开发方的回调地址
response_type 填code
scope 授权作用域,拥有多个作用域用逗号(,)分隔
state 重定向后会带上state参数,开发者可以填写任意参数值,最多128字节
component_appid 服务方的appid,在申请创建公众号服务成功后,可在公众号服务详情页找到

返回说明

用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code, state以及appid

redirect_uri?code=CODE&state=STATE&appid=APPID

若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数

redirect_uri?state=STATE

第二步:通过code换取access_token

请求方法

获取第一步的code后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/component/access_token?appid=APPID&code=CODE&grant_type=authorization_code&component_appid=COMPONENT_APPID&component_access_token=COMPONENT_ACCESS_TOKEN

需要注意的是,由于安全方面的考虑,对访问该链接的客户端有IP白名单的要求。

参数说明

参数是否必须说明
appid 公众号的appid
code 填写第一步获取的code参数
grant_type 填authorization_code
component_appid 服务开发方的appid
component_access_token 服务开发方的access_token

返回说明

正确的返回:

  1.   {
  2.   "access_token":"ACCESS_TOKEN",
  3.   "expires_in":7200,
  4.   "refresh_token":"REFRESH_TOKEN",
  5.   "openid":"OPENID",
  6.   "scope":"SCOPE"
  7.   }
参数说明
access_token 接口调用凭证
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔

错误返回样例:

{"errcode":40029,"errmsg":"invalid code"}

第三步:刷新access_token(如果需要)

由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。

请求方法

获取第一步的code后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/component/refresh_token?appid=APPID&grant_type=refresh_token&component_appid=COMPONENT_APPID&component_access_token=COMPONENT_ACCESS_TOKEN&refresh_token=REFRESH_TOKEN

参数说明

参数是否必须说明
appid 公众号的appid
grant_type 填refresh_token
refresh_token 填写通过access_token获取到的refresh_token参数
component_appid 服务开发商的appid
component_access_token 服务开发方的access_token

返回说明

正确的返回:

  1.   {
  2.   "access_token":"ACCESS_TOKEN",
  3.   "expires_in":7200,
  4.   "refresh_token":"REFRESH_TOKEN",
  5.   "openid":"OPENID",
  6.   "scope":"SCOPE"
  7.   }
参数说明
access_token 接口调用凭证
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔

错误返回样例::

{"errcode":40029,"errmsg":"invalid code"}

第四步:通过网页授权access_token获取用户基本信息(需授权作用域为snsapi_userinfo)

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

请求方法

http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

参数说明

参数描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
openid 用户的唯一标识
lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

返回说明

正确时返回的JSON数据包如下:

  1.   {
  2.   "openid":" OPENID",
  3.   " nickname": NICKNAME,
  4.   "sex":"1",
  5.   "province":"PROVINCE"
  6.   "city":"CITY",
  7.   "country":"COUNTRY",
  8.   "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
  9.   "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
  10.   "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
  11.   }
参数描述
openid 用户的唯一标识
nickname 用户昵称
sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
province 用户个人资料填写的省份
city 普通用户个人资料填写的城市
country 国家,如中国为CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见: 获取用户个人信息(UnionID机制

错误时微信会返回JSON数据包如下(示例为openid无效):

{"errcode":40003,"errmsg":" invalid openid "}

标签:code,用户,refresh,access,公众,token,appid,授权
来源: https://www.cnblogs.com/mark5/p/11393470.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有