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


    链接: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 "}
  • 相关阅读:
    前端错误监控
    MeasureSpec内容
    java异常
    JAVA线程的xiao习:线程池 线程同步 线程间通讯 =》进程间通信
    四大组件的context的研究
    初遇Java StringBuffer 和 StringBuilder 类&&利用 StringBuilder 给TextView实现换行处理
    AlertDialog 的context 不能是application的context
    BroadCast用法以及notification用法
    安卓 ContentProvider
    远程service的使用思路
  • 原文地址:https://www.cnblogs.com/mark5/p/11393470.html
Copyright © 2020-2023  润新知