WechatBackHandler.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package com.iamberry.rst.controllers.wx;
  2. import com.iamberry.rst.faces.member.MemberService;
  3. import com.iamberry.wechat.core.entity.WechatUtils;
  4. import com.iamberry.wechat.core.entity.member.Member;
  5. import com.iamberry.wechat.tools.NameUtils;
  6. import com.iamberry.wechat.tools.WeixinUtil;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Controller;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestParam;
  14. import org.springframework.web.servlet.ModelAndView;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17. /**
  18. * @author 何秀刚
  19. * Class Description: 微信授权handler
  20. * Create Date:2016年4月19日
  21. * Update Date:2016年4月19日
  22. */
  23. @Controller
  24. public class WechatBackHandler {
  25. private static Logger logger = LoggerFactory.getLogger(WechatBackHandler.class);
  26. @Autowired
  27. private MemberService memberService;
  28. public MemberService getMemberService() {
  29. return memberService;
  30. }
  31. public void setMemberService(MemberService memberService) {
  32. this.memberService = memberService;
  33. }
  34. /**
  35. * 微信授权功能
  36. * @param request
  37. * @param response
  38. * @return
  39. * @throws Exception
  40. */
  41. @RequestMapping("/wechatBack")
  42. public ModelAndView getOpenId(
  43. @RequestParam(value = "callback", required = false) String callback,
  44. HttpServletRequest request,
  45. HttpServletResponse response) throws Exception {
  46. logger.info("微信回调");
  47. String callbackURL = NameUtils.getConfig("redirectUrl_index");
  48. if (callback != null) {
  49. callbackURL = "redirect:" + WechatUtils.getCallback(callback);
  50. }
  51. ModelAndView mv = new ModelAndView(callbackURL);
  52. // 获取微信code
  53. String code = request.getParameter("code");
  54. if (StringUtils.isEmpty(code)) {
  55. // 判断code是否为空
  56. mv.setViewName("redirect:" + WechatUtils.getOpenIdFunction(null));
  57. return mv;
  58. }
  59. // 通过code get微信的openid
  60. String[] str = WeixinUtil.getOpenId(code, NameUtils.getConfig("appId"), NameUtils.getConfig("appSecret"));
  61. String openId = str[0];
  62. if (StringUtils.isEmpty(openId)) {
  63. mv.setViewName("redirect:" + WechatUtils.getOpenIdFunction(null));
  64. return mv;
  65. }
  66. Member info = memberService.getMemberByUserOpenId(openId);
  67. if (info == null) {
  68. // 创建新的用户
  69. info = new Member();
  70. info.setUserOpenid(openId);
  71. info.setUserSex(0);
  72. info.setUserStatus(1);
  73. int flag = memberService.save(info);
  74. if (flag < 1) {
  75. memberService.save(info);
  76. }
  77. }
  78. info.setUserOpenid(openId);
  79. // 提前获取session中的地址
  80. WechatUtils.saveUserToSession(info, request, response);
  81. // 获取成功后转向地址
  82. mv.setViewName(callbackURL);
  83. return mv;
  84. }
  85. }