如何通过CMPP短信网关下发WAP PUSH

折腾了几天wap push,终于有个结论。通过CMPP短信网关下发已测试出技术实现没问题,
而用同样的方式给联通的SGIP短信网关发送,返回一个socket被关闭的信号,估计是做了屏蔽。
致电联通技术负责人,果然福建地区把wap push都封住了,不但是短信网关,连PPG都不行。看
来联通也明白自己的平台管理不善,容易让不法分子钻空子,干脆把门都堵上了。
个人认为,wap push不是正常业务有效的宣传途径,目前手机厂商很多将wap psuh收件箱
设置在互联网功能菜单中的下下层,用户听到提示音看到提示图标但找不到地方。我经常帮困惑
的亲友清理这些垃圾。再者目前SP已经臭名昭著(这要归功于这个行业里的流氓),普通用户对这
些服务退避三舍,公司目前的信息资源无法满足某些有特殊爱好的用户群(这点目前值得我庆幸)。
通过正当途径没法做,其它的,就不在我的工作范围。

不过既然做了,就写写吧。 通过移动的短信网关下发wap push,相对于下发普通短信,
有两个地方不同。
一、CMPP_SUBMIT消息包的部分参数值改变。具体是:
Msg_Fmt = 4(表示消息内容是二进制),
TP_pid = 0;
TP_udhi = 1;
二、字段Msg_Content的内容是二进制数字,有特定的组合方式。格式解析起来,就是所谓的
“压缩后的XML“,即WBXML,一共有7个部分,把每个部分的二进制码按顺序组合起来填入
Msg_Content字段,当做普通短信下发即可。我做了个简单的测试,代码大概如下:

char szWapPushHeader1[12] = {0x0B, 0x05, 0x04, 0x0B, 0x84, 0x23, 0xF0, 0x00, 0x03, 
0x03, 0x01, 0x01};
char szWapPushHeader2[9] = {0x29, 0x06, 0x06, 0x03, 0xAE, 0x81, 0xEA, 0x8D, 0xCA};
char szWapPushIndicator[8] = {0x02, 0x05, 0x6A, 0x00, 0x45, 0xC6,0x0C, 0x03};
char szWapPushDisplayTextHeader[3] = {0x00, 0x01, 0x03};
char szEndOfWapPush[3] = {0x00, 0x01, 0x01};



//以上数字串是什么意思,估计有几个说明可以参考下, 又是前人经验:
//0B WAP PUSH头部的总长度
//05040B8423F0表示接下来是一个WAP PUSH
//00 表示是Concatenated Short Messages
//03 长度
//03 reference number
//01 表示分成1个短信发送
//01 当前包的序号
//我大概知道是某种语法,不明白的话也不太影响功能的样子。好象只需要知道分几条短信和
//序号发就可以了。以上每个部分,也有其他可以通过测试的不同的串值,我目前只测了这种
//常见的值,至少它在我的几款测试机器上是能正常的。
//以下两个字串就是需要自己填写的了:
//szWapPushUrl:wap push的目的链接,费尽心机不就是想把这个发出去嘛。要求是"去除了
//http://前缀的UTF8编码的Url地址"的二进制编码。现在是小测试,直接写上值吧,否则应
//该是经过编码转化的。以下url内容是"wap.sina.com.cn"
char szWapPushUrl[12] = {0x77,0x61,0x70,0x2E,0x73,0x69,0x6e,0x61,0x2e,0x63,0x6f,0x6d};

//这个,就是想在手机上显示的关于这个URL的文字说明了,在我的手机上显示成该wap push
//的标题.也同样是"UTF8编码的二进制"内容是"好好学习"
char szMsg[12] = {0xE5,0xA5,0xBD,0xE5,0xA5,0xBD,0xE5,0xAD,0xA6,0xE4,0xB9,0xA0};

//把零件都准备好了,以下就是简单安装,写出来知道个顺序:
char szHex[1024];
int iUrllen,iMsgLen,iLen;
iUrllen = 12;
iMsgLen = 12;
memset(szHex, 0, sizeof(szHex));
iLen = 0;
memcpy(szHex, szWapPushHeader1, 12);
iLen += 12;
memcpy(szHex+iLen, szWapPushHeader2, 9);
iLen += 9;
memcpy(szHex+iLen, szWapPushIndicator, 8);
iLen += 8;
memcpy(szHex+iLen, szWapPushUrl, iUrllen);
iLen += iUrllen;
memcpy(szHex+iLen, szWapPushDisplayTextHeader, 3);
iLen += 3;
memcpy(szHex+iLen, szMsg, iMsgLen);
iLen += iMsgLen;
memcpy(szHex+iLen, szEndOfWapPush, 3);
iLen += 3;
Msg_Length = iLen;
memcpy((char*)Msg_Content, szHex, Msg_Length);


//把Msg_Content当普通短信下发,完成了。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值