1. 程式人生 > >聯通SGIP1.2簡訊介面 Java版實現 總結 2013-10-23測試通過

聯通SGIP1.2簡訊介面 Java版實現 總結 2013-10-23測試通過

我的開發過程:
1:根據聯通提供的SGIP介面文件,封裝裝協議。
2:編寫通訊流程
3:經理建議由原來的socket換成nio socket
4: 經理建議由原來的把Jar整合到需要呼叫的應用中變為 獨立一個簡訊應用並用hessian對外發布。別的應用可以訪問此介面進行呼叫。語言無間隔(此出原始碼中並沒有hessian部分。你想怎麼獨立出一個應用,我不管)。

期間鬱悶的地方
1:SGIP介面文件中 有專用SGIP方式與http方式。但是目前聯通那邊只支援專用SGIP方式。
2:聯通那邊可以支援多個IP。這意味者你可以把你本機的公網IP加下。本機就可以進行測試。(聯通那邊做了IP和使用者名稱密碼的驗證)
3:簡訊中文亂碼。我的應用時utf-8但是介面文件上寫的是ucs2問了他們開發,他也說是utf-8.後來一查才知道他們接受的是UTF-16
4:接受簡訊服務毫無意義。後面有提到。

鬱悶的教訓: 先把想問的問細問清楚啦。再開始。

部署說明:


libs:下是所依賴的jar包。

src:存放原始碼。編譯的jar包就不提供啦。你編譯後記得把裡面的2個配置檔案放到src下。
src下有2個配置問題。
log4j的配置檔案就不用多說啦。級別啥的自己改就行啦。
sgip的配置中你需要修改(使用者名稱 密碼 接入號碼 區號)前面3個都是聯通分配給你的。

sgip.server.ip=
sgip.server.port=
這2個是2個是聯通的對接地址  你申請聯通的SGIP介面後聯通回給你的。

sgip.client.nio=y 如果為y的話預設呼叫SGIPClient.sendMsg()時將採用NIO socket進行通訊。
如果不為y將採用預設的Socket方式進行通訊。 前者效率更高。

sgip.submit.usernumber.max 這是配置的與聯通通訊時一次submit最多支援的號碼數。
不能大於100.除非聯通那邊給你更改。呼叫SGIPClient傳入的號碼數不用管。程式做好了拆分。

sgip.message.handle.class=com.core.sgip.interf.DefaultMessageHandler
傳送簡訊與接受簡訊時的處理類。你可以自己實現com.core.sgip.interf.MessageHandler介面然後更換配置即可。
之所以這麼多。是你可以儲存傳送去的簡訊 。儲存接收到的簡訊。具體的實現那是你們自己的事。

properties檔案開啟後如果是unicode編碼的形式。那麼的開發工具就需要安裝外掛(至於什麼外掛自己gg吧。)。

作為客戶端傳送簡訊的。已經測試過啦。可以使用。2013-10-23

做為伺服器接受簡訊的程式碼也寫了,但是沒有測試。本來要測試的。原因如下:
  假如用SGIP介面傳送簡訊到聯通的客戶。那麼聯通的客戶接受到的簡訊來源是你的接入號。
 客戶回簡訊可以通過聯通呼叫 伺服器收到簡訊
  但是如果用SGIP介面傳送簡訊給移動或異網客戶目前是不能收到客戶回送資訊的。。。。 
 當我寫好了程式,測試好了客戶端。準備做服務端測試的時候問聯通的開發人員才知道有這個事。也是很無語。當然他們也有他們的理由。

由於上述原因。伺服器的測試我就沒做啦。有興趣的小夥伴可以自己測試下。反正原始碼都給你啦隨便你該。
測試的話。如果是web工程的話。在web.xml下增加如下配置:
 <servlet>
<servlet-name>SGIPServiceListener</servlet-name>
<servlet-class>com.core.sgip.listener.SGIPServiceListener</servlet-class>
<init-param>
<param-name>start</param-name>
<param-value>N</param-value>
</init-param>
<init-param>
<param-name>nio</param-name>
<param-value>Y</param-value>
</init-param>
<load-on-startup>6</load-on-startup>
</servlet>


這個有沒有問題我就不知道啦。業務走不通也就沒有必要再測試啦。抱歉。

如果看了程式碼有啥問題或建議或修改的地方可以加入QQ群裡討論下 : 113110460

或者再我的blog中http://blog.csdn.net/bareheadzzq/進行留言。

個人成長:

1:更知道怎麼去封裝一個協議啦。 保不準以後需要再封裝別的介面使用的協議。(這是聯通那邊沒有Java版的介面demo逼出來的。謝謝)

2:運用了下NIO  SOCKET (經理的建議當然無理由推卻,能更好點就更好點)。

3:hessian是什麼東西,怎麼在客戶端使用,怎麼在服務端使用(經理的建議當然無條件接受,能更好點就更好點)。