联通短信是基于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即可。
分享到:
相关推荐
解决no such provider: BC 问题所需的JAR 在jdk中的jre\lib\security修改java.security文件, security.provider.6=com.sun.security.sasl.Provider 下面添加 security.provider.7=org.bouncycastle.jce.provider....
spring 3.2.4 Realease 的所有jar包: spring-context-3.2.4.RELEASE.jar spring-core-3.2.4.RELEASE.jar spring-beans-3.2.4.RELEASE.jar spring-test-3.2.4.RELEASE.jar spring-web-3.2.4.RELEASE.jar spring-aop-...
aspose-words-15.8.0-jdk16.jar是Aspose对Word文档转换PDF所用的Jar包;aspose-words-15.8.0-jdk16.jar是Aspose对Word文档转换PDF所用的Jar包
此压缩文件中包含spring的如下组件的doc,source,jar: spring-aop-4.1.6.RELEASE.jar spring-aspects-4.1.6.RELEASE.jar spring-beans-4.1.6.RELEASE.jar spring-context-4.1.6.RELEASE.jar spring-context-...
ibatis-2.3.4.726.jar,ibatis-2.3.0.677.jar,ibatis-2.3.3.720.jar下载,都已放入一个压缩包下。
solr更新到6.x的版本了,ik-analyzer-5.x.jar又不好使了。 无意间从"随-忆"的博客中看到了如何去修改源代码,从而让分词器能够适应6.x的版本,亲自尝试了一下,果然可以,于是奉上了自己重新编译的jar包。 6.x的版本...
mysql-connector-java-8.0.25.jar
commons-beanutils.jar commons-collections-3.1.jar commons-pool-1.2.jar 集合
bcprov-jdk16-1.46.jar
里面包含两个jjar包:c3p0-0.9.2-pre1.jar以及mysql-connector-java-5.1.13-bin.jar,主要用于c3p0数据库连接池使用
图片上传需要的三个jar包(commons-codec-1.3.jar,commons-httpclient-3.1.jar,commons-logging-1.1.jar)
Moritz Bechler编写,源码地址为:https://github.com/mbechler/marshalsec,下载下来之后使用maven编译,此工具为编译好的jar包,方便没有编译环境的同学们直接jar包开启ldap和rmi服务 开启rmi服务 java -cp ...
json-simple-1.1.jar json-simple-1.1-sources.jar (json-simple-1.1.jar)&(json-simple-1.1-sources.jar).jar (json-simple-1.1.jar)&(json-simple-1.1-sources.jar).jar
poi-ooxml-3.5-beta6-20090622.jar
解决no such provider: BC 问题所需的JAR 在jdk中的jre\lib\security修改java.security文件, security.provider.6=com.sun.security.sasl.Provider 下面添加 security.provider.7=org.bouncycastle.jce.provider....
bcprov-jdk16-143.jar提供加密,解密,生成密钥对等方法
commons-beanutils-1.8.2.jar,commons-codec-1.4.jar,commons-collections-3.2.1.jar,commons-dbcp-1.2.2.jar,commons-digester-2.0.jar,commons-fileupload-1.2.1.jar,commons-httpclient.jar,commons-io-...
hibernate-jpa-2.0-api-1.0.1.Final.jar
commons-collections4-4.1.jar
java -jar baksmali-2.0.3.jar -x android.odex java -jar smali-2.0.3.jar out -o classes.dex /////////// android 合并apk和odex文件 前提:正确安装JDK和配置环境变量 需要这个apk所在的rom里面的一些jar...