微信公众号开发扫码登录(java版)

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 微信公众号开发扫码登录(java版)

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号: 好好学java,获取优质学习资源。

商家信息管理系统登录时可以用微信扫码登录。 参考文档是,**着重需要关注文档(开发前一定看懂流程)**的部分。

注意这里是微信开放平台,不同于微信公众平台,还需要另外注册账号。我们在微信开放平台注册账号后,需要填写我们网站的域名,这样我们才能有权使用微信的接口。同样个人没有资质,要向师兄借用账号。

在进行讲解之前,我们需要明白用户登录一个网站的实质,也就是每一个用户对这个网站唯一的身份标识。而且我们每个微信用户对于一个微信开放平台账户有唯一的openid,这样我们就可以用用户的openid作为网站对这个用户的唯一标识。但不是每个网站都有权限获取用户的openid等信息的,这就需要拥有这个网站的公司到微信开放平台注册一个账号,然后在账号里填入自己网站的域名。然后网站就可以设置一个微信扫码登录按钮,让访问网站的用户点击,点击这个按钮就会访问微信官方给的微信扫码登陆接口,用户扫码同意后,就会回调一个我们在微信扫码登陆接口里设置的return_url,并带上code参数,我们就可以通过code参数,换取openid了。

过程和微信网页授权过程非常相似。

第一步访问微信给定的接口(加上自己的appID,appSecret,redirect_url,state参数),会获取CODE,并以CODE和state为参数,回调redirect_url。

然后以code、appid、appsecret为参数访问微信给的另一个接口,就可以获取openid等信息。

以上是根据微信官方文档手工方式获取openid的方法,我们也可以使用SDK的方式获取,还是这个SDK。 分以下两步:

第一步 先声明好bean。


   @Bean
    public WxMpService wxOpenService(){
        WxMpService wxOpenService=new WxMpServiceImpl();
        wxOpenService.setWxMpConfigStorage(wxOpenConfigStorage());
        return wxOpenService;
    }
    @Bean
    public WxMpConfigStorage wxOpenConfigStorage(){
        WxMpInMemoryConfigStorage wxMpInMemoryConfigStorage=new WxMpInMemoryConfigStorage();
        wxMpInMemoryConfigStorage.setAppId(accountConfig.getOpenAppId());
        wxMpInMemoryConfigStorage.setSecret(accountConfig.getOpenAppSecret());
        return wxMpInMemoryConfigStorage;
    }

第二步 构造自己的url,访问


  @GetMapping("/qrAuthorize")
    public String qrAuthorize(@RequestParam("returnUrl") String returnUrl){
        String url=projectUrlConfig.getWechatOpenAuthorize()+"/sell/wechat/userInfo";
        String redirectUrl=wxOpenService.buildQrConnectUrl(url,WxConsts.QRCONNECT_SCOPE_SNSAPI_LOGIN,URLEncoder.encode(returnUrl));
        return "redirect:"+redirectUrl;
    }
    @GetMapping("qrUserInfo")
    public String qrUserInfo(@RequestParam("code") String code,
                             @RequestParam("state") String returnUrl){
        WxMpOAuth2AccessToken wxMpOAuth2AccessToken=new WxMpOAuth2AccessToken();
        try{
            wxMpOAuth2AccessToken=wxOpenService.oauth2getAccessToken(code);
        }catch (WxErrorException e){
            log.error("【微信网页】{}",e);
            throw new SellException(ResultEnum.WECHAT_MP_ERROR.getCode(),e.getError().getErrorMsg());
        }
        log.info("wxMpOAuth2AccessToken={}",wxMpOAuth2AccessToken);
        String openId=wxMpOAuth2AccessToken.getOpenId();
        return "redirect:"+returnUrl+"?openid="+openId;
    }

出处:

原文地址:https://sihai.blog.csdn.net/article/details/80930276

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 微信公众号开发扫码登录(java版)


 上一篇
junit测试NoSuchBeanDefinitionException—— No bean named 'dataSource' is define junit测试NoSuchBeanDefinitionException—— No bean named 'dataSource' is define
junit测试这个问题坑了我两次,印象很深刻,这都是什么 bean找不到的问题,其实这个问题很简单,就是 spring的配置文件没有全部加载到junit测试环境。 我们要做的就是要检查一下,所有的 spring的配置文件是否添加到了juni
2021-04-04
下一篇 
算法每日学打卡——java语言基础题目打卡(11-15) 算法每日学打卡——java语言基础题目打卡(11-15)
文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号: 好好学java,获取优质学习资源。 “算法每日学”11打卡 问题描述:  写一个算法计算出n的阶乘。 n! = n * (n - 1
2021-04-04