通訊協議

雙方通過HTTP方式交互數據,第三方可以簡單的“name=value”方式發送提交內容或響應請求內容。即通過HTTP的GET/POST方式交換。

接口編碼

消息內容(參數名msg)默認GBK編碼.使用其他編碼,需在請求url中增加參數,encode=編碼.服務端將獲取encode參數的值進行解碼。

應答格式

服務器的應答格式為純文本,如返回:
失敗返回 -1,描述信息 -1表示錯誤代碼,描述信息是對錯誤的描述.描述信息部分可為空。
如包含屏蔽詞,使用提交的編碼解碼,返回結果示例如下:
-21,包含屏蔽詞:啊啊
成功返回 0,4213 0表示成功提交,4213返回消息的MSGID(對應報告中的RPTID)

消息發送

即時發送調用示例:

定時發送調用示例:

時間格式如: 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);
	}
            

其他示例:

點擊下載