第三方短信平台接口规范
为了在用户营销模块使用将第三方短信平台,当您进行第三方短信平台开发时,需要遵守下面的各功能模块接口规范。
短信请求通用参数
URL参数 | 含义 | 示例 |
timestamp | 秒级时间戳 | 1631865523 |
nonce | 32位随机字符串 | 2e6eceb5737b473284c930c8ef79090e |
请求URL示例:
{第三方短信所有接口的url}?timestamp=1631865523&nonce=2e6eceb5737b473284c930c8ef79090e
Header | 含义 | 说明 |
X-QA-Hmac-Signature | 权鉴签名 | 开启权鉴时使用,权鉴方式见下文。 未开启权鉴时,该Header填空字符串""。 |
短信请求权鉴
若短信需要鉴权,请在配置第三方短信接口时开启权鉴并填写密钥,参见新建第三方短信平台接口。
QuickAudience会根据用户填写的密钥与URL请求参数timestamp和nonce进行HmacSHA256Hex签名并生成signature,并将此signature通过Request Header传递。您的服务接收到请求后,同样根据URL参数与webhook通道配置的密钥进行HmacSHA256Hex算法加密。如果计算的值与从Request Header中传过来的signature相同,则可以确定是此请求是从QuickAudience发出的,鉴权成功。
参数 | 含义 | 示例 |
key | webhook配置的密钥 | 123456789 |
签名算法示例:
public String makeSignature(String key, String timestamp, String nonce) {
String str = generateStr(key, timestamp, nonce);
return HmacUtils.hmacSha256Hex(key, str.replaceAll("\\s+", ""));
}
/**
* 签名待处理的字符串拼接
*/
public static String generateStr(String key, String timestamp, String nonce){
String[] array = new String[] { key, timestamp, nonce};
StringBuffer sb = new StringBuffer();
// 字符串排序
Arrays.sort(array);
for (int i = 0; i < 3; i++) {
sb.append(array[i]);
}
return sb.toString();
}
短信模板审核接口
接口描述 | 短信模板审核 | |||
URL | ${prefix}/sms/smsTemplate?timestamp=&nonce= | |||
请求方式 | post | |||
请求类型 | application/json | |||
返回类型 | */* | |||
参数名 | 数据类型 | 参数类型 | 是否必填 | 说明 |
1.remark | string | body | 是 | 短信模板申请说明。请在申请说明中描述您的业务使用场景,长度为1~100个字符。 |
2.templateContent | string | 是 | 模板内容,长度为1~500个字符。 | |
3.templateName | string | 是 | 模板名称,长度为1~30个字符。 | |
4.templateSubject | string | 否 | 模板主题,长度为1~20个字符。 | |
5.templateType | integer(int32) | 是 | 短信类型。
| |
状态码 | 描述 | 说明 | ||
200 | OK | 请求成功。 | ||
401 | Unauthorized | 请求未经授权。 | ||
403 | Forbidden | 请求被拒绝。 | ||
404 | Not Found | 请求的资源不存在。 | ||
返回属性名 | 类型 | 说明 | ||
1.platformName | string | 短信服务方名称,与接口配置时填写的接口名称一致。 | ||
2.code | string | 请求状态码,200或OK表示成功。 | ||
3.message | string | 状态码描述。 | ||
4.requestId | string | 请求ID。 | ||
5.templateCode | string | 短信模板code,用于查看模板申请状态和结果。 | ||
示例 | ||||
请求参数 | -d '{"remark":"string","templateContent":"string","templateName":"string","templateSubject":"string","templateType":0}' | |||
返回值 | {"platformName":"string","code":"string","templateCode":"string","message":"string","requestId":"string"} |
短信模板修改接口
接口描述 | 短信模板修改 | |||
URL | ${prefix}/sms/smsTemplate/{templateCode}?timestamp=&nonce= | |||
请求方式 | put | |||
请求类型 | application/json | |||
返回类型 | */* | |||
参数名 | 数据类型 | 参数类型 | 是否必填 | 说明 |
1.remark | string | body | 否 | 短信模板申请说明。请在申请说明中描述您的业务使用场景,长度为1~100个字符。 |
2.templateContent | string | 否 | 模板内容,长度为1~500个字符。 | |
3.templateName | string | 否 | 模板名称,长度为1~30个字符。 | |
4.templateSubject | string | 否 | 模板主题,长度为1~20个字符。 | |
5.templateType | integer(int32) | 否 | 短信类型。
| |
状态码 | 描述 | 说明 | ||
200 | OK | 请求成功。 | ||
401 | Unauthorized | 请求未经授权。 | ||
403 | Forbidden | 请求被拒绝。 | ||
404 | Not Found | 请求的资源不存在。 | ||
返回属性名 | 类型 | 说明 | ||
1.platformName | string | 短信服务方名称,与接口配置时填写的接口名称一致。 | ||
2.code | string | 请求状态码,200或OK表示成功。 | ||
3.message | string | 状态码描述。 | ||
4.requestId | string | 请求ID。 | ||
5.templateCode | string | 短信模板code,用于查看模板申请状态和结果。 | ||
示例 | ||||
请求参数 | -d '{"remark":"string","templateContent":"string","templateName":"string","templateSubject":"string","templateType":0}' | |||
返回值 | {"platformName":"string","code":"string","templateCode":"string","message":"string","requestId":"string"} |
短信签名审核状态查询接口
接口描述 | 短信签名审核状态查询 | |||
URL | ${prefix}/sms/smsSign/{signName}?timestamp=&nonce= | |||
请求方式 | get | |||
请求类型 | application/json | |||
返回类型 | */* | |||
参数名 | 数据类型 | 参数类型 | 是否必填 | 说明 |
1.signName | string | path | 是 | 短信签名。 |
状态码 | 描述 | 说明 | ||
200 | OK | 请求成功。 | ||
401 | Unauthorized | 请求未经授权。 | ||
403 | Forbidden | 请求被拒绝。 | ||
404 | Not Found | 请求的资源不存在。 | ||
返回属性名 | 类型 | 说明 | ||
1.platformName | string | 短信服务方名称,与接口配置时填写的接口名称一致。 | ||
2.code | string | 请求状态码,200或OK表示成功。 | ||
3.createDate | string | 短信签名的创建日期和时间,如:2019-01-08 16:44:13。 | ||
4.message | string | 状态码描述。 | ||
5.reason | string | 审核备注。如果审核状态为审核通过或审核中,参数Reason显示为“无审核备注”;如果审核状态为审核未通过,参数Reason显示审核的具体原因。 | ||
6.requestId | string | 请求ID。 | ||
7.signName | string | 短信签名。 | ||
8.signStatus | integer(int32) | 签名审核状态。
| ||
示例 | ||||
请求参数 | 无示例 | |||
返回值 | {"reason":"string","code":"string","signName":"string","requestId":"string","signStatus":0,"platformName":"string","message":"string","createDate":"string"} |
短信模板审核状态查询接口
接口描述 | 短信模板审核状态查询 | |||
URL | ${prefix}/sms/smsTemplate/{templateCode}?timestamp=&nonce= | |||
请求方式 | get | |||
请求类型 | application/json | |||
返回类型 | */* | |||
参数名 | 数据类型 | 参数类型 | 是否必填 | 说明 |
1.templateCode | string | path | 是 | 模板code。 |
状态码 | 描述 | 说明 | ||
200 | OK | 请求成功。 | ||
401 | Unauthorized | 请求未经授权。 | ||
403 | Forbidden | 请求被拒绝。 | ||
404 | Not Found | 请求的资源不存在。 | ||
返回属性名 | 类型 | 说明 | ||
1.platformName | string | 服务方名称,与接口配置时填写的接口名称一致。 | ||
2.code | string | 请求状态码,200或OK表示成功。 | ||
3.createDate | string | 模板的创建日期和时间,如:2019-01-08 16:44:13。 | ||
4.message | string | 状态码描述。 | ||
5.reason | string | 审核备注。如果审核状态为审核通过或审核中,参数Reason显示为“无审核备注”;如果审核状态为审核未通过,参数Reason显示审核的具体原因。 | ||
6.requestId | string | 请求ID。 | ||
7.templateCode | string | 模板code。 | ||
8.templateContent | string | 模板内容。 | ||
9.templateName | string | 模板名称。 | ||
10.templateStatus | integer(int32) | 模板审核状态。
| ||
11.templateType | integer(int32) | 短信模板类型。
| ||
示例 | ||||
请求参数 | 无示例 | |||
返回值 | {"templateStatus":0,"templateType":0,"reason":"string","code":"string","templateName":"string","requestId":"string","templateContent":"string","platformName":"string","templateCode":"string","message":"string","createDate":"string"} |
短信发送接口(单条发送)
接口描述 | 单条短信发送 | |||
URL | ${prefix}/sms/send?timestamp=&nonce= | |||
请求方式 | post | |||
请求类型 | application/json | |||
返回类型 | */* | |||
参数名 | 数据类型 | 参数类型 | 是否必填 | 说明 |
1.limit | integer(int64) | body | 否 | 发送人数限制。 |
2.outId | string | 是 | 外部流水扩展字段。 | |
3.phoneNumbers | string | 是 | 接收短信的手机号码。 国内短信:11位手机号码,例如159********;国际/中国香港、中国澳门和中国台湾消息:国际区号+号码,例如85200******。 | |
4.signName | string | 是 | 短信签名名称。 | |
5.templateCode | string | 是 | 模板code。 | |
6.templateParam | string | 否 | 短信模板变量对应的实际值,JSON格式。例如:[{"name":"TemplateParamJson","age":"age"}],和 phoneNumbers 的数量保持一致,数量不一致会报错。 | |
状态码 | 描述 | 说明 | ||
200 | OK | 请求成功。 | ||
401 | Unauthorized | 请求未经授权。 | ||
403 | Forbidden | 请求被拒绝。 | ||
404 | Not Found | 请求的资源不存在。 | ||
返回属性名 | 类型 | 说明 | ||
1.bizId | string | 发送回执ID。 | ||
2.platformName | string | 服务方名称,与接口配置时填写的接口名称一致。 | ||
3.code | string | 请求状态码,200或OK表示成功。 | ||
4.message | string | 状态码描述。 | ||
5.requestId | string | 请求ID。 | ||
示例 | ||||
请求参数 | -d '{"limit":0,"outId":"string","phoneNumbers":"string","signName":"string","templateCode":"string","templateParam":"string"}' | |||
返回值 | {"bizId":"string","platformName":"string","code":"string","message":"string","requestId":"string"} |
短信发送接口(批量发送)
接口描述 | 大量短信发送 | |||
URL | ${prefix}/sms/sendBatch?timestamp=&nonce= | |||
请求方式 | post | |||
请求类型 | application/json | |||
返回类型 | */* | |||
参数名 | 数据类型 | 参数类型 | 是否必填 | 说明 |
1.limit | integer(int64) | body | 否 | 发送人数限制。 |
2.outId | string | 是 | 外部流水扩展字段。 | |
3.phoneOssUrl | string | 是 | 接收短信的手机号码文件所在的OSS路径。文件格式txt。 国内短信:11位手机号码,例如159********;国际/中国香港、中国澳门和中国台湾消息:国际区号+号码,例如85200******。每个号码一行。变量短信会在每行手机号后面加上变量名称与替换值内容。例如:{"name":"TemplateParamJson","age":"age"} | |
4.signName | string | 是 | 短信签名名称。 | |
5.templateCode | string | 是 | 模板code。 | |
6.isVariable | integer(int64) | 是 | 是否是变量短信。
| |
状态码 | 描述 | 说明 | ||
200 | OK | 请求成功。 | ||
401 | Unauthorized | 请求未经授权。 | ||
403 | Forbidden | 请求被拒绝。 | ||
404 | Not Found | 请求的资源不存在。 | ||
返回属性名 | 类型 | 说明 | ||
1.bizId | string | 发送回执ID。 | ||
2.platformName | string | 服务方名称,与接口配置时填写的接口名称一致。 | ||
3.code | string | 请求状态码,200或OK表示成功。 | ||
4.message | string | 状态码描述。 | ||
5.requestId | string | 请求ID。 | ||
示例 | ||||
请求参数 | -d '{"limit":0,"outId":"string","phoneOssUrl":"string","signName":"string","templateCode":"string","isVariable":"string"}' | |||
返回值 | {"bizId":"string","platformName":"string","code":"string","message":"string","requestId":"string"} |
短信发送明细查询接口
接口描述 | 短信发送明细查询 | |||
URL | ${prefix}/sms/sendDetails?timestamp=&nonce= | |||
请求方式 | post | |||
请求类型 | application/json | |||
返回类型 | */* | |||
参数名 | 数据类型 | 参数类型 | 是否必填 | 说明 |
1.outId | string | body | 是 | 外部流水扩展字段。 |
2.currentPage | integer(int64) | 是 | 分页查看发送记录,指定发送记录的当前页码。 | |
3.pageSize | integer(int64) | 是 | 分页查看发送记录,指定每页显示的短信记录数量。取值范围为1~1000。 | |
4.startDate | string | 是 | 起始时间,与结束时间的跨度不能超出30天,格式yyyy-MM-dd HH:mm:ss。 | |
5.endDate | string | 是 | 结束时间,与起始时间的跨度不能超出30天,格式yyyy-MM-dd HH:mm:ss。 | |
状态码 | 描述 | 说明 | ||
200 | OK | 请求成功。 | ||
401 | Unauthorized | 请求未经授权。 | ||
403 | Forbidden | 请求被拒绝。 | ||
404 | Not Found | 请求的资源不存在。 | ||
返回属性名 | 类型 | 说明 | ||
1.platformName | string | 短信服务方名称,与接口配置时填写的接口名称一致 | ||
2.code | string | 请求状态码,200或OK表示成功。 | ||
3.message | string | 状态码描述。 | ||
4.requestId | string | 请求ID。 | ||
5.sendDetailDTOs | array:SmsSendDetailDTO | 短信发送明细。 | ||
5.1.content | string | 短信内容。 | ||
5.2.errCode | string | 运营商短信状态码。短信发送成功:DELIVERED。短信发送失败:给出错误码。 | ||
5.3.outId | string | 外部流水扩展字段。 | ||
5.4.phoneNum | string | 接收短信的手机号码。 | ||
5.5.receiveDate | string | 短信接收日期和时间。 | ||
5.6.sendDate | string | 短信发送日期和时间。 | ||
5.7.sendStatus | integer(int64) | 短信发送状态。
| ||
5.8.templateCode | string | 短信模板ID。 | ||
6.totalCount | integer(int32) | 短信发送总条数。 | ||
示例 | ||||
请求参数 | -d '{"outId":"string","currentPage":0,"pageSize":0,"startDate":"string","endDate":"string"}' | |||
返回值 | {"platformName":"string","code":"string","message":"string","totalCount":0,"requestId":"string","sendDetailDTOs":[{"content":"string","errCode":"string","outId":"string","phoneNum":"string","receiveDate":"string","sendDate":"string","sendStatus":0,"templateCode":"string"}]} |