- Content-Type: application/json;charset=utf-8
- 编码: UTF-8
- 请求地址: https://api.aiofish.com/rest/sms/sendSms/encryption
- 请求方式: POST
{
"account": "api003",
"ts": "1698632973036",
"bizContent": "10e18d2ebaebdb485cae33dca2604e10706cfa2ba255ba0bedb7ec9f7099",
"sign": "1f55c5a8b38bc37706bbed532940ae4190814a5c96fe2c3"
}
| 参数 | 数据类型 | 是否必填 | 字段解释 |
| account | String | 是 | 对接账号(短信平台提供) |
| ts | String | 是 | 时间戳。单位:毫秒 |
| bizContent | String | 是 | 加密后的请求内容。原始数据对象先转为json字符串,然后使用AES进行加密。AES使用AES/ECB/PKCS5Padding模式加密,密钥长度128位。AES加密参考 AesUtil.java |
| sign | String | 是 | 数字签名。 说明:参数(account,ts,appSecret,bizContent)按照升序拼接,再使用SHA256生成签名。 |
{
"mobile": "12312345678",
"content": "您的验证码为:703319,有效期5分钟",
"subCode": "11"
}
| 参数 | 数据类型 | 是否必填 | 字段解释 |
| mobile | String | 是 | 手机号码(多个以英文逗号隔开),单次提交数量不超过2000个 |
| content | String | 是 | 短信内容。 |
| subCode | String | 否 | 扩展码,只能为数字。 |
| smsId | String | 否 | 消息唯一标识ID,用来匹配状态报告,最大可支持32位。(如不填写则短信平台自动生成) |
| sendTime | String | 否 | 定时发送时间,格式:2020-10-01 12:12:13 |
import com.google.common.base.Joiner;
import org.apache.commons.codec.digest.DigestUtils;
public static String generateSign(String account, String ts, String bizContent,
String appSecret) throws Exception {
Map<String, String> params = new TreeMap<>();
params.put("account", account);
params.put("appSecret", appSecret);
params.put("ts", ts);
params.put("bizContent", bizContent);
String str = Joiner.on("&").withKeyValueSeparator("=").join(params);
return DigestUtils.sha256Hex(str);
}
原始内容拼接:
account=api003&appSecret=ba92fa4836984eb98156e6ec8a6b2454&bizContent=10e18d2ebaebdb485cae33dca2&ts=1698632973036
签名结果:
1f825da81826e47c4dbff9a5c785cb8c141dcb1a5343d3650bfe6794879ef400
{
"code": 200,
"smsId": "e4aaea7fb95d40159d1e325df01d9e72",
"subStat": "r:000",
"subStatDes": "处理成功"
}
| 参数 | 数据类型 | 字段解释 |
| code | int | 响应code |
| smsId | String | 消息唯一标识ID.如果客户端提供则等于请求时的smsId,否则为短信平台自动生成。 |
| subStat | String | 值为r:000时表示该请求被成功受理,其他值则表示受理失败 |
| subStatDes | String | 响应码描述 |