[第 4 版,Wenyi Feng,2017年12月14日]
[TOCM]
一、文档说明
传输协议 | 采用 HTTP 传输 |
---|---|
提交方式 | 采用 POST 方法提交 |
数据格式 | 提交和返回数据都为 JSON 格式 |
字符编码 | 统一采用 UTF-8 字符编码 |
二、API
接口名称
投递服务
接口地址(示例)
http://127.0.0.1:9090/lvma/msg/send
请求参数
名称 | 变量名 | 类型 | 必填 | 描述 |
---|---|---|---|---|
身份编号 | oauthCode | String(16) | 是 | 验证身份的 Code |
身份密钥 | oauthKey | String(32) | 是 | 验证身份的 Key |
手机号 | phone | String(11) | 是 | 投递的手机号(目前暂支持移动) |
模板ID | templateId | int | 是 | 模板ID(可在管理系统中查看) |
参数数组 | params | String[] | 是 | 模板参数,将模板中的变量(#*#)用参数代替后依次放入数组中 |
通知地址 | notifyUrl | String(256) | 是 | 异步接收投递结果回调地址,通知url必须是外网可访问的url |
举例如下:
{
"oauthKey":"Your oauthKey",
"phone":"13500000000",
"params":[
"小明",
"123456"
],
"oauthCode":"Your oauthCode",
"notifyUrl":"http://localhost:1234/rs_response",
"templateId":100
}
值得一提:
a. 参数长度为0时,可以为空数组 []
b. 通知地址可以为空字符串 ""
,不能为null
返回参数
名称 | 变量名 | 类型 | 说明 |
---|---|---|---|
返回码 | code | int | 发送结果Code(参见 返回码 部分) |
返回信息 | msg | String | 发送结果描述 |
投递数据 | data | String | 当code为 0 时返回 |
以下结果当code为0时返回:
名称 | 变量名 | 类型 | 说明 |
---|---|---|---|
信息ID | ssId | int | 投递的信息ID |
手机号 | phone | String | 投递的手机号 |
内容 | content | String | 投递的内容 |
举例如下:
投递成功
{
"code":0,
"msg":"Success",
"data":{
"phone":"135****5918",
"ssId":109997,
"content":"【**科技】验证码为:123456(3分钟内有效)。"
}
}
投递失败
{
"code":1005,
"msg":"(Error)服务器繁忙"
}
三、投递结果通知
请求参数
名称 | 变量名 | 类型 | 必填 | 说明 |
---|---|---|---|---|
结果码 | code | String | 是 | 投递结果 Success/Fail |
信息 | msg | String | 是 | 投递结果描述(投递成功/投递失败) |
手机号 | phone | String | 是 | 投递号码 |
内容 | content | String | 是 | 投递内容 |
信息ID | ssId | int | 是 | 信息ID |
返回参数
名称 | 名称 | 类型 | 必填 | 说明 |
---|---|---|---|---|
结果码 | code | String | 是 | 投递结果 Success/Fail |
信息 | msg | String | 是 | 投递结果描述( Ok /[失败原因]) |
信息ID | ssId | int | 是 | 信息ID |
四、返回码
返回码 | 说明 |
---|---|
0 | Success |
1101 | (Error)服务器繁忙 |
1102 | (Error)发送功能暂未开启 |
1201 | (Error)数据不合法 |
1202 | (Error)JSON数据格式不正确 |
1203 | (Error)请求数据不能为空 |
1204 | (Error)JSON数据key不正确 |
1301 | (Error)账户无法识别 |
1302 | (Error)身份验证失败 |
1303 | (Error)用户身份识别出错 |
1304 | (Error)用户身份不正确 |
1401 | (Error)余额不足 |
1501 | (Error)IP没有被认证 |
1601 | (Error)参数与模板不对应 |
1602 | (Error)模板不存在或无法识别 |
1603 | (Error)参数过长 |
1604 | (Error)模板待审核 |
1605 | (Error)模板未通过审核 |
1701 | (Error)数据初始化失败 |
10003 | (Error)未知错误 |
10004 | (Error)程序出错 |
五、示例代码
假定模板
模板ID | 内容 |
---|---|
100 | #*#,你好!你的验证码为#*#(3分钟内有效)。 |
JAVA 示例
1、投递接口:
@Test
public void test() {
// 请求接口
String url = "";
// 你的CODE和KEY
String oauthCode = "Your oauthCode";
String oauthKey = "Your oauthKey";
// 待发手机号
String phone = "13500000000";
// 模板ID
int templateId = 100;
// 通知地址
String notifyUrl = "http://localhost:1234/rs_response";
// 参数
String [] args = {"小明", "123456"};
Map<String, Object> map = new HashMap<>();
map.put("oauthCode", oauthCode);
map.put("oauthKey", oauthKey);
map.put("phone", phone);
map.put("templateId", templateId);
map.put("param", args);
map.put("notifyUrl", notifyUrl);
String params = new Gson().toJson(map);
try {
String result = doPostByUrl(url, params);
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
}
}
返回:
{
"code":1000,
"message":"(Error)数据不合法",
"explain":"请仔细检查参数"
}
2、通知地址写法:
@PostMapping("/rs_response")
public String rsResponse(HttpServletRequest request) {
Map<String, Object> map = new HashMap<>();
try {
String jsonStr = getPostData(request);
System.out.println("rsData: " + jsonStr);
JsonObject jsonObject = new JsonParser().parse(jsonStr).getAsJsonObject();
int code = jsonObject.get("code").getAsInt();
String msg = jsonObject.get("msg").getAsString();
String phone = jsonObject.get("phone").getAsString();
String content = jsonObject.get("content").getAsString();
int ssId = jsonObject.get("ssId").getAsInt();
String parseData = "code = " + code +
", msg = " + msg +
", phone = " + phone +
", content = " + content +
", ssId = " + ssId;
System.out.println("parseData: [" + parseData + "]");
map.put("code", "Success");
map.put("msg", "Ok");
map.put("ssId", ssId);
} catch (IOException e) {
e.printStackTrace();
}
return new Gson().toJson(map);
}
3、温馨提示:
JSON数据我们采用Gson库处理,因此在使用上面示例代码时,我们默认你已引入Gson
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.1</version>
</dependency>
4、工具类代码:
/**
* 请求网络数据
*/
public static String doPostByUrl(String url, String param) throws IOException {
URL urlObject = new URL(url);
HttpURLConnection httpUrlConn = (HttpURLConnection)urlObject.openConnection();
httpUrlConn.setConnectTimeout(5000);
httpUrlConn.setReadTimeout(5000);
httpUrlConn.setUseCaches(false);
httpUrlConn.setDoInput(true);
httpUrlConn.setDoOutput(true);
httpUrlConn.setRequestMethod("POST");
httpUrlConn.setRequestProperty("Accept", "application/json");
httpUrlConn.setRequestProperty("Content-Type", "application/json");
httpUrlConn.connect();
PrintWriter pw = new PrintWriter(httpUrlConn.getOutputStream());
pw.print(param);
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(httpUrlConn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null) {
sb.append(line);
}
httpUrlConn.disconnect();
return sb.toString();
}
/**
* 获取POST提交的数据
*/
public static String getPostData(HttpServletRequest request) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
PHP 示例
// 测试投递接口
$oauthCode = 'Your oauthCode';
$oauthKey = 'Your oauthKey';
$phone = '13500000000';
$templateId = 100;
$notifyUrl = 'http://localhost:1234/rs_response';
$params = array(
'小明',
'123456'
);
class SData {
public $oauthCode, $oauthKey, $phone, $templateId, $params, $notifyUrl;
}
$obj = new SData();
$obj -> oauthCode = $oauthCode;
$obj -> oauthKey = $oauthKey;
$obj -> phone = $phone;
$obj -> templateId = $templateId;
$obj -> params = $params;
$obj -> notifyUrl = $notifyUrl;
$param = json_encode($obj);
$url = '';
$rs = doPostByUrl($url, $param);
echo '<pre>';
print_r($rs);
echo '</pre>';
/**
* 通过post方式提交数据(字符串)
*/
function doPostByUrl($url, $str) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($str)));
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
六、测试模板
如果你是新客户,尚未申请模板,那么你可以调用以下模板来调试接口
模板ID | 内容 | 参数长度 |
---|
七、版本说明
◆ 第 4 版【2017年12月14日】
优化多处细节
统一请求返回格式
修复投递数据出错的问题
提升投递提交速度
规范帮助文档