長沙專業(yè)網(wǎng)站制作設計網(wǎng)絡推廣和網(wǎng)站推廣
通信方式
?????? 采用http1.1通信方式,數(shù)據(jù)以post方式提交
?????? http 頭設置:application/json
簽名
?????? 采用MD5加密方式, 源字符串采用字段拼接方式
?????? 簽名中appSecret是平臺分配密碼
?????? 簽名方法:
?????? 如:String sign=md5(param1param2param3…paramN)
發(fā)送接口
地址: http://ip:port/api/sms/air/send
描述:?? 客戶平臺==>大業(yè)務平臺
1. 請求方式post; http頭設置application/json; 字符集UTF-8
?????? 2. http響應數(shù)據(jù)為json格式
請求參數(shù):
字段 | 名稱 | 類型 | 說明 |
appKey | 賬戶名 | String(32) | 統(tǒng)一分配 |
timestamp | 時間戳 | long | 毫秒值 自UTC時間1970-1-1起的毫秒值 |
mobile | 用戶號碼 | String(11,11999) | 多個提交逗號分隔; 一次最多1000個號碼 |
content | 內(nèi)容長度 | String(402) | 短消息內(nèi)容長度,67*6條 |
spNumber | 擴展號碼 | String(10) | 擴展長號碼 |
sendTime | 定時時間 | String(0,14) | yyyyMMddHHmmss 定時發(fā)送時間, 默認為空值 |
reportUrl | 報告回調(diào)地址 | String(100) | 狀態(tài)報告回調(diào)的URL地址 默認為空 若使用查詢接口(接口6)方式,為空值 |
moUrl | 上行地址 | String(100) | 用戶上行URL地址 默認空 |
attach | 附加值字段 | String(100) | 附加數(shù)據(jù), 客戶根據(jù)自身業(yè)務邏輯添加 默認為空值 |
sign | 數(shù)字簽名 | String(32) | sign=MD5(appKey+timestamp+mobile+content+spNumber+sendTime+appSecret) 順序以此為準 其中appSecret為平臺分配賬戶時提供 |
響應參數(shù):
字段 | 名稱 | 類型 | 說明 |
status | 狀態(tài)碼 | int(4) | ?見附表
其他失敗 |
message | 消息描述 | String(32) | |
taskId | 任務ID | long(8) |
數(shù)據(jù)樣例:
請求json:
{ ??? "appKey": "10001", ??? "timestamp": "1546589422955", ??? "mobile": "13800138001", ??? "content": "【簽名測試】這是一條測試短信", ??? "spNumber": "234", ??? "sendTime": "", "reportUrl": "", “moUrl”:””, ?? ?"attach": "", ??? "sign": "4b38b34fb70fcc4c49e180fbd5a9854b" } |
響應Json:
{ ??? "message": "提交成功", ??? "taskId": 6468846578735812608, ??? "status": 1 } 或失敗 { ??? "message": "提交數(shù)據(jù)錯誤", ??? "status": 2 } |
/*** 發(fā)送短信** @param smsModule 模塊名稱* @param phone 手機號* @param receiveName 接收人姓名* @param message 發(fā)送內(nèi)容* @return*/public ActionResult sendSms(String smsModule, String phone, String receiveName, String message) {Request request = null;ActionResult actionResult = ActionResult.fail("發(fā)送短信失敗");LogSmsMessageVo logSmsMessageVo = new LogSmsMessageVo();String status = "1";try {//平臺提供的appKey appKey = x.getDictValue();//平臺提供的appSecret appSecret = x.getDictValue();//平臺提供的發(fā)送短信urlsendUrl = x.getDictValue();} catch (Exception e) {log.error("查詢發(fā)送短信參數(shù)異常,異常信息" + e);}Response resp = null;String taskId = "";String sendStat = "";try {request = Request.newHttpRequestBuilder().uri(sendUrl).timeout(5000).charset("utf-8").method(Request.POST).contentType(Request.ContentType.JSON).build();//1. 構建數(shù)據(jù)包對象SendSmsEntity sendEntity = this.buildSendEntity(phone, message);//2. 轉化對象為json字符串數(shù)據(jù)String data = JSONObject.toJSONString(sendEntity);//3. 字符串url編碼,防止特殊字符被客戶端強行改變,譬如+會被瀏覽器或者其他客戶端變更為空格String encodeData = URLEncoder.encode(data, "UTF-8");//4. 發(fā)送resp = request.send(sendUrl, encodeData);log.info("發(fā)送短信,手機號:" + phone + ",發(fā)送內(nèi)容:" + message + ",返回結果:" + resp.content());JSONObject jsonObject = JSONObject.parseObject(resp.content());if (ObjectUtils.isNotEmpty(jsonObject)) {actionResult.setMsg(jsonObject.get("message") + "");actionResult.setData(jsonObject.get("message") + "");}//解析發(fā)送結果if (200 == resp.status()) {if ("1".equals(jsonObject.get("status") + "")) {log.info("發(fā)送短信成功");status = "0";sendStat = "2";taskId = jsonObject.get("taskId") + "";actionResult.setCode(200);} else {//數(shù)據(jù)提交失敗,發(fā)送必然失敗sendStat = "0";log.info("發(fā)送短信失敗,失敗原因" + jsonObject.get("message"));}} else {if (resp.content() != null) {taskId = jsonObject.get("taskId") + "";log.info("發(fā)送短信返回失敗,返回內(nèi)容" + resp.content());} else {log.info("發(fā)送短信失敗,返回響應內(nèi)容為空");}sendStat = "0";}} catch (Exception e) {log.error("發(fā)送短信異常,異常信息" + e.getMessage());} finally {request.release();}return actionResult;}
查詢報告接口
地址: http://ip:port/api/sms/air/report
描述:客戶平臺 ==> 大業(yè)務平臺
- 查詢當前賬戶套餐余量
- 客戶通過接口調(diào)用主動查詢方式,獲取數(shù)據(jù),
- 如實現(xiàn)【回調(diào)報告接口2】可不實現(xiàn)該接口。
- 請求數(shù)據(jù) JSONObject
- 響應數(shù)據(jù) JSONObject
- 每次接口調(diào)用都是獲得最新的數(shù)據(jù),舊數(shù)據(jù)不再緩存。
-
請求:
字段
名稱
類型
說明
appKey
接入賬戶
String(32)
平臺分配
sign
簽名
String(32)
md5(appKey+ appSecret)
appSecret為平臺分配接入賬戶的密鑰
數(shù)據(jù)響應:
字段
名稱
類型
說明
status
狀態(tài)碼
int(4)
?1 – 提交成功;其他-失敗
message
錯誤描述
String(32)
?錯誤描述
data
數(shù)據(jù)字段
JSONArray
?報告數(shù)據(jù)放入此字段中
data內(nèi)容描述:
字段
名稱
類型
說明
id
數(shù)據(jù)包標識
String(20)
固定值:report
taskId
任務ID
long(8)
任務ID+用戶號碼=唯一性
batchNo
批次序號
int
默認1,
當提交的為長短信時,該字段匹配內(nèi)容序號;如一條短信分隔為3條,該字段范圍1,2,3
mobile
用戶號碼
String(20)
?用戶號碼
stat
狀態(tài)碼
int(4)
?1 – 成功;其他-失敗
statMsg
狀態(tài)描述
String(32)
?狀態(tài)描述
attach
附加值字段
數(shù)據(jù)樣例:
請求:
{
??? "appKey": "90001",
??? "sign": "2cff25eaa14b0f5c54a4f56e26e7c517"
}
響應:
{
??? "data": [
??? {
??????? "batchNo": 1,
??????? "stat": 1,
??????? "statMsg": "成功",
??????? "mobile": "13800138000",
??????? "id": "report",
??????? "attach": "",
??????? "taskId": 6479258452121862144
??? },
??? {
??????? "batchNo": 1,
??????? "stat": 1,
?? ?????"statMsg": "成功",
??????? "mobile": "13800138000",
??????? "id": "report",
??????? "attach": "",
??????? "taskId": 6479266612358397952
??? }],
??? "message": "提交成功",
??? "status": 1
}
回調(diào)報告接口
描述:大業(yè)務平臺 ==> 客戶平臺
- 平臺根據(jù)send接口reportUrl字段設定的URL地址,提交報告數(shù)據(jù)給客戶
- 請求數(shù)據(jù)JSONArray
- 響應數(shù)據(jù) JSONObject
請求接口:
字段 | 名稱 | 類型 | 說明 |
id | 數(shù)據(jù)包標識 | String(20) | 固定值:report |
taskId | 任務ID | long(8) | 任務ID+用戶號碼=唯一性 |
batchNo | 批次序號 | int | 默認1, 當提交的為長短信時,該字段匹配內(nèi)容序號;如一條短信分隔為3條,該字段范圍1,2,3 |
mobile | 用戶號碼 | String(20) | ?用戶號碼 |
stat | 狀態(tài)碼 | int(4) | ?1 – 成功;其他-失敗 |
statMsg | 狀態(tài)描述 | String(32) | ?狀態(tài)描述 |
attach | 附加值字段 | String(100) | ?請求時攜帶客戶數(shù)據(jù)字段 |
響應:
字段 | 名稱 | 類型 | 說明 |
status | 狀態(tài)碼 | int(4) | ?1 – 成功接收;其他-失敗 失敗嘗試3次發(fā)送,超過3次放棄 |
數(shù)據(jù)樣例:
請求:
[ ??? { ??????? "batchNo": 1, ??????? "stat": 1, ??????? "statMsg": "成功", ??????? "mobile": "13800138000", ??????? "id": "report", ??????? "attach": "", ??????? "taskId": 6479258452121862144 ??? }, ??? { ??????? "batchNo": 1, ??????? "stat": 1, ??????? "statMsg": "成功", ??????? "mobile": "13800138000", ??????? "id": "report", ??????? "attach": "", ???? ???"taskId": 6479266612358397952 ??? }] |
響應:
{ ?????? "status": 1, //狀態(tài)成功 } |