1. 程式人生 > >微信公眾號開發掃碼登入(java版)

微信公眾號開發掃碼登入(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的方式獲取,還是weixin-java-tools這個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;
    }