[toc]
文件版本 | 修改人 | 修改内容 | 修改时间 | |
---|---|---|---|---|
V1 | 张丹峰 | 文档初步拟定 | 2023-05-11 | |
V1.1 | 张丹峰 | 调整文档相关字段 | 2023-05-12 | |
V2 | 张丹峰 | 字段又调整,增加国家字段等 | 2023-05-15 |
- 默认情况下,所以字段一律使用小写
- 不可使用带有空格的属性名和属性值,如果特殊需要,请使用“_”取代空格, 如“top_bar_notification”
- 所有数据中不可携带制表符换行符等,"\t", "\n", "\r", "\01", 如有特殊,请先沟通
- url中不可携带emoji等表情符,字符一律使用utf-8
- 发送时异步发送,避免影响页面加载或者响应速度
- 字符串类型,请避免‘-1’直接作为属性值传入,-1将作为null的默认符号
- swagger接口定义:https://collect-test.azazie.cn/swagger-ui.html
# 生产
https://collect.azazie.cn
# 请求地址
https://collect.azazie.cn/api/v1/emailEvent
# 测试(1个实例)
https://collect-test.azazie.cn
- 请求密钥请联系数据搜集方获取
字段 | 是否必填 | 类型 | 参数含义 | 备注 | |
---|---|---|---|---|---|
did | true | string | client_id | 设备id,作为去重的唯一标识 | |
c | true | string | country | US,CA | |
p | false | int | platform | 1,2,3,4, 分别代表:pc,mweb,ios, android, 如果没有请勿传改字段 | |
lang | true | string | language | 语言 | |
s | true | string | Source | utm-source,代表邮件发送平台, azius, reach, facebook | |
m | true | string | Medium | utm-medium, email, cpc, banner, 邮件统一用email | |
cp | true | string | Campaign | utm-campaign,代表campaign名称 | |
ctt | true | string | Content | utm-content,代表邮件标题 | |
a | true | string | 事件类型 | open/click | |
et | true | long | email sent time | 邮件发送时间,精确到ms | |
lgt | true | long | log time | 日志时间,精确到ms | |
p1 | false | string | 预留字段01 | ||
p2 | false | string | 预留字段02 | ||
p3 | false | string | 预留字段03 | ||
p4 | false | string | 预留字段04 | ||
p5 | false | string | 预留字段05 | ||
p6 | false | string | 预留字段06 | ||
注意:
如下四个字段均是通过:Source+Campaign+Content作为唯一值去后台数据库中查询得到
计划ID 邮件模版ID 邮件场景 发送人群ID
/**
* 签名生成方法, 方法如下:
* 1,把通用字段参数按照字典升序顺序排列(注意:不包含sign和具体事件参数的任何数据)
* 2,然后拼接参数为name=Ivanl001&age=10&hobby=game形式,
* 3,将所有大写转小写,然后拼接密钥:act=1&am=appstore&c=us&cv=v1.0.1&di=dfakfdafdaslfasdfasfdasfasdfdsa&entry=1&ip=10.0.0.1&ldt=1.22&lgt=1506047606608&nw=wifi&p=1&pl=1&sr=1080*960&secretkey=me02kunyfqcejqbdwlaf0ghs3j2r8wuu
* 4,把待编码字符串进行base64编码:YWN0PTEmYW09YXBwc3RvcmUmYz11cyZjdj12MS4wLjEmZGk9ZGZha2ZkYWZkYXNsZmFzZGZhc2ZkYXNmYXNkZmRzYSZlbnRyeT0xJmlwPTEwLjAuMC4xJmxkdD0xLjIyJmxndD0xNTA2MDQ3NjA2NjA4Jm53PXdpZmkmcD0xJnBsPTEmc3I9MTA4MCo5NjAmc2VjcmV0a2V5PW1lMDJrdW55ZnFjZWpxYmR3bGFmMGdoczNqMnI4d3V1
* 5,将base64编码后的字符串进行md5加密:c34b30f0f77b63ef80f1cc3b841b3a89
*/
//服务端加密源码参考:com.lebbay.common.utils.IMSignUtils
//java代码参考
//移除本身的sign字段
String theSign = (String) map.remove("sign");
/**
* 签名生成方法, 方法如下:
* 1,先把参数按照字典升序顺序排列,
* 2,然后拼接参数为name=Ivanl001&age=10&hobby=game形式,
* 3,将所有大写转小写,然后拼接密钥:name=Ivanl001&age=10&hobby=game&secretkey=abcdefghijklmn
* 4,把待编码字符串进行base64编码
* 5,将base64编码后的字符串进行md5加密
*/
public static String createSign(Map<String, Object> params, String secretkey){
StringBuilder sb = new StringBuilder();
/*
* 1, 先把参数按照字典升序顺序排列
*/
Map<String, Object> sortParams = new TreeMap<>(params);
/*
* 2, 遍历排序的字典,并拼接"key=value"格式
*/
for (Map.Entry<String, Object> entry : sortParams.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().toString().trim();
if (!StringUtils.isEmpty(value)) {
sb.append("&").append(key).append("=").append(value);
}
}
/*
* 3, 将所有大写转小写
*/
String stringToSign = sb.append("&secretkey=").append(secretkey).toString().replaceFirst("&","").toLowerCase();
log.info("-----组装后转小写结果是:-----" + stringToSign);
/*
* 4, base64编码
*/
String basedStringToSign = new String(Base64.getEncoder().encode(stringToSign.getBytes()));
log.info("-----base64转码后结果:-----" + basedStringToSign);
/*
* 5, 将base64编码后的字符串进行md5加密
*/
String sign = DigestUtils.md5Hex(basedStringToSign);
log.info("-----md5加密后结果是:-----" + sign);
/*
* 返回结果
*/
return sign;
}