linwe
2024-09-03 764d883b5ea3bdc06abbec548b6df0511e567978
src/main/java/org/springblade/modules/wechat/service/impl/WechatServiceImpl.java
New file
@@ -0,0 +1,60 @@
package org.springblade.modules.wechat.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.common.config.WxMiniConfig;
import org.springblade.common.exception.CustomException;
import org.springblade.common.utils.HttpClientUtils;
import org.springblade.common.utils.SpringUtils;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.modules.pay.entity.WeChatMiniAuthorizeVo;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IUserService;
import org.springblade.modules.wechat.service.WechatService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class WechatServiceImpl implements WechatService {
   private static final Logger logger = LoggerFactory.getLogger(WechatServiceImpl.class);
   @Resource
   private WxMiniConfig wxMiniConfig;
   /**
    * 小程序登录凭证校验
    *
    * @return 小程序登录校验对象
    */
   @Override
   public WeChatMiniAuthorizeVo miniAuthCode(String code) {
      String url = StrUtil.format(wxMiniConfig.getJscode2sessionUrl(), wxMiniConfig.getAppid(), wxMiniConfig.getSecret(), code);
      JSONObject data = JSON.parseObject(HttpClientUtils.doGet(url));
      if (ObjectUtil.isNull(data)) {
         logger.error("微信平台接口异常,没任何数据返回!");
         throw new CustomException("微信平台接口异常,没任何数据返回!");
      }
      if (data.containsKey("errcode") && !data.getString("errcode").equals("0")) {
         if (data.containsKey("errmsg")) {
            logger.error("微信接口调用失败:" + data.getString("errcode") + data.getString("errmsg"));
            throw new CustomException("微信接口调用失败:" + data.getString("errcode") + data.getString("errmsg"));
         }
      }
      WeChatMiniAuthorizeVo weChatMiniAuthorizeVo = JSONObject.parseObject(data.toJSONString(), WeChatMiniAuthorizeVo.class);
      // 绑定用户openid
      Long userId = AuthUtil.getUserId();
      IUserService userService = SpringUtils.getBean(IUserService.class);
      userService.update(Wrappers.<User>lambdaUpdate().set(User::getMiniOpenId, weChatMiniAuthorizeVo.getOpenId()).eq(User::getId, userId));
      return weChatMiniAuthorizeVo;
   }
}