package cn.lihu.jh.module.system.api.social;
|
|
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.lihu.jh.framework.common.util.object.BeanUtils;
|
import cn.lihu.jh.module.system.api.social.dto.*;
|
import cn.lihu.jh.module.system.enums.social.SocialTypeEnum;
|
import cn.lihu.jh.module.system.service.social.SocialClientService;
|
import cn.lihu.jh.module.system.service.social.SocialUserService;
|
import lombok.extern.slf4j.Slf4j;
|
import me.chanjar.weixin.common.bean.WxJsapiSignature;
|
import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo;
|
import org.springframework.stereotype.Service;
|
import org.springframework.validation.annotation.Validated;
|
|
import javax.annotation.Resource;
|
import java.util.List;
|
|
import static cn.hutool.core.collection.CollUtil.findOne;
|
import static cn.lihu.jh.framework.common.util.collection.CollectionUtils.convertList;
|
|
/**
|
* 社交应用的 API 实现类
|
*
|
* @author 芋道源码
|
*/
|
@Service
|
@Validated
|
@Slf4j
|
public class SocialClientApiImpl implements SocialClientApi {
|
|
@Resource
|
private SocialClientService socialClientService;
|
@Resource
|
private SocialUserService socialUserService;
|
|
@Override
|
public String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri) {
|
return socialClientService.getAuthorizeUrl(socialType, userType, redirectUri);
|
}
|
|
@Override
|
public SocialWxJsapiSignatureRespDTO createWxMpJsapiSignature(Integer userType, String url) {
|
WxJsapiSignature signature = socialClientService.createWxMpJsapiSignature(userType, url);
|
return BeanUtils.toBean(signature, SocialWxJsapiSignatureRespDTO.class);
|
}
|
|
//======================= 微信小程序独有 =======================
|
|
@Override
|
public SocialWxPhoneNumberInfoRespDTO getWxMaPhoneNumberInfo(Integer userType, String phoneCode) {
|
WxMaPhoneNumberInfo info = socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode);
|
return BeanUtils.toBean(info, SocialWxPhoneNumberInfoRespDTO.class);
|
}
|
|
@Override
|
public byte[] getWxaQrcode(SocialWxQrcodeReqDTO reqVO) {
|
return socialClientService.getWxaQrcode(reqVO);
|
}
|
|
@Override
|
public List<SocialWxaSubscribeTemplateRespDTO> getWxaSubscribeTemplateList(Integer userType) {
|
List<TemplateInfo> list = socialClientService.getSubscribeTemplateList(userType);
|
return convertList(list, item -> BeanUtils.toBean(item, SocialWxaSubscribeTemplateRespDTO.class).setId(item.getPriTmplId()));
|
}
|
|
@Override
|
public void sendWxaSubscribeMessage(SocialWxaSubscribeMessageSendReqDTO reqDTO) {
|
// 1.1 获得订阅模版列表
|
List<TemplateInfo> templateList = socialClientService.getSubscribeTemplateList(reqDTO.getUserType());
|
if (CollUtil.isEmpty(templateList)) {
|
log.warn("[sendSubscribeMessage][reqDTO({}) 发送订阅消息失败,原因:没有找到订阅模板]", reqDTO);
|
return;
|
}
|
// 1.2 获得需要使用的模版
|
TemplateInfo template = findOne(templateList, item ->
|
ObjUtil.equal(item.getTitle(), reqDTO.getTemplateTitle()));
|
if (template == null) {
|
log.warn("[sendWxaSubscribeMessage][reqDTO({}) 发送订阅消息失败,原因:没有找到订阅模板]", reqDTO);
|
return;
|
}
|
|
// 2. 获得社交用户
|
SocialUserRespDTO socialUser = socialUserService.getSocialUserByUserId(reqDTO.getUserType(), reqDTO.getUserId(),
|
SocialTypeEnum.WECHAT_MINI_APP.getType());
|
if (StrUtil.isBlankIfStr(socialUser.getOpenid())) {
|
log.warn("[sendWxaSubscribeMessage][reqDTO({}) 发送订阅消息失败,原因:会员 openid 缺失]", reqDTO);
|
return;
|
}
|
|
// 3. 发送订阅消息
|
socialClientService.sendSubscribeMessage(reqDTO, template.getPriTmplId(), socialUser.getOpenid());
|
}
|
|
}
|