zoukankan      html  css  js  c++  java
  • 微信网页授权

    背景

    用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

    配置

    1. 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

    2. 授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.comhttp://music.qq.comhttp://qq.com无法进行OAuth2.0鉴权

    两种授权方式

    微信提供了两种授权方式来应对不同的使用场景。通过网页授权作用域 scope 参数控制。

    静默授权

    1. 静默授权:用户进入页面后自动授权并跳转回页面,这种授权对用户无感知。通过这种授权我们只能获取到用户的 openid,无法获得用户的其他信息。
    2. 使用场景:只需要标识该用户,而不需要收集其他信息的场景都可以使用。比如投票、点赞等场景。
    3. scope: snsapi_base

    主动授权

    1. 主动授权:用户进入页面后会有授权弹窗,需要手动同意。该方试用来获取用户的基本信息
    2. 注意:对于已关注公众号的用户,用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope: snsapi_userinfo,也是静默授权,用户无感知。
    3. scope: snsapi_userinfo

    具体流程

    1. 用户进入页面,获取 code
    2. 通过 code 换取网页授权 access_tokenopenid,静默授权到这步结束
    3. 通过 access_token 获取用户信息

    获取CODE

    引导用户跳传至该链接

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

    用户同意授权或静默授权后将跳转至 redirect_url?code=CODE&state=STATE 这个地址并带上生成的 code

    code 作为换取access_token的票据,只能使用一次,5分钟未使用自动过期。

    参数说明

    通过 code 换取网页授权 access_token

    注意,这里的 access_token调用公众平台API所需的基础 access_token不是一个东东,只是名字一样而已。

    这一步是在服务端完成的,需要公众号的 secretaccess_token 也不可以传给客户端。

    请求接口

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    返回

    { 
      "access_token":"ACCESS_TOKEN",
      "expires_in":7200,
      "refresh_token":"REFRESH_TOKEN",
      "openid":"OPENID",
      "scope":"SCOPE" 
    }
    

    拉取用户信息(需scope为snsapi_userinfo)

    当网页授权作用域为 snsapi_userinfo时,开发者通过 access_tokenopenid 获取用户信息。

    请求接口

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

    返回

    {    
      "openid": "OPENID",
      "nickname": "NICKNAME",
      "sex": "1",
      "province": "PROVINCE"
      "city": "CITY",
      "country": "COUNTRY",
      "headimgurl":    "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
      "privilege": [ "PRIVILEGE1" "PRIVILEGE2"     ],
      "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
    }
    

    参考资料

    微信网页授权官方文档

    文章首发:https://www.jianshu.com/u/13cd86311525

  • 相关阅读:
    NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE
    SOL_SOCKET, SO_KEEPALIVE
    荣幸的一天
    值得思考的一些东西
    一个flash前后台开源框架的的站点
    30个AS3开源项目
    [算法] doj 1066 最长上升子序列
    [算法] doj 1605 Common Subsequence 公共子序列
    华为EC321CDMA PCMICA 无线网卡Ubuntu下使用
    my_judged.cc 的初稿
  • 原文地址:https://www.cnblogs.com/chaohangz/p/9982892.html
Copyright © 2011-2022 走看看