1. 消息頭,包含兩部分,UDH和PUD,現在經過測試,有三種可以使用的包頭數據.
包頭a:
UDH: 06 05 04 0B 84 23 F0
PUD: 01 06 03 AE 8D C4
包頭b:
UDH: 0B 05 04 0B 84 23 F0 00 03 03 01 01
PUD: 29 06 06 03 AE 81 EA 8D CA
包頭c:
UDH: 06 05 04 0B 84 23 F0
PUD: 81 06 06 03 AE 81 EA 8D 00
2. 消息體
02
05 //WAPFORUM//DTD SI 1.0//EN
6A //UTF-8
00 //字符串結束
45 //<si>
C6 //<indication
08 //<action=signal-high>
0C //href="http://"
03 //字符串開始
.... //URL字符串,要UTF8編碼
00 //字符串結束
01 //>
03 //字符串開始
.... //內容描述字符串,要UTF8編碼
00 //字符串結束
01 //</indication>
01 //</si>
3.
生成消息包體後,要在PUD包頭中設置包體的長度,PUD頭中的最後一個字節表示包體的長度.
PUD[len(PUD)-1] = len(BODY)/2 + 128;
4. 生成短信內容消息數據
SMSDATA = UDH + PUD + BODY
SMSDATA在短消息中作爲消息內容
5. 短信息發送
使用CMPP協議向中國移動網關發送短消息時,要設定MsgFormat爲4,表示數據是二進制格式.
6. 測試結果
使用各種包頭數據,所支持的手機型號不同.測試結果如下:
包頭a: 索愛K750c, Nokia3230, Nokia6270
包頭b: 索愛K750c, Nokia3230, Nokia6270, 多普達ppc696
包頭c: 索愛K750c, 索愛K700, MOTO A768, Nokia3230, Nokia6270
附1: 第三個包頭的詳細描述
// UDH
06 //User Data Header Length (6 bytes)
05 //UDH Item Element id (Port Numbers)
04 //UDH IE length (4 bytes)
0B
84 //destination port number
23
F0 //origin port number
// PUD
81 //transaction id (connectionless WSP)
06 //pdu type (06=push)
06 //Headers len
03
AE
81
EA //content type: application/vnd.wap.sic; charset=utf-8
8D //content-length
INT //body length
附2:封裝的C++數據打包函數代碼
BOOL GenWapPushMsg(const char *pszUrl,const char *pszInfo,char *pszData,int &nMsgLen) // guanzhong 2006-2-22, 使用了第三個包頭 unsigned char szMsg[280]={0}; unsigned char *pszPos = pszBody; *pszPos++ = 0x02;; *pszPos++ = 0x00; //字符串結束 strcpy((char*)pszPos,szUTF8Info); *pszPos++ = 0x00; //字符串結束 //設置包體的長度 memcpy(pszData,szMsg,nMsgLen); |