当前位置: 首页 > news >正文

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

相关文章:

  • CCF-CSP认证 202206-2寻宝!大冒险!
  • configured user limit (128) on the number of inotify instances has been reached
  • 常考计算机操作系统面试习题(三上)
  • 项目代码的构建
  • 【QA】单件模式在Qt中有哪些应用?
  • isaacgymEnvs 的yaml文件dt设置
  • 【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程
  • 多源数据融合处理方法综述
  • 机器学习——KNN超参数
  • 第十五章:模板参数推导_《C++ Templates》notes
  • L2-【英音】地道语音语调--连读
  • 一条sql语句在mysql中的执行流程(Mysql基础架构)
  • 【Unity3D】摄像机适配场景以及Canvas适配
  • 使用LangChain开发智能问答系统
  • c#难点整理
  • 【模板】计算几何入门
  • Vue 表单输入绑定,双向绑定
  • 基于 intellij-platform-plugin-template 开发IDEA插件注意事项
  • form 表单内容序列化成一个字符串
  • 大模型架构记录2 【综述-相关代码】
  • 海南儋州市委副书记任延新已赴市人大常委会履新
  • 持续更新丨伊朗内政部长:港口爆炸已致14人死亡
  • 杨荫凯已任浙江省委常委、组织部部长
  • 航天科技集团质量技术部部长严泽想升任集团副总经理
  • 专访|白俄罗斯共产党中央第一书记瑟兰科夫:只有大家联合起来,才能有效应对当前危机所带来的冲击
  • 当哲学与戏剧作为一种生活方式——《人生六戏》分享会