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

相关推荐
澈2071 天前
C++并查集:高效解决连通性问题
java·c++·算法
2401_873479401 天前
运营活动被薅羊毛怎么防?用IP查询+设备指纹联动封堵漏洞
java·网络·tcp/ip·github
ShiJiuD6668889991 天前
大事件板块一
java
摇滚侠1 天前
@Autowired 和 @Resource 的区别
java·开发语言
SeaTunnel1 天前
(八)收官篇 | 数据平台最后一公里:数据集成开发设计与上线治理实战
java·大数据·开发语言·白鲸开源
吴声子夜歌1 天前
Java——线程的基本协作机制
java·线程协作
谙弆悕博士1 天前
【附C++源码】从零开始实现 2048 游戏
java·c++·游戏·源码·项目实战·2048
独自归家的兔1 天前
OCPP 1.6 协议详解:GetLocalListVersion 获取本地列表版本指令
java·后端·物联网·spring·ocpp1.6
Apache RocketMQ1 天前
RocketMQ源码解析——秒级定时消息介绍
java·云原生·消息队列·rocketmq·java-rocketmq
xiaoming00181 天前
JAVA项目打包部署运维全流程(多服务、批量)
java·linux·运维