Java-腾讯云短信模板兼容阿里云短信模板-短信模板参数生成

最新版本更新
https://code.jiangjiesheng.cn/article/362?from=csdn

模板

腾讯云:您好!{}的{},有{}发生{} 阿里云:您好!{orgName}的{monitorName},有{equipName}发生${status}

原腾讯云短信发送的代码兼容阿里云短信模板,前提:参数顺序不变,文案可以变化。

方案:提取阿里云短信模板参数字段,比如上面的,orgName、monitorName、equipName、status,结合腾讯云短信模板入参传的有序List转成key-value Map,最后转成阿里云的需要json字符串。

提取阿里云短信模板中的所有参数字段:

复制代码
	public static final String ALIYUN_PARAM_REGEX = "\\$\\{(.*?)}";
	
	//ReUtil来自hutool:
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>4.5.6</version>
        </dependency>
        
    //从阿里云模板中提取参数字段
	List<String> aliTempParamKeys = ReUtil.findAllGroup1(ALIYUN_PARAM_REGEX, templateMsg);
	
	//转成和腾讯云一样的模板,用于构建最后的短信content内容,自己保存短信内容。
    //String templateMsg = templateMsg.replaceAll(ALIYUN_PARAM_REGEX, "{}");
    
	//构建阿里云的短信接口入参:
	Map<String,Object> newTemplateParams = buildTemplateParamsMap(templateId,aliTempParamKeys, params);
	
	/**
     * 将参数模板,处理成有序的 KeyValue 数组
     * <p>
     * 原因是,部分短信平台并不是使用 key 作为参数,而是数组下标,例如说 <a href="https://cloud.tencent.com/document/product/382/39023">腾讯云</a>
     *
     * @param templateId  短信模板id
     * @param aliTempParamKeys  短信模板中的字段
     * @param paramsValue 提交的入参值
     * @return 处理后的参数 阿里云使用
     */
    Map<String,Object> buildTemplateParamsMap(String templateId, List<String> aliTempParamKeys, String[] paramsValue) {
        Map<String,Object> map = Maps.newHashMap();
        if (CollectionUtils.isEmpty(aliTempParamKeys) || paramsValue == null || paramsValue.length == 0) {
            return map;
        }
        // 防止 templateId: '1875303' ,这种参数对不上的情况,
        // if (aliTempParamKeys.size() != paramsValue.length) {
        //    throw new GnException("短信参数个数和模板不匹配");
        // }
        int maxIdx = paramsValue.length - 1;
        boolean foundBadParams = false;
        for (int i = 0, len = aliTempParamKeys.size(); i < len; i++) {
            String value;
            if (i > maxIdx) {
                value = "-";
                foundBadParams = true;
            } else {
                value = paramsValue[i];
            }
            map.put(aliTempParamKeys.get(i), value);
        }
        if (foundBadParams) {
            log.error("构建阿里云短信出现入参和模板参数个数对不上的情况,templateId:{},aliTempParamKeys:{},paramsValue:{},结果:{}",
                    templateId, JSONUtil.toJsonStr(aliTempParamKeys), JSONUtil.toJsonStr(paramsValue), JSONUtil.toJsonStr(map));
        }
        return map;
    }

最新版本更新
https://code.jiangjiesheng.cn/article/362?from=csdn

相关推荐
java1234_小锋5 分钟前
Java高频面试题:Zookeeper的通知机制是什么?
java·zookeeper·java-zookeeper
计算机学姐6 分钟前
基于SpringBoot的药房管理系统【个性化推荐+数据可视化】
java·spring boot·后端·mysql·spring·信息可视化·java-ee
今天你TLE了吗9 分钟前
JVM学习笔记:第二章——类加载子系统
java·开发语言·jvm·笔记
峰回路转之后10 分钟前
SmartBi集成到第三方系统
java
一条咸鱼_SaltyFish12 分钟前
大文件性能优化:从百倍提升看底层原理的实践思考
java·性能优化·架构演进·大文件处理·nagle·零对象设计
好家伙VCC14 分钟前
**发散创新:用 Rust构建多智能体系统,让分布式协作更高效**在人工智能快速演进的今天,**多智能体系统(
java·人工智能·分布式·python·rust
小沈同学呀16 分钟前
Spring Boot实现加密字段模糊查询的最佳实践
java·spring boot·后端·encrypt
万能的小裴同学18 分钟前
饥荒Mod
java·开发语言·junit
Jack_David22 分钟前
kafka_2.13-4.1.1集群安装
java·分布式·kafka
HAPPY酷23 分钟前
C++ 高性能消息服务器实战:融合线程、异步与回调的三大核心设计
java·服务器·c++