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

相关推荐
Lhappy嘻嘻3 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
伊玛目的门徒3 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
懒鸟一枚6 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
Database_Cool_7 小时前
AI 应用数据底座首选:阿里云 PolarDB 为大模型 RAG 提供一体化支撑
数据库·阿里云
我命由我123458 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑8 小时前
Sentinel安装
java·后端·微服务
凤凰院凶涛QAQ9 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
掘金_答案10 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
猿与禅11 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp11 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维