本文用的是中国移动通信互联网短信网关接口协议CMPP2.0,参考华为smproxy.jar包并进行了一些问题的修复和封装。

Download:SMS-Gateway

一、华为smproxy.jar包存在乱码问题:

       1、提交短信

      CMPP_Connect_REP----->AuthenticatorISMG

            CMPP_Submit_REP------->MsgId

            CMPP_Submit--------------->msg_Content

        2、状态报告

            CMPP_Deliver--------------->MsgId

       3、上行消息

            CMPP_Deliver--------------->MsgId

            CMPP_Deliver--------------->MsgContent

解决办法通过调整底层源码AuthenticatorISMG、MsgId输出为HexString,MsgContent中文转码

二、通过TypeConvert获取msgId

TypeConvert.bytesToHexString(msgId, msgId.length);

三、中文转码问题

       经测试 需要编码为GBk或GB2312

四、配置文件

<?xml version="1.0" encoding="UTF-8"?>

<config>
	<!--与InfoX建立连接所需参数-->
    <CMPPConnect>
       <!-- InfoX主机地址,与移动签合同时移动所提供的地址 需修改 -->
       <host>127.0.0.1</host>
       <!-- InfoX主机端口号 cmpp2.0默认为7890,cmpp3.0为7891-->
       <port>7890</port>
       <!--(登录帐号SP…ID)与移动签合同时所提供的企业代码 6位  需修改-->
       <source-addr>123456</source-addr>
       <!--登录密码 默认为空 如有需修改 -->
       <shared-secret>123456</shared-secret>
       <!-- 心跳信息发送间隔时间(单位:秒) -->
       <heartbeat-interval>30</heartbeat-interval>
       <!-- 连接中断时重连间隔时间(单位:秒)-->
       <reconnect-interval>30</reconnect-interval>
       <!-- 需要重连时,连续发出心跳而没有接收到响应的个数(单位:个)-->
       <heartbeat-noresponseout>5</heartbeat-noresponseout>
       <!-- 操作超时时间(单位:秒) -->
       <transaction-timeout>10</transaction-timeout>
       <!--双方协商的版本号(大于0,小于256)-->
       <version>33</version>
       <!--是否属于调试状态,true表示属于调试状态,所有的消息被打印输出到屏幕,false表示不属于调试状态,所有的消息不被输出-->
       <debug>true</debug>
    </CMPPConnect>
</config>

五、测试类

package com.sms.gateway.domain;

/**
 * @author xxxon 2019/10/25
 */
public class TestSendSms {

	public static void main(String[] args) throws InterruptedException {
                //若与实际业务不相符可自行封装
		WebSMSender.getInstance().CmppSmsSubmitClient(new String[] { "xxxxxxx" }, "消息哈".getBytes());
		Thread.sleep(10000000);
	}
}

六、

有人问一些配置的问题,需要修改的地方,在此我更新下

private String serviceId = "123456";// 移动提供的业务代码   需修改(移动提供)
private int msgFmt = 15;// 信息格式 246:二进制信息   需修改 15文本短信
private String msgSrc = "123456";// 信息内容来源(source-addr)   需修改(移动提供)
private String srcTerminalId = "123456";// 短信接入号码  需修改(移动提供)

private String feeType = "01";// 资费类别 一般为02:按条计信息费(与移动协商)
private String feeCode = "10";// 资费代码(以分为单位)(与移动协商)


短信接入号码 :srcTerminalId
企业代码 :msgSrc 信息内容来源(source-addr)
业务代码:serviceId
密码:source-addr  与移动签合同时所提供的企业代码

参考链接:https://blog.csdn.net/ziggo26/article/details/7620202

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