zoukankan      html  css  js  c++  java
  • Java对接微信登录

    今天我们来对接微信开放平台的网站应用登录

    首先上文档链接:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html

    
    1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
    2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
    3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
     
    文档上说的也很明白
     
    首先我们需要注册一个开放平台的账号

    但是吧很不爽的是需要企业认证花300RMB进行资质认证。

    ----------------------------------------------------------
    ok,我们先来创建一个网站应用
    
    

    根据提示进行填写就行了
    
    
    填写完,状态为已通过就可以开始微信登录的开发了。

    
    
    首先我们需要知道三个信息imageimage,方可继续开发。
    
    
    
    
    再让我们继续来看微信开放平台的文档

       注意是否必须!!!

     redirect_uri是回调地址uri刚才配置的授权回调域填上并加上接口 or html,这个可以根据自己的业务来,这里我是填上接口

    这个urlEnCode处理,网上有很多在线工具:https://tool.chinaz.com/tools/urlencode.aspx

    然后根据微信开发文档填写对应的信息,比如:

    https://open.weixin.qq.com/connect/qrconnect?

    appid=xxxxxxxxx&redirect_uri=https%3a%2f%2fwww.baidu.com%2frequestWechatLogin&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect

    上面信息是我随便填写的,开发时请根据自己的微信开放平台配置填写

    ok,完成后打开此链接就会进入到该页面,就可以开始登录了。

    使用手机端微信扫描,

    注意:每次每个用户授权后都会得到一个一次性的code,这个code只能使用一次 ,下次再授权登录会重新生成code的!!!

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

    链接参数根据微信开放平台配置对应填写

     

     




    因为我这边redirect_uri填写的是一个接口,就需要写一个接口,我就直接上代码了,这里有封装的类和枚举,我就不展示了大家可以修改!!!

     1 /**
     2      * 请求 code web微信登录
     3      *
     4      * @param code 请求登录唯一 code
     5      * @return 通用返回对象
     6      */
     7     @ApiOperation("请求 code 微信登录")
     8     @ApiImplicitParam(name = "code", value = "请求登录唯一code", dataType = "String", paramType = "query")
     9     @GetMapping("/requestWeChatLogin")
    10     public ApiResult requestWeChatLogin(@RequestParam("code") String code) {
    11         // 断言为空则抛出异常
    12         Assert.notNull(code, "未授权成功");
    13         String appId = "xxxxxxxxx";
    14         String secret = "xxxxxxxxxxxxxxxxxx";
    15         String strUri = StrUtil.format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={}&secret={}&code={}&grant_type=authorization_code", appId, secret, code);
    16         // 使用 Hutool开发工具包,执行请求接口,获取相关信息
    17         HttpResponse response = HttpRequest.get(strUri).execute();
    18         // 转成JSON对象
    19         JSONObject jsonObject = JSONUtil.parseObj(response.body());
    20         // 判断JSON对象中 unionid 是否存在
    21         if (jsonObject.isNull("unionid")) {
    22             // 不存在返回结果,code无效
    23             return new ApiResult(CommonEnum.CODE_INVALID);
    24         }
    25         // 获取 unionId
    26         String unionId = jsonObject.get("unionid").toString();
    27         // 获取 openId
    28         String openId = jsonObject.get("openid").toString();
    29         // 获取 accessToken
    30         String accessToken= jsonObject.get("access_token").toString();
    31         return new ApiResult(CommonEnum.SUCCESS);
    32     } 

    这样一顿操作后,就可以根据code获取到扫码授权用户的一些信息。

    拿到这些信息可以使用 access_token&openid 来获取用户个人信息 等等。

    该保存数据库可以保存,有别的操作自行编写!!!  

  • 相关阅读:
    【NOIP 2003】 加分二叉树
    【POJ 1655】 Balancing Act
    【HDU 3613】Best Reward
    【POJ 3461】 Oulipo
    【POJ 2752】 Seek the Name, Seek the Fame
    【POJ 1961】 Period
    【POJ 2406】 Power Strings
    BZOJ3028 食物(生成函数)
    BZOJ5372 PKUSC2018神仙的游戏(NTT)
    BZOJ4836 二元运算(分治FFT)
  • 原文地址:https://www.cnblogs.com/chenghao24/p/12234122.html
Copyright © 2011-2022 走看看