WechatController.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package com.yingying.tourist.web;
  2. import java.io.UnsupportedEncodingException;
  3. import java.util.Map;
  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.ResponseBody;
  9. import com.alibaba.fastjson.JSON;
  10. import com.alibaba.fastjson.JSONObject;
  11. import com.baomidou.mybatisplus.mapper.EntityWrapper;
  12. import com.yingying.tourist.common.WechatUtil;
  13. import com.yingying.tourist.domain.User;
  14. import com.yingying.tourist.exception.ErrorCode;
  15. import com.yingying.tourist.result.MessageResult;
  16. import com.yingying.tourist.service.UserService;
  17. import com.yingying.tourist.service.WechatService;
  18. import lombok.extern.slf4j.Slf4j;
  19. @Controller
  20. @Slf4j
  21. public class WechatController {
  22. @Autowired
  23. private WechatService wechatService;
  24. @Autowired
  25. private UserService userService;
  26. @RequestMapping(value="token")
  27. @ResponseBody
  28. public String checkToken(String signature, String echostr, String timestamp, String nonce) {
  29. return echostr;
  30. }
  31. @RequestMapping(value="checkJsAuth")
  32. @ResponseBody
  33. public MessageResult<String> checkJsAuth(String url) {
  34. String jsapi_ticket = wechatService.getTicket();
  35. Map<String, String> map = WechatUtil.sign(jsapi_ticket, url);
  36. String sign = JSON.toJSONString(map);
  37. if(StringUtils.isBlank(sign)) {
  38. return new MessageResult<String>().failure(ErrorCode.JS_SIGN_NULL);
  39. }
  40. return new MessageResult<String>().ok(sign);
  41. }
  42. @RequestMapping(value="code",produces="application/json;charset=utf-8")
  43. @ResponseBody
  44. public MessageResult<String> code(String code) {
  45. String result = wechatService.getAuthToken(code);
  46. JSONObject jsonObject = JSONObject.parseObject(result);
  47. String openId = jsonObject.getString("openid");
  48. String token = jsonObject.getString("access_token");
  49. if(StringUtils.isBlank(openId)) {
  50. return new MessageResult<String>().failure(ErrorCode.OPENID_NULL);
  51. }
  52. // 首先查询openid 是否在数据库中,如果存在直接返回openid
  53. EntityWrapper<User> userWrapper = new EntityWrapper<>();
  54. userWrapper.eq("openid", openId);
  55. User user = userService.selectOne(userWrapper);
  56. if (user != null) {
  57. return new MessageResult<String>().ok(openId);
  58. }
  59. try {
  60. // 如果不存在,通过token和openid去获取用户信息,并插入到数据库中
  61. User wechatUser = wechatService.getWechatUser(token, openId);
  62. if(wechatUser != null) {
  63. userService.insert(wechatUser);
  64. }
  65. } catch (UnsupportedEncodingException e) {
  66. log.info("编码集转换失败");
  67. }
  68. return new MessageResult<String>().ok(openId);
  69. }
  70. }