1. 程式人生 > 程式設計 >Java實現微信掃碼登入的例項程式碼

Java實現微信掃碼登入的例項程式碼

微信掃碼登入

首先去通過微信開放平臺做好開發者資質認證,建立網站應用然後等待稽核

開發者資質認證

在這裡插入圖片描述

網站應用

在這裡插入圖片描述

稽核通過的話就是這個樣子 還有最底下的授權回撥地址 (www.xxxxx.com) 填寫域名即可

在這裡插入圖片描述

pom

<!-- WeChatQrCode -->
		<dependency>
			<groupId>com.github.binarywang</groupId>
			<artifactId>weixin-java-mp</artifactId>
			<version>3.4.0</version>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-api</artifactId>
			<version>RELEASE</version>
			<scope>compile</scope>
		</dependency>

第一步 使用者通過點選事件獲取到微信二維碼連線

在這裡插入圖片描述

 /**
   * 獲取微信登陸二維碼地址
   * @return
   */
  @RequestMapping(value = "/getQRCodeUrl",method = RequestMethod.POST)
  public Message getQRCodeUrl() {
    logger.info("獲取二維碼地址");
    try {
      String codeUrl = weChatService.getQRCodeUrl();
      logger.info("codeUrl:"+codeUrl);
      return new Message(ResponseEnum.SUCCESS,codeUrl);
    }catch (Exception e){
      logger.error(e.toString()+e);
      return new Message(ResponseEnum.FALL);
    }
  }
 @Override
  public String getQRCodeUrl() {
    // 生成 state 引數,用於防止 csrf
    String date = DateUtil.format(new Date(),"yyyyMMdd");
    String state = MD5Utils.generate(CSRF_KEY + date);
    return wxMpService.buildQrConnectUrl(wxRedirectUrl,"snsapi_login",state);
  }

https://open.weixin.qq.com/connect/qrconnect?appid=xxxx&redirect_uri=xxxxxx&response_type=code&scope=snsapi_login&state=e97555458779708b99b9d40cb49f54245c7500e536445d32#wechat_redirectappid 是你網站應用裡面的 redirect_uri 你設定的授權回撥地址 scope網站掃碼登入為snsapi_login即可 state。微信開放平臺文件文件寫的很詳細,看不懂看文件

使用者掃碼成功之後微信會回撥你設定的回撥地址 獲取二維碼連線

 /**
   * 回撥地址
   * @param code
   * @param state
   * @return
   */
  @RequestMapping(value = "/wxCallBack",method = RequestMethod.POST)
  public Message wxCallBack(HttpServletRequest request,HttpServletResponse response,@RequestParam(name = "code",defaultValue = "") String code,@RequestParam(name = "state",defaultValue = "")String state) {
    if(StringUtils.isBlank(code)){
      return new Message(ResponseEnum.ESSENTIAL_IS_NULL);
    }
    if(StringUtils.isBlank(state)){
      return new Message(ResponseEnum.ESSENTIAL_IS_NULL);
    }
    logger.info("微信回撥------------");
    logger.info(code+"------"+state);
    try {
      Message message=weChatService.wxCallBack(request,code,state);
      return message;
    }catch (Exception e){
      logger.error(e.toString()+"\n"+e);
      return new Message(ResponseEnum.FALL);
    }
  }
@Override
  public Message wxCallBack(HttpServletRequest request,String code,String state) {
    String openId = null;
    if (code != null) {
      // 獲取 openid
      try {
        WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
        if (accessToken == null) {
          return new Message(ResponseEnum.DATA_IS_NULL);
        }
        openId = accessToken.getOpenId();
        log.info("openId:" + openId);
        /*token = accessToken.getAccessToken();*/
         WxMpUser wxUser = wxMpService.oauth2getUserInfo(accessToken,null);
         log.info(wxUser.toString());
      	   return new Message(ResponseEnum.WECHAT_NOT_BINGDING,wxUser);
      } catch (WxErrorException e) {
        log.error(e.getMessage(),e);
        return new Message(ResponseEnum.FALL);
      }
    }
    return new Message(ResponseEnum.FALL);
  }

前端請求

 $("#weiLog").click(function () {
    $.ajax({
      type: "POST",url: "/api/wx/getQRCodeUrl",dataType: 'json',success: function (result) {
        //console.log(result);
        if(result.code==0){
          this.itop = (window.screen.availHeight - 500) / 2;
          //獲得視窗的水平位置
          this.ileft = (window.screen.availWidth - 400) / 2;
          this.w = window.open(
            result.data,"newwindow","height=500,width=600,top=" +
            this.itop +
            ",left = " +
            this.ileft +
            ",toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no"
          );
        }
      }
    });
  });

總結

到此這篇關於Java實現微信掃碼登入的例項程式碼的文章就介紹到這了,更多相關java微信掃碼登入內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!