欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【第三方组件使用方法】--实现微信推送模板消息

程序员文章站 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 编写微信公众平台相关配置类,WechatAccountConfigWechatMpConfig
@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;
    }

1.7 模板消息实现效果

【第三方组件使用方法】--实现微信推送模板消息