1、注意事项
- 号码格式:国家代码+正确的手机号码。例如中国:8617321342252
- 国际接口支持国际国内发送,默认关闭,需要发国内权限找对应商务申请开通,号码加中国代码:+86,发往大陆的短信内容一定要加签名、内容一定要报备。发送国外无需报备,签名不限制。签名最好以【253 云通讯】为格式例子。
- 发国外营销短信最好用英文或者当地语言,需要中文发送的话请联系商务确认你要发送的国家运营商是否支持中文。
- 短信收到慢,或者收不到请联系对应商务或者客服,一般是号码格式错误,内容触发审核,或者国内号码黑名单。
2、接口加签方式
- 将请求头参数名 nonce 及所有请求体参数名(key)以 ASCII 码表顺序升序排列;
- 排序后把参数值非空的参数名(key)参数值(value)依次进行字符串拼接,拼接处不包含其他字符;
- 拼接成包含 kv 的长串后,在该长串的尾部拼接账号的 password,得到签名字符串的组装;
- 最后对签名字符串,使用 MD5 算法加密后,得到 MD5 加密密文后转为小写,即为请求头 sign 值
2.1加签代码示例
package com.angi;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.DigestUtils;
import java.util.Map;
import java.util.TreeMap;
public class SignUtil {
private static final String SIGN = "sign";
public static String sendSign(String password, TreeMap<String, String> paramMap) {
paramMap.remove(SIGN);
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : paramMap.entrySet()) {
if (StringUtils.isNotBlank(entry.getValue())) {
sb.append(entry.getKey());
sb.append(entry.getValue());
}
}
return DigestUtils.md5DigestAsHex((sb.toString() + password).getBytes()).toLowerCase();
}
public static boolean verifySendSign(String password, TreeMap<String, String> paramMap) {
String sign = paramMap.remove(SIGN);
String computed = sendSign(password, paramMap);
return StringUtils.equals(sign, computed);
}
public static void main(String[] args) {
/*发送加签验签*/
String password = "4Z7bMS1eLI6895";
TreeMap<String, String> paramMap = new TreeMap<>();
paramMap.put("nonce", "222222");
paramMap.put("account", "IM6742671");
paramMap.put("mobile", "8618916198813");
paramMap.put("msg", "test 666661 ");
System.out.println(JSONObject.toJSONString(paramMap));
String sign = sendSign(password, paramMap);
System.out.println(sign);
TreeMap<String, String> newParamMap = new TreeMap<>(paramMap);
newParamMap.put(SIGN, sign);
boolean validate = verifySendSign(password, newParamMap);
System.out.println(validate);
}
}
2.2DEMO文件
加密DEMO点此获取
3、发送短信接口
3.1协议说明
注:请根据账号归属节点请求对应的URL
3.2请求头
3.3请求体
3.4响应
返回示例-成功
{
"code": "0",
"message": "提交成功",
"data": {
"messageId": "162575412960104448"
}
}
注:code 为响应状态码,可参照提交响应状态码对比
4、接口响应码
5、状态报告状态码
6、计费规则说明
- 国际短信不支持 emoji 表情
- 编辑器中空格都会以”."表示,如出现不带”.”的空格则说明有隐藏代码,会导致 1 条短信算成 2 条的风险请留意。
- 国际号码必须添加对应国家的区域号,例如中国号码 86138****1234,86 为中国区号。
- 发送中国号码时,短信内容必须以[签名]开头,签名内容为: 公司或品牌名称,字数要求 2-80 个字符,运营商规定必填。
- 发送中国号码段时,内容合法,不能发送房产、发票、移民等国家法律法规严格禁止的内容。
- 超链接地址请写在短信内容中,便于核实,部分安卓系统存在超链接识别问题,需在超链接前后添加空格。
- 短信中含非英文字符按中文计费。