如何通过短信网关发送Wappush消息?


如何通过短信网关发送Wappush消息?

1. 消息头,包含两部分,UDH和PUD,现在经过测试,有三种可以使用的包头数据.

包头a:

UDH: 06 05 04 0B 84 23 F0PUD: 01 06 03 AE 8D C4包头b:UDH: 0B 05 04 0B 84 23 F0 00 03 03 01 01PUD: 29 06 06 03 AE 81 EA 8D CA包头c:UDH: 06 05 04 0B 84 23 F0PUD: 81 06 06 03 AE 81 EA 8D 00

2. 消息体

02

05 //WAPFORUM//DTD SI 1.0//EN6A //UTF-800 //字符串结束45 //<si>C6 //<indication08 //<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)0B84//destination port number23F0//origin port number

// PUD

81//transaction id (connectionless WSP)06//pdu type (06=push)06//Headers len03AE81EA//content type: application/vnd.wap.sic; charset=utf-88D//content-lengthINT//body length

附2:封装的C++数据打包函数代码

BOOL GenWapPushMsg(const char *pszUrl,const char *pszInfo,char *pszData,int &nMsgLen)

{char szUTF8Url[256]={0},szUTF8Info[256]={0};if(!GB2UTF8((char*)pszUrl,szUTF8Url)){return FALSE;}if(!GB2UTF8((char*)pszInfo,szUTF8Info)){return FALSE;}

// guanzhong 2006-2-22, 使用了第三个包头

unsigned char szUDH[] = {0x06,0x05,0x04,0x0B,0x84,0x23,0xF0};unsigned char szPUD[] = {0x81,0x06,0x06,0x03,0xAE,0x81,0xEA,0x8D,0x00};// guanzhong

unsigned char szMsg[280]={0};

int nUDHLen = sizeof(szUDH);int nPUDLen = sizeof(szPUD);unsigned char *pszBody = szMsg + nUDHLen + nPUDLen;

unsigned char *pszPos = pszBody;

*pszPos++ = 0x02;;

*pszPos++ = 0x05; //-//WAPFORUM//DTD SI 1.0//EN*pszPos++ = 0x6A; //UTF-8*pszPos++ = 0x00; //字符串结束*pszPos++ = 0x45; //<si>*pszPos++ = 0xC6; //<indication*pszPos++ = 0x08; //<action=signal-high>*pszPos++ = 0x0C; //href="http://"*pszPos++ = 0x03; //字符串开始strcpy((char*)pszPos,szUTF8Url);pszPos += strlen(szUTF8Url);

*pszPos++ = 0x00; //字符串结束

*pszPos++ = 0x01; //>*pszPos++ = 0x03; //字符串开始

strcpy((char*)pszPos,szUTF8Info);

pszPos += strlen(szUTF8Info);

*pszPos++ = 0x00; //字符串结束

*pszPos++ = 0x01; //</indication>"*pszPos++ = 0x01; //</si>

//设置包体的长度

//szPUD[nPUDLen-1] = pszPos-pszBody;// guanzhong 2006-3-3修改,否则MOTO A768不能正常接收 szPUD[nPUDLen-1] = (pszPos-pszBody)/2 + 128;memcpy(szMsg,szUDH,nUDHLen);memcpy(szMsg + nUDHLen,szPUD,nPUDLen);nMsgLen = pszPos - szMsg;

memcpy(pszData,szMsg,nMsgLen);

return TRUE;}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值