You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
4.5 KiB

  1. package com.iformall.controller;
  2. import com.iformall.domain.po.WxAuthorizerInfo;
  3. import com.iformall.enums.EnumWxAuthorizationStatus;
  4. import com.iformall.service.WxAuthorizerInfoService;
  5. import com.iformall.service.wechat.FmOpenService;
  6. import io.swagger.annotations.Api;
  7. import io.swagger.annotations.ApiOperation;
  8. import me.chanjar.weixin.common.error.WxErrorException;
  9. import me.chanjar.weixin.open.bean.result.WxOpenAuthorizerInfoResult;
  10. import me.chanjar.weixin.open.bean.result.WxOpenQueryAuthResult;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.web.bind.annotation.*;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18. import java.io.IOException;
  19. import java.util.Date;
  20. /**
  21. * Stormeye Wu
  22. */
  23. @Controller
  24. @RequestMapping("/wt_auth")
  25. @Api(description = "微信第三方开放平台授权相关接口")
  26. public class WechatAuthController {
  27. private final Logger logger = LoggerFactory.getLogger(getClass());
  28. @Autowired
  29. private FmOpenService openService;
  30. @Autowired
  31. private WxAuthorizerInfoService authorizerInfoService;
  32. @ApiOperation(value = "获取授权跳转页", notes = "")
  33. @GetMapping("/goto_auth_url_show")
  34. @ResponseBody
  35. public String gotoPreAuthUrlShow() {
  36. return "<html>" +
  37. "<body>" +
  38. "<a href='/O/wt_auth/goto_auth_url'>go</a>" +
  39. "</body>" +
  40. "</html>";
  41. }
  42. @ApiOperation(value = "授权跳转页", notes = "")
  43. @GetMapping("/goto_auth_url")
  44. public void gotoPreAuthUrl(HttpServletRequest request, HttpServletResponse response) {
  45. String host = request.getHeader("host");
  46. String url = "https://" + host + "/O/wt_auth/jump";
  47. try {
  48. url = openService.getWxOpenComponentService().getPreAuthUrl(url);
  49. response.sendRedirect(url);
  50. } catch (WxErrorException | IOException e) {
  51. logger.error("gotoPreAuthUrl", e);
  52. throw new RuntimeException(e);
  53. }
  54. }
  55. @ApiOperation(value = "授权", notes = "")
  56. @GetMapping("/jump")
  57. @ResponseBody
  58. public void jump(@RequestParam("auth_code") String authorizationCode) {
  59. try {
  60. WxOpenQueryAuthResult queryAuthResult = openService.getWxOpenComponentService().getQueryAuth(authorizationCode);
  61. logger.info("getQueryAuth", queryAuthResult);
  62. WxOpenAuthorizerInfoResult openAuthorizerInfoResult = openService.getWxOpenComponentService().getAuthorizerInfo(
  63. queryAuthResult.getAuthorizationInfo().getAuthorizerAppid());
  64. logger.info(openAuthorizerInfoResult.toString());
  65. // save auth info
  66. authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo(){
  67. {
  68. setAuthorizerAppid(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAppid());
  69. setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias());
  70. setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg());
  71. setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl());
  72. setRefreshToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerRefreshToken());
  73. setAccessToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAccessToken());
  74. setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + openAuthorizerInfoResult.getAuthorizationInfo().getExpiresIn()*1000)));
  75. setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode());
  76. setAuthTime(new Date());
  77. }
  78. });
  79. } catch (WxErrorException e) {
  80. logger.error("gotoPreAuthUrl", e);
  81. throw new RuntimeException(e);
  82. }
  83. }
  84. @ApiOperation(value = "手机跳转链接url", notes = "")
  85. @GetMapping("/getMobilePreAuthUrl")
  86. @ResponseBody
  87. public String getMobilePreAuthUrl(HttpServletRequest request, HttpServletResponse response) {
  88. String host = request.getHeader("host");
  89. String url = "https://" + host + "/O/wt_auth/jump";
  90. try {
  91. url = openService.getWxOpenComponentService().getMobilePreAuthUrl(url);
  92. return url;
  93. } catch (WxErrorException e) {
  94. logger.error("getMobilePreAuthUrl", e);
  95. throw new RuntimeException(e);
  96. }
  97. }
  98. }