如何通过短信网关发送Wappush消息?
如何通过短信网关发送Wappush消息?
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); |