h5微信接入授权登录

  • 微信提供给开发者的测试账号平台
    • https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
  • 微信网页开发文档
    • https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
  • 微信JS接口签名校验工具
    • https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
  • 参数
  https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    • code
      • code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未使用自动过期
      • 存在:已授权
      • 不存在:未授权,则跳转微信授权链接,
    • appid(必填)
      • 公众号的唯一标识
    • redirect_url(必填)
      • 授权成功后跳转的地址,微信会跳转到改链接,并通过?的形式拼接code,请使用urlEncode对链接进行处理
    • response_type(必填)
      • 返回类型,请填写code
    • scope(必填)
      • 应用授权作用域
        • 静默授权(scope=snsapi_base):不弹出授权页面,直接跳转,只能获取用户openid
        • 非静默授权(scope=snsapi_userinfo):弹出授权页面,可通过openid拿到昵称、性别、所在地,即使在未关注的情况下,只要用户授权,也能获取其信息。
    • state
      • 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
    • #wechat_redirect(必填)
      • 无论直接打开还是做页面302重定向时,必须带此参数
    • 提示
      • 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

      • 由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问。

      • 跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。

  • 步骤
    • 用户同意授权,获取code
    • 通过code换区网页授权access_token
      • 获取access_token
        • https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
        • 
          

             参数

          • appid(必填,同上)
          • secret(必填)
            • 公众号的appsecret
          • code(必填)
            • 填写第一步获取的code参数
          • grant_type(必填)
            • 填写为authorization_code
      •  正确返回的json数据包
        {
          "access_token":"ACCESS_TOKEN",
          "expires_in":7200,
          "refresh_token":"REFRESH_TOKEN",
          "openid":"OPENID",
          "scope":"SCOPE" 
        }

        • 参数
          • access_toke
            • 网页授权接口调用凭证:此access_token与基础支持的access_token不同
          • expires_in
            • 调用凭证超时时间,单位(秒)
          • refresh_token
            • 用户刷新access_token
          • openid
            • 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的页面,也会产生一个用户和公众号唯一的OpenId
          • scope
            • 用户授权的作用于,使用逗号(,)分隔
      •  错误返回的json数据包
        {"errcode":40029,"errmsg":"invalid code"}

      •  
    • 刷新access_token(如果需要)
    • 拉去用户信息(需要scope为snsapi_userinfo)
    • 附:检验授权凭证(access_token)是否有效