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.<User>lambdaUpdate().set(User::getMiniOpenId, weChatMiniAuthorizeVo.getOpenId()).eq(User::getId, userId));
|
return weChatMiniAuthorizeVo;
|
}
|
|
|
}
|