签名算法
更新时间:2026-07-30 11:22:00
签名算法
第一步:根据参数的名称,排除 signature 参数在外,按照 ASCII 升序拼接参数
示例:appId=rDOMKNMLaEisDynamic=1sign=【视频短信测试】templateName=视频短信模板 timestamp=1624938115
第二步:用 HmacSHA256 算法对拼接的字符串进行加密,秘钥为客户密码,生成签名。
HmacSHA256(string)后的结果就是 signature 的值
特别提醒和推荐:body 字段不参与加密(创建模板、创建签名),我们对 list 中的内容拼接推荐如下方式(中间无空格,属性之间没有逗号):
1、如果 list 中是 object 则按照如下格式拼接,也是按照 ASCII 码顺序拼接参数:
[{phone=13900001111v1=变量1v2=变量2},{phone=17600001111v1=变量1v2=变量2}]2、如果 list 中是 string 格式的号码则按照如下格式拼接:
[
13912345678,
13814785236
]常见接口的请求参数和需要加密的字符串如下:
1、创建静态模板
请求参数:
{"appId":"tkIEPrflI3","body":[{"content":"V2静态模板","exType":"txt","sort":"1","type":"text"}],"isDynamic":0,"sign":"【唐华春主账号签名】","signature":"d35ce2a008926f15a6675f3efffb1ba211fa2426c74ad273f2613767f7d6f35b","templateName":"V2_静态模板","timestamp":1636699086}
参与加密:
appId=tkIEPrflI3isDynamic=0sign=【唐华春主账号签名】templateName=V2_静态模板timestamp=16366990862、创建动态模板
请求参数:
{"appId":"tkIEPrflI3","body":[{"content":"V2动态模板变量一 ${v1}变量二 ${v2}变量三 ${v3}变量四 ${v4}变量五 ${v5}","exType":"txt","sort":"1","type":"text"}],"isDynamic":1,"sign":"【唐华春主账号签名】","signature":"fe91e1d75b389f7941a34db08b5133415d767bcc32e89186a39a33cb913fb5d1","templateName":"V2_唐华春动态模板","timestamp":1636699087}
参与加密:
appId=tkIEPrflI3isDynamic=1sign=【唐华春主账号签名】templateName=V2_唐华春动态模板timestamp=16366990873、查询模板状态:
请求参数:
{"appId":"tkIEPrflI3","signature":"01cc4650d6dcaea5f1472bd1eff97cecce5754cc3f5df158bdf8dc6c1d9d9d9a","templateId":"1418","timestamp":1636699999}
参与加密:
appId=tkIEPrflI3templateId=1418timestamp=16366999994、查询模板列表
请求参数:
{"appId":"tkIEPrflI3","pageNo":1,"pageSize":10,"signature":"827d9a71458a251f02c6970526ffeb67666f85c5faaaaf794cea83f88774daaa","status":"3","timestamp":1636700053}
参与加密:
appId=tkIEPrflI3pageNo=1pageSize=10status=3timestamp=16367000535、发送静态模板
请求参数:
{"appId":"tkIEPrflI3","phones":["13712345678","15612124545","18998745612"],"signature":"476a31747f553e84d5e5f4608604a2cc31d85e86467d4f687f4d296bd61c9df5","submitNo":"68fd057e454340fa8bb224c2fcfec19f","templateId":"1420","timestamp":1636700182}
参与加密:
appId=tkIEPrflI3phones=[13712345678,15612124545,18998745612]submitNo=68fd057e454340fa8bb224c2fcfec19ftemplateId=1420timestamp=16367001826、发送动态模板
请求参数:
{"appId":"tkIEPrflI3","dynamicVars":[{"phone":"13900001111","v1":"变量1","v2":"变量2","v3":"变量3","v4":"变量4","v5":"变量5"},{"phone":"17600001111","v1":"变量1","v2":"变量2","v3":"变量3","v4":"变量4","v5":"变量5"},{"phone":"18900001111","v1":"变量1","v2":"变量2","v3":"变量3","v4":"变量4","v5":"变量5"}],"signature":"8e38f6036491aca9f6f43029ec388162b3b84e8a7bb11a81b8ac837b6d948441","submitNo":"299cbbf7b29d446dacea3d445eeaa89b","templateId":"1417","timestamp":1636700243}
参与加密:
appId=tkIEPrflI3dynamicVars=[{phone=13900001111v1=变量1v2=变量2v3=变量3v4=变量4v5=变量5},{phone=17600001111v1=变量1v2=变量2v3=变量3v4=变量4v5=变量5},{phone=18900001111v1=变量1v2=变量2v3=变量3v4=变量4v5=变量5}]submitNo=299cbbf7b29d446dacea3d445eeaa89btemplateId=1417timestamp=1636700243java 完整示例
java 示例包含所有的请求接口,Http 工具类和 json 工具类都用了 hutool 包,开发者可以自行替换,hutool 的 maven 坐标为:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.14</version>
</dependency>示例:
package com.chuanglan.test.video;
import cn.hutool.core.lang.UUID;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.*;
public class ApiV2NoBody {
private static String appId = "tkIEPrflI3";
private static String sign = "【唐华春主账号签名】";
private static String appSecret = "Is2cVPFvCHXxBY";
private static String host = "http://172.16.41.225:8092";
private static String base64 = "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";
public static void main(String[] args) throws InterruptedException {
// //创建静态模板
buildTemplate("V2_静态模板", 0);
// //创建动态模板
// buildTemplate("V2_唐华春动态模板", 1);
// //查询模板状态
// queryTemplateStatus("1418");
// //查询模板列表
// queryTemplateList("3");
// //发送静态模板
// sendStaticTemplate("10401", "18717950159");
// //发送动态模板
// sendDynamicTemplate("10873");
}
/**
* 构建模板
*
* @param templateName 模板名称
* @param isDynamic 是否是动态模板 0:静态 1:动态
*/
private static void buildTemplate(String templateName, int isDynamic) {
//封装模板内容
Map<String, Object> contentMap = new TreeMap<>();
contentMap.put("exType", "txt");
contentMap.put("sort", "1");
contentMap.put("type", "text");
if (isDynamic == 1) {
contentMap.put("content", "V2动态模板变量一${v1}变量二${v2}变量三${v3}变量四${v4}变量五${v5}");
} else {
contentMap.put("content", "疫情从未停止,大家仍然提高警惕,坚持佩戴口罩!\n" +
"此信息免流,回T退订");
}
List<Map<String, Object>> contentList = new ArrayList<>();
contentList.add(contentMap);
Map<String, Object> contentMap2 = new TreeMap<>();
contentMap2.put("exType", "jpg");
contentMap2.put("sort", "2");
contentMap2.put("type", "image");
contentMap2.put("content", base64);
contentList.add(contentMap2);
//封装需要加密的内容
Map<String, Object> map = new TreeMap<>();
map.put("appId", appId);
map.put("sign", sign);
map.put("body", contentList);
map.put("templateName", templateName);
map.put("isDynamic", isDynamic);
map.put("timestamp", System.currentTimeMillis() / 1000);
//生成签名
map.put("signature", sha256(map2Plaintext(map)));
//请求生成模板
String url = host + "/rcs/api/v2/template/addVideo";
System.out.println("准备提交的参数为:" + JSONUtil.toJsonStr(map));
System.out.println("提交返回值:" + HttpUtil.post(url, JSONUtil.toJsonStr(map)));
}
/**
* list map到字符串
*
* @param list 列表
* @return {@link String}
*/
private static String listTreeMapToString(List<TreeMap> list) {
StringBuilder s = new StringBuilder("[");
for (int i = 0; i < list.size(); i++) {
s.append("{");
list.get(i).forEach((k, v) -> {
s.append(k.toString());
s.append("=");
s.append(v.toString());
});
s.append("}");
if (i < list.size() - 1) {
s.append(",");
}
}
s.append("]");
return s.toString();
}
private static String listObjectToString(List<Object> list) {
StringBuilder s = new StringBuilder("[");
for (int i = 0; i < list.size(); i++) {
s.append(list.get(i).toString());
if (i < list.size() - 1) {
s.append(",");
}
}
s.append("]");
return s.toString();
}
/**
* 查询模板状态
*
* @param templateId 模板id
*/
private static void queryTemplateStatus(String templateId) {
String url = host + "/rcs/api/v2/template/findTemplate";
Map<String, Object> map = new TreeMap<>();
map.put("appId", appId);
map.put("templateId", templateId);
map.put("timestamp", System.currentTimeMillis() / 1000);
map.put("signature", sha256(map2Plaintext(map)));
String res = HttpUtil.post(url, JSONUtil.toJsonStr(map));
System.out.println("准备提交的参数为:" + JSONUtil.toJsonStr(map));
System.out.println("查询模板状态结果:" + res);
}
/**
* 查询模板列表
*
* @param status 状态 1:审核中 2:等待运营商审核,3:审核成功(等价于上架) 4:审核失败
*/
private static void queryTemplateList(String status) {
String url = host + "/rcs/api/v2/template/listVideoTemplate";
Map<String, Object> map = new TreeMap<>();
map.put("appId", appId);
map.put("pageNo", 1);
map.put("pageSize", 10);
map.put("status", status);
map.put("timestamp", System.currentTimeMillis() / 1000);
map.put("signature", sha256(map2Plaintext(map)));
String res = HttpUtil.post(url, JSONUtil.toJsonStr(map));
System.out.println("准备提交的参数为:" + JSONUtil.toJsonStr(map));
System.out.println("查询模板列表结果:" + res);
}
/**
* 发送静态模板
*
* @param templateId 模板id
*/
private static void sendStaticTemplate(String templateId, String phone) {
Map<String, Object> map = new TreeMap<>();
map.put("appId", appId);
map.put("submitNo", UUID.fastUUID().toString().replaceAll("-", ""));
map.put("templateId", templateId);
List<String> phones = new ArrayList<>();
phones.add(phone);
map.put("phones", phones);
map.put("timestamp", System.currentTimeMillis() / 1000);
map.put("signature", sha256(map2Plaintext(map)));
String url = host + "/rcs/api/v2/msg/submitVideoTemplate";
System.out.println("准备提交的参数为:" + JSONUtil.toJsonStr(map));
System.out.println("发送静态模板结果:" + HttpUtil.post(url, JSONUtil.toJsonStr(map)));
}
/**
* 发送动态模板
*
* @param templateId 模板id
*/
private static void sendDynamicTemplate(String templateId) {
List<Map<String, Object>> mapList = new ArrayList<>();
mapList.add(buildDynamicVars("13900001111"));
mapList.add(buildDynamicVars("17600001111"));
mapList.add(buildDynamicVars("18900001111"));
Map<String, Object> map = new TreeMap<>();
map.put("appId", appId);
map.put("submitNo", UUID.fastUUID().toString().replaceAll("-", ""));
map.put("dynamicVars", mapList);
map.put("timestamp", System.currentTimeMillis() / 1000);
map.put("templateId", templateId);
map.put("signature", sha256(map2Plaintext(map)));
String url = host + "/rcs/api/v2/msg/submitVideoTemplate";
System.out.println("准备提交的参数为:" + JSONUtil.toJsonStr(map));
System.out.println("发送动态模板结果:" + HttpUtil.post(url, JSONUtil.toJsonStr(map)));
}
private static Map<String, Object> buildDynamicVars(String phone) {
Map<String, Object> dynamicVars = new TreeMap<>();
dynamicVars.put("phone", phone);
dynamicVars.put("v1", "变量1");
dynamicVars.put("v2", "变量2");
dynamicVars.put("v3", "变量3");
dynamicVars.put("v4", "变量4");
dynamicVars.put("v5", "变量5");
return dynamicVars;
}
/**
* map转待加密的明文
*
* @param map map
* @return {@link String}
*/
private static String map2Plaintext(Map<String, Object> map) {
StringBuilder builder = new StringBuilder();
map.forEach((k, v) -> {
if (!"body".equals(k)) {
if (v instanceof List) {
if (JSONUtil.toJsonStr(v).contains("{")) {
List<TreeMap> list = JSONUtil.toList(JSONUtil.toJsonStr(v), TreeMap.class);
builder.append(k).append("=").append(listTreeMapToString(list));
} else {
List<Object> list = JSONUtil.toList(JSONUtil.toJsonStr(v), Object.class);
builder.append(k).append("=").append(listObjectToString(list));
}
} else {
builder.append(k).append("=").append(v);
}
}
});
return builder.toString();
}
/**
* byte转string
*
* @param bytes 字节
* @return {@link String}
*/
private static String byte2String(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
int v = b & 0xFF;
String hv = Integer.toHexString(v).toLowerCase(Locale.CHINA);
if (hv.length() < 2) {
sb.append(0);
}
sb.append(hv);
}
return sb.toString();
}
/**
* sha256
*
* @param plaintext 明文
* @return {@link String}
*/
private static String sha256(String plaintext) {
try {
System.out.println("需要加密的参数为:" + plaintext);
Mac sha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(appSecret.getBytes(), "HmacSHA256");
sha256.init(secretKey);
byte[] bytes = sha256.doFinal(plaintext.getBytes());
String sign = byte2String(bytes);
System.out.println("签名为:" + sign);
return sign;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
这篇文档对您有帮助吗?




