三:簡訊下行
簡訊下行流程:JAVA程式-->聯通網關-->簡訊中心-->測試手機
簡訊下行的原理:在程式裡設定手機號以及一系列參數(大約20個左右),之後調用SGIP-API的簡訊發送程式,程式將簡訊發送至簡訊網關,簡訊網關接到簡訊後,返回狀態代碼(此狀態代碼只是代表簡訊網關接收成功or失敗,並未真正下發至使用者手機中),之後簡訊網關將簡訊下發至相關的簡訊中心,最後由簡訊中心發送至使用者手機。待成功下發到使用者手機後,簡訊網關會將一條回執報告推送至上行簡訊監聽伺服器。
注意事項:
測試機器必須可以串連外網,並且可以telnet通聯通簡訊網關的IP地址,如果外網轉內網的話,需要使用TCP-TRACE工具做IP轉換。
傳送簡訊返回碼詳解:
0 下發成功
-1 訊息資料檢測,格式不正確
-2 響應逾時
-3 鏈路異常斷鏈
-4 BIND異常,使用者名稱或密碼錯誤
簡訊下行主要用到的是SGIPClientDemo這個項目。
你需要修改test這個類。
第一步:修改一些參數~~~~
info.IP = "111.111.1.11";//聯通電訊廠商網關IP地址
info.port = 8801;//聯通電訊廠商網關連接埠
info.userName = "yang";//使用者名稱
info.passWord = "yanglala";//密碼
info.maxLink = 20;//最大串連數
第二步:修改一堆參數~~~~
submit.getBody().setSPNumber("100000000000");//特服號
submit.getBody().setChargeNumber("000000000000000000000");//21個0 付費的手機號碼
submit.getBody().setUserCount(1);//使用者數量 預設為1
submit.getBody().setUserNumber("8613333333333"); //使用者號碼 發送的目的手機號碼 前面要加86
submit.getBody().setCorpId("22222");//企業ID,企業代碼 5位代碼 你們申請的
submit.getBody().setFeeType(0);//付費類型 預設0
submit.getBody().setFeeValue("0");//付費值 預設0
submit.getBody().setGivenValue("0");//下面都是預設值,就不寫注釋了。
submit.getBody().setAgentFlag(0);
submit.getBody().setMorelatetoMTFlag(0);
submit.getBody().setPriority(0);
submit.getBody().setExpireTime("");
submit.getBody().setScheduleTime("");
submit.getBody().setReportFlag(1);//1是返回狀態報表, 0是不返回
submit.getBody().setTP_pid(0);
submit.getBody().setTP_udhi(0);
submit.getBody().setMessageCoding(8);//預設值
submit.getBody().setMessageType(3);//預設值
submit.getBody().setMessageContent("zhjt2222est".getBytes());//簡訊內容
submit.getBody().setReserve("dd");//不知道是什麼東東,貌似沒有用。
注釋詳解:
sgipBody.setAgentFlag(agentFlag);代收費標誌 0
sgipBody.setChargeNumber(chargeNumber);付費號碼 21個0
sgipBody.setCorpId(corpId);企業代碼
sgipBody.setExpireTime(expireTime);訊息終止時間 預設為空白
sgipBody.setFeeType(feeType);計費類型 1
sgipBody.setFeeValue(feeValue);計費值 0
sgipBody.setGivenValue(givenValue);贈送話費 0
sgipBody.setMessageCoding(messageCoding); 0 ascii /編碼格式 / 8 unicode / 15 GBK 廣東網關為8
sgipBody.setMessageContent(messageContent);簡訊內容
sgipBody.setMessageLength(messageLength);簡訊長度 預設不填
sgipBody.setMessageType(messageType);訊息類型 0
sgipBody.setMorelatetoMTFlag(morelatetoMTFlag);引起下行訊息的原因 0
sgipBody.setPriority(priority); 優先順序 0
sgipBody.setReportFlag(reportFlag);報告返回標誌 1 返回 0 失敗才返回,成功不返回。
sgipBody.setReserve(reserve);業務代碼 按例子裡的填
sgipBody.setScheduleTime(scheduleTime);計劃執行時間 預設不填
sgipBody.setServiceType(serviceType);服務類型 預設不填
sgipBody.setSPNumber(number);特服號
sgipBody.setTP_pid(tp_pid);TSM協議類型 預設0
sgipBody.setTP_udhi(tp_udhi);長簡訊標誌 預設0 1是長簡訊,0短簡訊
sgipBody.setUserCount(userCount);使用者數 1
sgipBody.setUserNumber(userNumber);使用者手機號
第三步:
設定完成之後就可以RUN了,就是這麼簡單!
RUN AS -->JAVA APPLICATION 不用我教你了吧?
PS:你的測試機器必須是能串連到外網的機器,如果telnet不通聯通的IP和連接埠,那麼一切都是徒勞無功的~
發送完畢後,在SGIPServerDemo項目中的receiveThread類裡會有接收狀態代碼哦,親~
上述例子都是使用zte(中興API)進行測試,因為我們用的是廣州聯通的簡訊網關,因此測試下行時用的手機需為中國聯通的手機號,否則下行簡訊會收不到簡訊。
(簡訊下發後,並不是所有的簡訊都會發送成功。並且發送成功後,接收也會有延遲,望周知。)
SGIP支援人員:13189004174,不要隨便騷擾他們,謝謝。
--------------------------------------------------------------------------------------------------------------------------
測試環境:
網關API:SGIP中興API
簡訊網關:廣東聯通簡訊網關
測試手機:蘋果手機(北京聯通),安卓手機(瀋陽聯通)
測試描述:
1.迴圈發送20條簡訊至蘋果手機(北京聯通),其中1條簡訊發送失敗,19條簡訊發送成功。
測試手機只能收到7條簡訊,而廣東聯通簡訊網關的支援人員回覆:是手機的的問題,簡訊網關顯示都已下發成功。
2.迴圈發送20條簡訊至安卓手機(瀋陽聯通),其中1條簡訊發送失敗,19條簡訊發送成功。
測試手機能接收到全部19條簡訊,但是接收第一條簡訊與接收最後一條簡訊的時間間隔過大,大約20分鐘。
廣東聯通簡訊網關的支援人員回覆:這是正常情況,因為網路延遲或通道堵塞導致。
問題列表:
1.下發簡訊有可能會因為連不上簡訊網關而導致下發失敗。
2.會出現簡訊回執報告顯示“下發成功”,但實際手機沒有收到簡訊的情況發生。
3.會出現簡訊接收延遲的情況,例如:程式成功下發一條簡訊至手機,而手機在20分鐘後才收到這條簡訊。
有問題請在回複裡留言,我會為大家解答相關問題。祝願所有的程式員都會前途似錦,錦上添花,花紅柳綠, XXXX。