记得上下班打卡 | git大法好,push需谨慎

Commit c79b4798 authored by jiangxiulong's avatar jiangxiulong

自己查询openid

parent 8e890a32
...@@ -40,6 +40,12 @@ ...@@ -40,6 +40,12 @@
<artifactId>liquidnet-common-sms</artifactId> <artifactId>liquidnet-common-sms</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-sweet</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.liquidnet.service.consumer.sweet.config.wechat;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WechatMaConfigure {
private static String appletAppidZhengzai;
private static String appletAppidStrawberry;
private static String appletAppidFive;
private static String appletAppidMdsk;
@Value("${liquidnet.wechat.applet.zhengzai.appid}")
public void setAppletAppidZhengzai(String appletAppidZhengzai) {
WechatMaConfigure.appletAppidZhengzai = appletAppidZhengzai;
}
@Value("${liquidnet.wechat.applet.strawberry.appid}")
public void setAppletAppidStrawberry(String appletAppidStrawberry) {
WechatMaConfigure.appletAppidStrawberry = appletAppidStrawberry;
}
@Value("${liquidnet.wechat.applet.five.appid}")
public void setAppletAppidFive(String appletAppidFive) {
WechatMaConfigure.appletAppidFive = appletAppidFive;
}
@Value("${liquidnet.wechat.applet.mdsk.appid}")
public void setAppletAppidMdsk(String appletAppidMdsk) {
WechatMaConfigure.appletAppidMdsk = appletAppidMdsk;
}
public String getWxMaAppid(Integer anum) {
switch (anum) {
case 4:
return appletAppidZhengzai;
case 1:
return appletAppidStrawberry;
case 2:
return appletAppidFive;
case 3:
return appletAppidMdsk;
}
return "";
}
}
package com.liquidnet.service.consumer.sweet.config.wechat;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.PostConstruct;
@Configuration
public class WechatMpConfigure {
private static String appidZhengzai;
private static String secretZhengzai;
private static String tokenZhengzai;
private static String aeskeyZhengzai;
private static String appidModernsky;
private static String secretModernsky;
@Value("${liquidnet.wechat.service.zhengzai.appid}")
public void setAppidZhengzai(String appidZhengzai) { WechatMpConfigure.appidZhengzai = appidZhengzai; }
@Value("${liquidnet.wechat.service.zhengzai.secret}")
public void setSecretZhengzai(String secretZhengzai) {
WechatMpConfigure.secretZhengzai = secretZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.token}")
public void setTokenZhengzai(String tokenZhengzai) {
WechatMpConfigure.tokenZhengzai = tokenZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.aeskey}")
public void setAeskeyZhengzai(String aeskeyZhengzai) {
WechatMpConfigure.aeskeyZhengzai = aeskeyZhengzai;
}
@Value("${liquidnet.wechat.service.modernsky.appid}")
public void setAppidModernsky(String appidModernsky) {
WechatMpConfigure.appidModernsky = appidModernsky;
}
@Value("${liquidnet.wechat.service.modernsky.secret}")
public void setSecretModernsky(String secretModernsky) {
WechatMpConfigure.secretModernsky = secretModernsky;
}
private WxMpService wxMpZhengzaiService;
private WxMpService wxMpModernskyService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@PostConstruct
public void init() {
wxMpZhengzaiService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:zhengzai");
wxMpDefaultConfig.setAppId(appidZhengzai);
wxMpDefaultConfig.setSecret(secretZhengzai);
wxMpDefaultConfig.setToken(tokenZhengzai);
wxMpDefaultConfig.setAesKey(aeskeyZhengzai);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
wxMpModernskyService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:modernsky");
wxMpDefaultConfig.setAppId(appidModernsky);
wxMpDefaultConfig.setSecret(secretModernsky);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
}
public WxMpService getWxMpService(Integer pnum) {
switch (pnum) {
case 1:
return wxMpZhengzaiService;
case 2:
return wxMpModernskyService;
}
return null;
}
}
package com.liquidnet.service.consumer.sweet.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ApiModel(value = "SweetOpenSendMsgParam", description = "发送模版消息公共接口入参")
@Data
public class SweetOpenSendMsgParam implements Serializable {
private static final long serialVersionUID = 675588088506034208L;
@ApiModelProperty(position = 11, required = true, allowableValues = "1,2", value = "发送目标类型 1正在服务号 2摩登服务号")
@NotNull(message = "sendTargetType不能为空") @Min(value = 1, message = "sendTargetType无效") @Max(value = 2, message = "sendTargetType无效")
private Integer sendTargetType;
@ApiModelProperty(position = 12, required = true, value = "模版消息ID", example = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU")
@NotBlank(message = "templateId不能为空")
private String templateId;
@ApiModelProperty(position = 13, required = true, value = "模版消息数据", example = "{\"first\": \"感谢关注「正在现场」服务号\", \"keyword2\": \"4006-310-750\"}")
@NotBlank(message = "templateData不能为空")
private String templateData;
@ApiModelProperty(position = 14, required = true, allowableValues = "1,2,3,4,5", value = "点击跳转类型 1草莓小程序 2五百里小程序 3mdsk小程序 4正在小程序 5url")
@NotNull(message = "jumpType不能为空") @Min(value = 1, message = "jumpType无效") @Max(value = 5, message = "jumpType无效")
private Integer jumpType;
@ApiModelProperty(position = 15, value = "跳转url", example = "www.zhengzai.tv")
private String jumpUrl;
@ApiModelProperty(position = 16, allowableValues = "false,true", value = "是否需要前端配合处理跳转,直接跳转jumpAppletPagePath为false,true时需要前端根据状态码做跳转处理")
private Boolean jumpAppletUsePath;
@ApiModelProperty(position = 17, value = "跳转小程序需要的某页地址", example = "pages/webview?query=lottery")
private String jumpAppletPagePath;
/*@ApiModelProperty(position = 18, required = true, value = "openId", example = "oUpkkuNe4yuVs77aaKFvuvpgNOSw")
@NotBlank(message = "openId不能为空")
private String openId;*/
@ApiModelProperty(position = 18, required = true, value = "phone", example = "15888888888")
@NotBlank(message = "phone不能为空")
private String phone;
}
...@@ -2,10 +2,9 @@ package com.liquidnet.service.consumer.sweet.receiver; ...@@ -2,10 +2,9 @@ package com.liquidnet.service.consumer.sweet.receiver;
import com.liquidnet.commons.lang.util.CollectionUtil; import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.consumer.sweet.param.SweetOpenSendMsgParam; import com.liquidnet.service.consumer.sweet.service.impl.SweetWechatTemplateMsgServiceImpl;
import com.liquidnet.service.consumer.sweet.service.impl.SweetWechatTemplateServiceImpl; import com.liquidnet.service.sweet.param.SweetOpenSendMsgParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.stream.MapRecord; import org.springframework.data.redis.connection.stream.MapRecord;
...@@ -19,7 +18,7 @@ import java.util.HashMap; ...@@ -19,7 +18,7 @@ import java.util.HashMap;
public class ConsumerSweetTemplateMsgReceiver extends AbstractSqlRedisReceiver { public class ConsumerSweetTemplateMsgReceiver extends AbstractSqlRedisReceiver {
@Autowired @Autowired
SweetWechatTemplateServiceImpl sweetWechatTemplateService; SweetWechatTemplateMsgServiceImpl sweetWechatTemplateService;
@Override @Override
protected String getRedisStreamKey() { protected String getRedisStreamKey() {
......
package com.liquidnet.service.consumer.sweet.service.impl; package com.liquidnet.service.consumer.sweet.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.liquidnet.service.consumer.sweet.config.wechat.WechatMaConfigure; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.service.consumer.sweet.config.wechat.WechatMpConfigure; import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.consumer.sweet.param.SweetOpenSendMsgParam; import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.entity.SweetAppletUser;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetAppletUserMapper;
import com.liquidnet.service.sweet.param.SweetOpenSendMsgParam;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpService;
...@@ -11,7 +16,9 @@ import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; ...@@ -11,7 +16,9 @@ import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -24,7 +31,7 @@ import java.util.Map; ...@@ -24,7 +31,7 @@ import java.util.Map;
*/ */
@Slf4j @Slf4j
@Service @Service
public class SweetWechatTemplateServiceImpl { public class SweetWechatTemplateMsgServiceImpl {
@Autowired @Autowired
WechatMpConfigure wechatMpConfigure; WechatMpConfigure wechatMpConfigure;
...@@ -32,12 +39,18 @@ public class SweetWechatTemplateServiceImpl { ...@@ -32,12 +39,18 @@ public class SweetWechatTemplateServiceImpl {
@Autowired @Autowired
WechatMaConfigure wechatMaConfigure; WechatMaConfigure wechatMaConfigure;
@Autowired
private SweetAppletUserMapper sweetAppletUserMapper;
@Autowired
private RedisDataUtils redisDataUtils;
public Boolean openSendMsg(SweetOpenSendMsgParam param) { public Boolean openSendMsg(SweetOpenSendMsgParam param) {
WxMpTemplateMessage templateMessage = null; WxMpTemplateMessage templateMessage = null;
if (param.getJumpType() == 5) { if (param.getJumpType() == 5) {
templateMessage = getTemplateMessage(param.getTemplateId(), param.getPhone(), param.getJumpUrl()); templateMessage = getTemplateMessage(param.getTemplateId(), param.getPhone(), param.getSendTargetType(), param.getJumpUrl());
} else { } else {
templateMessage = getTemplateMessage(param.getTemplateId(), param.getPhone(), param.getJumpType(), param.getJumpAppletPagePath(), param.getJumpAppletUsePath()); templateMessage = getTemplateMessage(param.getTemplateId(), param.getPhone(), param.getSendTargetType(), param.getJumpType(), param.getJumpAppletPagePath(), param.getJumpAppletUsePath());
} }
// 添加模板数据 // 添加模板数据
String templateData = param.getTemplateData(); String templateData = param.getTemplateData();
...@@ -61,15 +74,17 @@ public class SweetWechatTemplateServiceImpl { ...@@ -61,15 +74,17 @@ public class SweetWechatTemplateServiceImpl {
* @param url * @param url
* @return * @return
*/ */
private WxMpTemplateMessage getTemplateMessage(String templateId, String phone, String url) { private WxMpTemplateMessage getTemplateMessage(String templateId, String phone, Integer sendTargetType, String url) {
String openId = getOpenId(phone, sendTargetType);
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
// .toUser(openId) // 接收者openid .toUser(openId) // 接收者openid
.templateId(templateId) // 模板id .templateId(templateId) // 模板id
.url(url) // 模板跳转链接 .url(url) // 模板跳转链接
.build(); .build();
return templateMessage; return templateMessage;
} }
private WxMpTemplateMessage getTemplateMessage(String templateId, String phone, Integer jumpType, String jumpAppletPagePath, Boolean jumpAppletUsePath) { private WxMpTemplateMessage getTemplateMessage(String templateId, String phone, Integer sendTargetType, Integer jumpType, String jumpAppletPagePath, Boolean jumpAppletUsePath) {
String openId = getOpenId(phone, sendTargetType);
//配置小程序信息 //配置小程序信息
WxMpTemplateMessage.MiniProgram miniProgram = new WxMpTemplateMessage.MiniProgram(); WxMpTemplateMessage.MiniProgram miniProgram = new WxMpTemplateMessage.MiniProgram();
miniProgram.setAppid(wechatMaConfigure.getWxMaAppid(jumpType));//小程序appid miniProgram.setAppid(wechatMaConfigure.getWxMaAppid(jumpType));//小程序appid
...@@ -77,12 +92,28 @@ public class SweetWechatTemplateServiceImpl { ...@@ -77,12 +92,28 @@ public class SweetWechatTemplateServiceImpl {
miniProgram.setPagePath(jumpAppletPagePath);//用户点击时需要跳转的小程序页面 miniProgram.setPagePath(jumpAppletPagePath);//用户点击时需要跳转的小程序页面
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
// .toUser(openId) // 接收者openid .toUser(openId) // 接收者openid
.templateId(templateId) // 模板id .templateId(templateId) // 模板id
.miniProgram(miniProgram) // 模板跳转链接 .miniProgram(miniProgram) // 模板跳转链接
.build(); .build();
return templateMessage; return templateMessage;
} }
private String getOpenId(String phone, Integer sendTargetType) { // sendTargetType 将来如果加入其他服务号用获取不同openId
List<SweetAppletUser> sweetAppletUsers = sweetAppletUserMapper.selectList(Wrappers.lambdaQuery(SweetAppletUser.class).eq(SweetAppletUser::getGetPurePhoneNumber, phone));
if (CollectionUtils.isEmpty(sweetAppletUsers)) {
log.info("getOpenId没有此applet用户:[phone=[{}]", phone);
return "";
} else {
SweetAppletUser sweetAppletUser = sweetAppletUsers.get(0);
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(sweetAppletUser.getUnionId());
if (null == userInfo) {
log.info("getOpenId没有此WechatUser用户:[phone={},unionId={}]", phone, sweetAppletUser.getUnionId());
return "";
} else {
return userInfo.getOpenId();
}
}
}
private String sendTmpMsg(WxMpTemplateMessage templateMessage, Integer sendTargetType) { private String sendTmpMsg(WxMpTemplateMessage templateMessage, Integer sendTargetType) {
String msgId = null; String msgId = null;
...@@ -92,7 +123,7 @@ public class SweetWechatTemplateServiceImpl { ...@@ -92,7 +123,7 @@ public class SweetWechatTemplateServiceImpl {
log.info("sendTmpMsg-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired()); log.info("sendTmpMsg-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("sendTmpMsg-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken()); log.info("sendTmpMsg-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage); msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
log.info("模版消息发送成功:[msgId=[{}]", msgId); log.info("模版消息发送成功:[msgId={}]", msgId);
} catch (WxErrorException e) { } catch (WxErrorException e) {
log.error("模版消息发送异常", e); log.error("模版消息发送异常", e);
} }
......
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 小程序登录记录用户解密后信息表
* </p>
*
* @author jiangxiulong
* @since 2021-09-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetAppletUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* user_id
*/
private String userId;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 手机号
*/
@TableField("getPhoneNumber")
private String getPhoneNumber;
/**
* 手机号
*/
@TableField("getPurePhoneNumber")
private String getPurePhoneNumber;
/**
* 地区码
*/
@TableField("getCountryCode")
private String getCountryCode;
/**
* 1草莓 2五百里 3mdsk 4正在
*/
private Integer type;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.sweet.mapper;
import com.liquidnet.service.sweet.entity.SweetAppletUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 小程序登录记录用户解密后信息表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-09-22
*/
public interface SweetAppletUserMapper extends BaseMapper<SweetAppletUser> {
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment