• js微信--微信授权登录(OAuth2.0)


    最近因为疫情,工作延期中,不想每天浪费时间,正好趁休息,整理一下工作中用的一下东西。

    年前有个项目需要在微信中授权获取用户基本信息

    微信授权使用的是OAuth2.0授权的方式。主要有以下步骤

      第一步:用户同意授权,获取code

      第二步:通过code换取网页授权access_token

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

      第四步:拉取用户信息(需scope为 snsapi_userinfo)

    请求授权页面的构造方式

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

     参数说明

    参数

    必须

    说明

    appid

    公众号的唯一标识(这个就是我们申请的)

    redirect_uri

    授权后重定向的回调链接地址(我们前面申请的)

    response_type

    返回类型,请填写code

    scope

    应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)

    state

    重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节,该值会被微信原样返回,我们可以将其进行比对,防止别人的攻击。

    #wechat_redirect

    直接在微信打开链接,可以不填此参数。做页面302重定向时候,必须带此参数

    应用授权作用域:由于snsapi_base只能获取到openid,意义不大,所以我们使用snsapi_userinfo。

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

    这个需要发到微信中,使用微信浏览器才能打开。

     code说明 :

    code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
    使用code换取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

    只有获取code的链接必须是在微信客户端中点开的,获取access_token和用户信息可以直接在网页打开即可。

    通过access_token、openid获取用户信息 :

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
    得到的json格式数据如下:

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

    注意:用户(即openid)关注了公众号后,才能调用成功

     
    摘:https://www.cnblogs.com/sunshq/p/5132811.html
  • 相关阅读:
    ccc pool
    ccc 模拟重力 正太分布
    ccc 正态分布
    ccc this 指针
    基本语法HelloWorld
    css选择器
    css基本语法
    表单
    表格
    超链接
  • 原文地址:https://www.cnblogs.com/Super-scarlett/p/12266108.html
Copyright © 2020-2023  润新知