h5微信接入授权登录

  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(如果需要)
      • 较短有效期,当超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效后,需要用户重新授权
      • 请求
           https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
        • 参数
          • appid(必填,同上)
          • grant_type(必填)
            • 填写为refresh_token
          • refresh_token(必填)
            • 填写通过access_token获取到的refresh_token参数
        • 正确返回的json数据包
          { 
            "access_token":"ACCESS_TOKEN",
            "expires_in":7200,
            "refresh_token":"REFRESH_TOKEN",
            "openid":"OPENID",
            "scope":"SCOPE" 
          }
          • 参数(参数介绍,同上)
        • 错误返回的json数据包
          {"errcode":40029,"errmsg":"invalid code"}
    • 拉去用户信息(需要scope为snsapi_userinfo)

 

        https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
      • 参数
        • aceess_token(同上)
        • openid(同上)
        • lang
          • 返回国家地区语言版本,zh_CN简体,zh_TW繁体,en英语
      • 正确返回的json数据包
        {   
          "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"
        }
        • 参数
          • openid(同上)
          • nickname
            • 用户昵称
          • sex
            • 用户性别,1=>男,2=>女,0=>未知
          • province
            • 用户个人资料填写的省份
          • city
            • 普通用户个人资料填写的城市
          • country
            • 国家,如中国为CN
          • headimgurl
            • 用户头像
          • privilege
            • 用户特权信息
          • unionid
            • 只有在用户将公众号绑定到微信开放平台后,才会出现该字段
      • 错误返回的json数据包
        {"errcode":40003,"errmsg":" invalid openid "}
  • 附:检验授权凭证(access_token)是否有效
    https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
    • 参数
      • access_token(同上)
      • openid(同上)
    • 正确返回的json数据包
      { "errcode":0,"errmsg":"ok"}
    • 错误返回的json数据包
      { "errcode":40003,"errmsg":"invalid openid"}

 

原文地址:https://www.cnblogs.com/fatRabbit-/p/12144031.html