发送接口(加密版)

接口说明

  • 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"
}

请求参数说明

参数数据类型是否必填字段解释
accountString对接账号(短信平台提供)
tsString时间戳。单位:毫秒
bizContentString加密后的请求内容。原始数据对象先转为json字符串,然后使用AES进行加密。AES使用AES/ECB/PKCS5Padding模式加密,密钥长度128位。AES加密参考 AesUtil.java
signString数字签名。 说明:参数(account,ts,appSecret,bizContent)按照升序拼接,再使用SHA256生成签名。

原始数据

原始数据样例

{
  "mobile": "12312345678",
  "content": "您的验证码为:703319,有效期5分钟",
  "subCode": "11"
}   

原始数据说明

参数数据类型是否必填字段解释
mobileString手机号码(多个以英文逗号隔开),单次提交数量不超过2000个
contentString短信内容。
subCodeString扩展码,只能为数字。
smsIdString消息唯一标识ID,用来匹配状态报告,最大可支持32位。(如不填写则短信平台自动生成)
sendTimeString定时发送时间,格式: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": "处理成功"
}

参数数据类型字段解释
codeint响应code
smsIdString消息唯一标识ID.如果客户端提供则等于请求时的smsId,否则为短信平台自动生成。
subStatString值为r:000时表示该请求被成功受理,其他值则表示受理失败
subStatDesString响应码描述