WechatBackHandler.java 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.iamberry.wechat.handles.pay;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.apache.commons.lang3.StringUtils;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestParam;
  9. import org.springframework.web.servlet.ModelAndView;
  10. import com.iamberry.wechat.core.entity.WechatUtils;
  11. import com.iamberry.wechat.core.entity.member.Member;
  12. import com.iamberry.wechat.face.home.HomeService;
  13. import com.iamberry.wechat.tools.NameUtils;
  14. import com.iamberry.wechat.tools.WeixinUtil;
  15. /**
  16. * @author 何秀刚
  17. * 微信授权handler
  18. */
  19. @Controller
  20. public class WechatBackHandler {
  21. @Autowired
  22. private HomeService homeService;
  23. /**
  24. * 微信授权功能
  25. * @param request
  26. * @param response
  27. * @return
  28. * @throws Exception
  29. */
  30. @RequestMapping("/wechatBack")
  31. public ModelAndView getOpenId(@RequestParam(value = "callback", required = false) String callback,
  32. HttpServletRequest request,
  33. HttpServletResponse response) throws Exception {
  34. String callbackURL = NameUtils.getConfig("redirectUrl_index");
  35. if (callback != null) {
  36. callbackURL = "redirect:" + WechatUtils.getCallback(callback);
  37. }
  38. ModelAndView mv = new ModelAndView(callbackURL);
  39. // 获取微信code
  40. String code = request.getParameter("code");
  41. if (StringUtils.isEmpty(code)) {
  42. // 判断code是否为空
  43. mv.setViewName("redirect:" + WechatUtils.getOpenIdFunction(null));
  44. return mv;
  45. }
  46. // 通过code get微信的openid
  47. String[] str = WeixinUtil.getOpenId(code, NameUtils.getConfig("appId"), NameUtils.getConfig("appSecret"));
  48. String openId = str[0];
  49. if (StringUtils.isEmpty(openId)) {
  50. mv.setViewName("redirect:" + WechatUtils.getOpenIdFunction(null));
  51. return mv;
  52. }
  53. Member info = homeService.selectMemberInfoByOpenId(openId);
  54. if (info == null) {
  55. // 创建新的用户
  56. info = new Member();
  57. info.setUserOpenid(openId);
  58. info.setUserSex(0);
  59. info.setUserStatus(1);
  60. int flag = homeService.insertMemberInfo(info);
  61. if (flag < 1) {
  62. homeService.insertMemberInfo(info);
  63. }
  64. }
  65. info.setUserOpenid(openId);
  66. // 提前获取session中的地址
  67. WechatUtils.saveUserToSession(info, request, response);
  68. // 获取成功后转向地址
  69. mv.setViewName(callbackURL);
  70. return mv;
  71. }
  72. }