通訊協議
雙方通過HTTP方式交互數據,第三方可以簡單的“name=value”方式發送提交內容或響應請求內容。即通過HTTP的GET/POST方式交換。
接口編碼
消息內容(參數名msg)默認GBK編碼.使用其他編碼,需在請求url中增加參數,encode=編碼.服務端將獲取encode參數的值進行解碼。
應答格式
服務器的應答格式為純文本,如返回:
失敗返回 -1,描述信息 -1表示錯誤代碼,描述信息是對錯誤的描述.描述信息部分可為空。
如包含屏蔽詞,使用提交的編碼解碼,返回結果示例如下:
-21,包含屏蔽詞:啊啊
成功返回 0,4213 0表示成功提交,4213返回消息的MSGID(對應報告中的RPTID)
消息發送
URL: http://ip:port/
即時發送調用示例:
http://ip:port/hy/?uid=1234&auth=faea920f7412b5da7be0cf42b8c93759&mobile=13612345678&msg=hello&expid=0
定時發送調用示例:
http://ip:port/hy/?uid=1234&auth=faea920f7412b5da7be0cf42b8c93759&mobile=13612345678&msg=hello&expid=0
&time=2011-06-20+11:20:30
&time=2011-06-20+11:20:30
時間格式如: 2011-06-20 11:20:30
時間中包含空格及冒號,在提交時,使用和內容相同的編碼格式編輯或 直接替換:空格替換為”+”號,冒號替換為”%3A”,實際上”+”即為編碼后的空格,”%3A”為編碼后的冒號
Post方式提交:
Time參數無需替換或編碼,可直接賦值參數提交,形如:2011-06-20 11:20:30
發送方式:GET/POST
請求參數:
參數名 | 說明 | 必須 | 說明 |
uid | 用戶編號 | 是 | 登錄用戶ID |
auth | 簽權驗證 | 是 | MD5(企業代碼+用戶密碼),32位加密小寫 |
mobile | 被叫號碼 | 是 | 被叫用戶,同時發送給多個用戶,號碼間用逗號分隔 Get: 最大支持300, Post: 最大支持2000 (建議盡量用大包提交) |
msg | 下行消息 | 是 | 消息內容,默認GBK編碼,使用其他編碼,設encode=編碼,服務器在收到消息時,取參數encode進行解碼,內容長度不能超過603,
(單個中文字符或英文字符或符號計算為1個長度) |
expid | 拓展碼 | 是 | 允許用戶自行拓展3位,1-999.expid=0表示不拓展. |
encode | 編碼 | 否 | 若使用非默認編碼,需設置此參數.如encode=utf-8 |
time | 定時時間 | 否 | 定時發送時間,格式為 yyyy-MM-dd HH:mm:ss,此參數的值必須是有效時間,即時短信可略去此參數 |
附錄
響應代碼的定義如下:
狀態碼 | 描述 |
0 | 操作成功 |
-1 | 簽權失敗 |
-2 | 未檢索到被叫號碼 |
-3 | 被叫號碼過多 |
-4 | 內容未簽名 |
-5 | 內容過長 |
-6 | 余額不足 |
-7 | 暫停發送 |
-8 | 保留 |
-9 | 定時發送時間格式錯誤 |
-10 | 下發內容為空 |
-11 | 賬戶無效 |
-12 | Ip地址非法 |
-13 | 操作頻率快 |
-14 | 操作失敗 |
-15 | 拓展碼無效 |
-16 | 取消定時,seqid錯誤 |
-17 | 未開通報告 |
-18 | 暫留 |
-19 | 未開通上行 |
-20 | 暫留 |
-21 | 包含屏蔽詞 |
GET方式發送示例:
public static void main(String[] args) {
SendTest_Get t=new SendTest_Get();
String mobile="13612345678";
String content="http接口測試";
String urlstr="http://ip:port/hy?uid=1234
&auth=faea920f7412b5da7be0cf42b8c93759&mobile=13612345678&msg="
+java.net.URLEncode.encode(content,"gbk")+"&expid=0";
String str=t.doGetRequest(urlstr);
System.out.println("響應:"+str);
}
public String doGetRequest(String urlstr) {
String res = null;
HttpClient client = new HttpClient(
new MultiThreadedHttpConnectionManager());
client.getParams().setIntParameter("http.socket.timeout", 10000);
client.getParams().setIntParameter("http.connection.timeout", 5000);
HttpMethod httpmethod = new GetMethod(urlstr);
try {
int statusCode = client.executeMethod(httpmethod);
if (statusCode == HttpStatus.SC_OK) {
res = httpmethod.getResponseBodyAsString();
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpmethod.releaseConnection();
}
return res;
}
POST方式發送示例:
public static void main(String[] args) throws IOException {
HttpClient httpClient = new HttpClient();
String url = "http://ip:port/hy/";
String uid = "1234";
String auth = new MD5().getMD5ofStr("企業代碼密碼");
String mobile = "136123456787";
String content=java.net.URLEncoder.encode("測試消息", "gbk");
PostMethod postMethod = new PostMethod(url);
postMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");
NameValuePair[] data = {
new NameValuePair("uid", uid),
new NameValuePair("auth", auth),
new NameValuePair("mobile", mobile),
new NameValuePair("expid", "0"),
new NameValuePair("msg",content )
};
postMethod.setRequestBody(data);
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == HttpStatus.SC_OK) {
String sms = postMethod.getResponseBodyAsString();
System.out.println("result:" + sms);
}
System.out.println("statusCode="+statusCode);
}