`
足至迹留
  • 浏览: 485439 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

联通长短信开发--使用smproxyapi.jar

阅读更多
联通短信是基于sgip协议的,作为第三方接入使用的是smproxyapi.jar包来开发短信功能。联通普通短信长度是140字节,超长就会报错不能提交给网关。起初规避措施是自己把长短信拆分,然后分条发送,这样手机用户接收到的就是多条短信,体验不好。后来通过查资料发现可以使用udhi头来使多条短信最终能合成一条短信展示给手机用户。

1.首先要设置tp_udhi为1,代表后面每条短信内容前面几个字节是udhi头.如果是普通短信设置为0即可。 0:不含任何头信息, 1:含头信息。参考协议:gsm03.40  9.2.3.23

2.如果一条长短信被分为了3条,则每条短信正文内容前面需要添加一个6字节的udhi头。
       
// 头信息。包头一共6个字节,如下: 
        // 1、字节一:包头长度,固定填写0x05;
        // 2、字节二:包头类型标识,固定填写0x00,表示长短信;
        // 3、字节三:子包长度,固定填写0x03,表示后面三个字节的长度;
        // 4、字节四到字节六:包内容:
        // 1)字节四:长消息参考号,每个SP给每个用户发送的每条参考号都应该不同,可以从0开始,每次加1,最大255,便于同一个终端对同一个SP的消息的不同的长短信进行识别;
        // 2)字节五:本条长消息的的总消息数,从1到255,一般取值应该大于2;
        // 3)字节六:本条消息在长消息中的位置或序号,从1到255,第一条为1,第二条为2,最后一条等于第四字节的值。
        byte[] tp_udhiHead = new byte[6];
        tp_udhiHead[0] = 0x05;
        tp_udhiHead[1] = 0x00;
        tp_udhiHead[2] = 0x03;
        tp_udhiHead[3] = 0x00;// 初始化,后面会具体赋值
        tp_udhiHead[4] = 0x00;// 初始化,后面会具体赋值。
        tp_udhiHead[5] = 0x00;// 初始化,后面会具体赋值。

上面的第四个字节代表每组短信(比如一条长短信分为3条短信,则这3条为一组)的标识,不强制必须唯一,本人这样赋值:
tp_udhiHead[3] = (byte)(int)(Math.random() * 255);


3.编码。messageCoding要设置为8,即UCS2编码,也就是短信内容要使用smsContent.getBytes("UTF-16BE");来获取字节,然后前面拼接上6个字节的udhi头。普通短信messageCoding设置为15即可。
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics