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.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) throws Exception { 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 Exception("微信平台接口异常,没任何数据返回!"); } if (data.containsKey("errcode") && !data.getString("errcode").equals("0")) { if (data.containsKey("errmsg")) { logger.error("微信接口调用失败:" + data.getString("errcode") + data.getString("errmsg")); throw new Exception("微信接口调用失败:" + 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.lambdaUpdate().set(User::getMiniOpenId, weChatMiniAuthorizeVo.getOpenId()).eq(User::getId, userId)); return weChatMiniAuthorizeVo; } }