Wappush可以通过短信行业网关发送出去(通过submit消息体),移动和联通都是一样,至于电信的协议没试过,不过应该也一样,因为都是参照标准协议改编的。我参考了网上N多文章后才总结出来的一种规则,而且实际测试过发到手机,应该说比较靠谱,写出来节省一下大家时间。我介绍的仅仅是一种能发送出去的方法,而且不是只有这种方法才能发送,如果你要深究原理,需参考GSM协议的相关章节。

具体规则如下:

1首先要设置字段:
   setTpPid((byte) 0);
   setTpUdui((byte) 1);
   setMsgFmt((byte) 4);

2修改短信内容体的字段。
一个Wappush包发出去的时候(这里的包,仅仅是指短信协议里面的内容字段),是由WDP+WSP+SI三个部分组成。
WDP由固定的一串编码加一个refrence number + 总包数 + 当前包数。refrence number 应该是同一条Wappush唯一的标识(如果拆分成了多条,这几条的refNO应该相同),当然当你发送了128条后,肯定重复了,总包数指的是你这条Wappush分成几个包发送出去,当前包数顾名思义指的是当前这个包是第几条,如果不需要拆分的Wappush这两个字段当然均填1。
WDP = { 0x0B, 0x05, 0x04, 0x0B, (byte) 0x84, 0x23, (byte) 0xF0, 0x00, 0x03 } + refNO + total + currIndex;

WSP 由固定的3个字节的编码组成。WSP = { 0x06, 0x01, (byte) 0xAE }

SI里面包括了一些标记和推送链接以及内容。
SI = TransactionId(又是一个ID,每条Wappush应该不同,拆分时这个字段只会出现一次,详见后面描述) + { 0x02, 0x05, 0x6A, 0x00, 0x45, (byte) 0xC6, 0x08, 0x0C, 0x03 } + urlBytes(推送链接的UTF-8编码数组) + { 0x00, 0x01, 0x03 (这一串标记地址结束)} + contentBytes(推送内容的UTF-8编码数组) + { 0x00, 0x01, 0x01(这一串标记整个Wappush的结束) }

好了,你的消息体如果按上面规则(WDP+WSP+SI)组合起来的长度小于等于140(短信内容体字段要求),直接发送出去就OK了。
如果超过了140要进行拆分,拆分原理是每条拆分的包由WDP+ ( (WSP + SI)的第i部分组成 )。也就是说拆分出来的每一条都是以同样的WDP开始(注意:包的当前序号要增加,就这个字段不一样),然后后面的部分是将其直接按需要的长度截断来组成每一条的(这里也说明了SI的第一个字段TransactionId只会出现一次的原因)。这个算法不难,但是还是需要稍微动一下脑筋。

原理就是上面这些了,然后友情再说一下通过短信发送的时候,联通SGIP协议里面本身对长短信没什么特殊要求,只要在内容里面填上相应标记就可以了,当通过SGIP发送Wappush的时候,直接将内容按照上面规则组合就是了,拆分的时候把其他字段也不用管。
而移动CMPP协议里面有个当前第几条和总条数的字段,当超长短信的时候,需要在这个字段填值。如果是Wappush拆分的时候呢?这个我也没试过(超长Wappush是在联通试的,短的wappush在移动也试过,都是接的华为的短信行业网关),就留给大家自己去试试吧,最好把结果也告知我,如果觉得有什么问题的,也请留言或者来信指出,谢谢~。作者:笑傲网湖。

代码就不贴了,如果需要可以给我邮件,

