美文网首页
微信网页授权

微信网页授权

作者: Zn_go | 来源:发表于2019-08-02 11:01 被阅读0次

    微信网页授权文档地址:

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

    微信网页授权步骤:
    一、用户同意授权,获取code

    注:公众号需要有授权作用域

    url=https://open.weixin.qq.com/connect/oauth2/authorize?appid=公众号唯一标识&redirect_uri=回调地址&response_type=code&scope=授权作用域&state=STATE#wechat_redirect
    
    参数解释

    授权流程:
    1.用户点击公众号菜单
    调用链接url,用户在同意授权之后,回调地址将会拿到code
    注:每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
    2.将code发送至第三方网页服务器(就是我们开发服务器的后端接口)

    二、通过code,获取openid,获取用户基本信息

    url=https://api.weixin.qq.com/sns/oauth2/access_token?appid=公众号唯一标识&secret=公众号的appsecret&code=第一步拿到的code&grant_type=authorization_code
    

    后端拿到code之后,使用Spring RestTemplate类 进行请求
    注:对于RestTemplate类的使用方法,请查看:
    https://docs.spring.io/spring/docs/5.1.8.RELEASE/javadoc-api/

    服务器后端处理code

    // 注意替换appid、appsecret与code
    String tokenURL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=公众号唯一标识&secret=公众号的appsecret&code=第一步拿到的code&grant_type=authorization_code";
    // 实例化RestTemplate对象
    RestTemplate restTemplate = new RestTemplate();
    // 调用RestTemplate对象的getForObject()方法,执行url请求,获得相应结果
    String tokenResponse = restTemplate.getForObject(tokenURL, String.class);
    

    请求结果详解:

    // 请求结果样例(请求正确,将返回一个json字符串)
    {
        "access_token":"ACCESS_TOKEN",
        "expires_in":7200,
        "refresh_token":"REFRESH_TOKEN",
        "openid":"OPENID",
        "scope":"SCOPE" 
     }
    
    请求结果参数

    此时拿到了access_token,可以进行用户信息的拉取

    url=https://api.weixin.qq.com/sns/userinfo?access_token=获取的access_token&openid=获取的openid&lang=zh_CN
    

    服务器后端请求获取用户信息

    // 注意替换参数
    String userinfoURL = "https://api.weixin.qq.com/sns/userinfo?access_token=获取的access_token&openid=获取的openid&lang=zh_CN";
    // 调用RestTemplate对象的getForObject()方法,执行url请求,获得相应结果
    String userinfoResponse = restTemplate.getForObject(userinfoURL, String.class);
    

    请求结果详解:

    // 请求结果样例(请求正确,将返回一个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"
    }
    
    请求结果参数

    注:在获取用户信息的时候,微信使用ISO-8859-1编码,需要进行编码转化

    // 注userinfoJson是将请求结果转化为JSONObject
    String nickname = new String(userinfoJson.getString("nickname").getBytes("ISO-8859-1"), "UTF-8");
    

    到此,网页授权结束

    相关文章

      网友评论

          本文标题:微信网页授权

          本文链接:https://www.haomeiwen.com/subject/moskdctx.html