【第三方组件使用方法】--实现微信推送模板消息
程序员文章站
2022-04-11 17:47:30
...
如果是在开发中我们想要使用微信发送模板消息,我们可以使用测试号来实现,当项目真正上线的时候也可以将测试号无缝替换为正式公众号。
1. 微信模板消息的使用步骤
1.1 在微信公众平台的测试号中定义一个微信消息模板
这里需要注意的是参数需要以.DATA结尾
感谢您使用微信点餐平台
您的订单: {{orderId.DATA}}
当前状态为:{{orderStatus.DATA}}
{{tip.DATA}}
欢迎您再次使用微信点餐平台????!
1.2 开始导入maven依赖,这里借助第三方对微信公众平台封装的SDK
<!--微信公众模块 sdk-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.6.0</version>
</dependency>
1.3 编写微信公众平台相关配置类,WechatAccountConfig
与WechatMpConfig
@Component
@Data
@ConfigurationProperties(prefix = "wechat")
public class WechatAccountConfig {
//公众平台 appid
private String mpAppId;
//公众平台 app**
private String mpAppSecret;
//模板id map集合
Map<String,String> templateId;
}
====================================分割线
/**
********* 微信公众账号模块配置类
*/
@Component
public class WechatMpConfig {
@Autowired
WechatAccountConfig wechatAccountConfig;
@Bean
public WxMpService wxMpService(){
WxMpService wxMpService=new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(this.wxMpConfigStorage());
return wxMpService;
}
@Bean
public WxMpConfigStorage wxMpConfigStorage(){
WxMpDefaultConfigImpl wxMpDefaultConfig=new WxMpDefaultConfigImpl();
wxMpDefaultConfig.setAppId(wechatAccountConfig.getMpAppId());
wxMpDefaultConfig.setSecret(wechatAccountConfig.getMpAppSecret());
return wxMpDefaultConfig;
}
}
1.4 编写消息推送业务实现类
@Service
@Slf4j
public class PushMessageServiceImpl implements PushMessageService {
@Autowired
private WxMpService wxMpService;
@Autowired
private WechatAccountConfig accountConfig;
/**
* 推送微信点餐订单状态信息
*
* @param orderDTO
* @param dataList
*/
@Override
public void orderStatus(OrderDTO orderDTO, List<WxMpTemplateData> dataList){
WxMpTemplateMessage templateMessage=new WxMpTemplateMessage();
//设置模板id
templateMessage.setTemplateId(accountConfig.getTemplateId().get(WechatTemplateConstat.ORDER_STATUS_KEY));
//设置接收人openid
templateMessage.setToUser(orderDTO.getBuyerOpenid());
//将模板内容填冲
templateMessage.setData(dataList);
try {
wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
} catch (WxErrorException e) {
log.error("【微信模板消息】发送失败,{}",e);
}
}
}
1.5 编写模板消息构建类WechatTemplateMsgUtil
public class WechatTemplateMsgUtil {
public static List<WxMpTemplateData> builderTemplateData(Map<String,String> params){
List<WxMpTemplateData> wxMpTemplateDataList=
params.entrySet()
.stream()
.map(e->new WxMpTemplateData(e.getKey(),e.getValue())).collect(Collectors.toList());
return wxMpTemplateDataList;
}
}
1.6 在相关业务中调用消息推送服务
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
@Autowired
private PushMessageService pushMessageService;
@Autowired
private ProjectUrlConfig projectUrlConfig;
/**
* 创建订单
*
* @param orderDTO
* @return 订单主实例
*/
@Override
@Transactional
public OrderDTO createOrder(OrderDTO orderDTO) {
/*省去其他业务代码*/
//构建模板消息
HashMap<String,String> tempMap= new HashMap<>();
tempMap.put("orderId",master.getOrderId());
tempMap.put("orderStatus", EnumUtils.getEnumByCode(master.getOrderStatus(),OrderStatusEnums.class).getMsg());
tempMap.put("tip",EnumUtils.getEnumByCode(master.getOrderStatus(), WechatTemplateEnum.class).getMsg());
//发送模板消息
pushMessageService.orderStatus(orderDTO, WechatTemplateMsgUtil.builderTemplateData(tempMap));
return orderDTO;
}