package com.iformall.controller; import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.enums.EnumWxAuthorizationStatus; import com.iformall.service.WxAuthorizerInfoService; import com.iformall.service.wechat.FmOpenService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.open.bean.result.WxOpenAuthorizerInfoResult; import me.chanjar.weixin.open.bean.result.WxOpenQueryAuthResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; /** * Stormeye Wu */ @Controller @RequestMapping("/wt_auth") @Api(description = "微信第三方开放平台授权相关接口") public class WechatAuthController { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private FmOpenService openService; @Autowired private WxAuthorizerInfoService authorizerInfoService; @ApiOperation(value = "获取授权跳转页", notes = "") @GetMapping("/goto_auth_url_show") @ResponseBody public String gotoPreAuthUrlShow() { return "" + "" + "go" + "" + ""; } @ApiOperation(value = "授权跳转页", notes = "") @GetMapping("/goto_auth_url") public void gotoPreAuthUrl(HttpServletRequest request, HttpServletResponse response) { String host = request.getHeader("host"); String url = "https://" + host + "/O/wt_auth/jump"; try { url = openService.getWxOpenComponentService().getPreAuthUrl(url); response.sendRedirect(url); } catch (WxErrorException | IOException e) { logger.error("gotoPreAuthUrl", e); throw new RuntimeException(e); } } @ApiOperation(value = "授权", notes = "") @GetMapping("/jump") @ResponseBody public void jump(@RequestParam("auth_code") String authorizationCode) { try { WxOpenQueryAuthResult queryAuthResult = openService.getWxOpenComponentService().getQueryAuth(authorizationCode); logger.info("getQueryAuth", queryAuthResult); WxOpenAuthorizerInfoResult openAuthorizerInfoResult = openService.getWxOpenComponentService().getAuthorizerInfo( queryAuthResult.getAuthorizationInfo().getAuthorizerAppid()); logger.info(openAuthorizerInfoResult.toString()); // save auth info authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo(){ { setAuthorizerAppid(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAppid()); setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl()); setRefreshToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerRefreshToken()); setAccessToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAccessToken()); setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + openAuthorizerInfoResult.getAuthorizationInfo().getExpiresIn()*1000))); setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode()); setAuthTime(new Date()); } }); } catch (WxErrorException e) { logger.error("gotoPreAuthUrl", e); throw new RuntimeException(e); } } @ApiOperation(value = "手机跳转链接url", notes = "") @GetMapping("/getMobilePreAuthUrl") @ResponseBody public String getMobilePreAuthUrl(HttpServletRequest request, HttpServletResponse response) { String host = request.getHeader("host"); String url = "https://" + host + "/O/wt_auth/jump"; try { url = openService.getWxOpenComponentService().getMobilePreAuthUrl(url); return url; } catch (WxErrorException e) { logger.error("getMobilePreAuthUrl", e); throw new RuntimeException(e); } } }