通过短信网关发送Wappush(包括超长Wappush)相关推荐

  1. 通过短信网关发送Wappush消息

    这一阵子工作内容比较杂,啥活都要干,这不,这两天公司需要通过sms短信网关,发送wappush消息. 因为已经有了另一个同事的工作基础,我所要作的就是使发送出去的消息尽量支持更多的手机型号.在网上搜关 ...

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

    如何通过短信网关发送Wappush消息? 1. 消息头,包含两部分,UDH和PUD,现在经过测试,有三种可以使用的包头数据. 包头a: UDH: 06 05 04 0B 84 23 F0PUD: 01 ...

  3. stmp批量发送email包括图片和附件

    应用场景: 女友工作因素,需要定期的与客户发送组织会议邀请,发送对象不同,内容基本相同,附件不同,每次发送时麻烦费事耽误时间,此工具的开发应用必然会深受女友的喜欢.大大减少其工作量. 设计: Exce ...

  4. python实现邮件发送(包括带附件)

    python实现邮件的发送 注意:发件人邮箱需要开启'POP3/SMTP服务',登录邮箱到设置账户中开启,开启后会给一个授权码(要记下来) 如下代码: import smtplib from emai ...

  5. 新收集的WAPPUSH代码,并经过改造

    package com.wap; import java.io.IOException; import java.sql.Date; public class WapPush { public int ...

  6. Go 学习笔记(24)— 并发(03)[通道特点、通道声明、通道发送/接收/关闭、单向通道]

    1. 通道概念 chan 是 Go 语言里面的一个关键宇,是 channel 的简写,翻译为中文就是通道. goroutine 是 Go 语言里面的并发执行体,通道是 goroutine 之间通信和同 ...

  7. Linux信号 三 信号发送接口集合

    信号发送接口包括raise,kill,killpg,tkill,tgkill,pthread_kill,sigqueue等. 1. raise() /*** raise用于向进程自身发送信号* 成功返 ...

  8. send函数 获得已发送数据长度_蓝牙BLE开发1--起因与回调函数

    1 起因 笔者在开发蓝牙芯片CC2540,试图取实现大量数据的BLE透传功能,在认真学习了蓝牙4.0协议标准以及TI提供的SDK说明,我总结了两个发送函数,以及两个接收函数的位置. 两个发送函数包括 ...

  9. tcp 发送数据长度比预设缓存大_一文秒懂 TCP/IP实际五层结构(下篇)

    点击上方蓝字关注我们! 引言 本运维老狗在TCP/IP实际五层结构的上篇和中篇中详细讲解了TCP/IP实际结构,以及以太网协议.IP协议.和UDP协议.有同学留言催更,迫切的想看本老狗对TCP协议的讲 ...

最新文章

  1. 直播 | DPDK中国技术峰会2017
  2. 简析服务端通过geotools导入SHP至PG的方法
  3. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
  4. vue 传递多行数据_vue 数据传递的方法
  5. 作业1--求100内的奇数。
  6. mysql双机数据热备份_如何设置MySql数据同步实现双机热备份
  7. 关于分布式系统的数据一致性问题(三)
  8. linux cd的帮助文件,linux查看命令帮助man命令详解在线手册
  9. java preference,Java使用Preference类保存上一次记录的方法
  10. 整合servlet、整个filter、整合listener、文件上传
  11. 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题
  12. Vue-watch侦听器和计算属性
  13. jQuery实现清空table表格除首行外的所有数据
  14. mysql 问题:Unknown system variable 'query_cache_size'
  15. 计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 本章小结、常见问题和易混淆知识点
  16. Detours使用方法,简单明了
  17. 网络安全-Web端安全协议
  18. c语言封皮,C语言程序设计封皮.doc
  19. Unity中摄像机跟随
  20. 平方根和立方根怎么用计算机,用计算器探究平方根和立方根

热门文章

  1. 考研辅助app的诞生!
  2. duo是什么意思_DUO是什么?
  3. 屏幕录制下载推荐(可以无水印录制视频)
  4. 变天了,考PMP一定要准备好这3本教材!外加第七版PMBOK指南 解读送上
  5. Windows应用程序
  6. Springboot毕设项目基于大数据平台的个性化图书推荐系统02tt9java+VUE+Mybatis+Maven+Mysql+sprnig)
  7. (C语言)冒泡排序法(含代码)
  8. Android性能优化之常规启动优化
  9. xampp-windows-x64-7.3.3-0-VC15的安装与配置
  10. 解决“error: the requested upstream branch ‘origin/master‘ does not exist”