我现在在做一个短信接口,但是只有发送端的程序,我不是太明白,希望高手给我分析一下接收短我该怎么去做了啊!!发送端测试通过 下面是程序:
//发送端程序代码
import java.io.*;
import java.net.*;
import java.util.Enumeration;
import java.util.Vector;
import sun.misc.BASE64Encoder;
public class testoutput {
public static void main(String[] argv) throws Exception {
String authorizationInfo="<txly>=<txly>";
String encoding = new sun.misc.BASE64Encoder().encode (authorizationInfo.getBytes());
URL url = new URL("http://211.155.23.60:8081/spsmsgate");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty ("Authorization", encoding);
connection.setDoOutput(true);
PrintWriter out = new PrintWriter(connection.getOutputStream());
String name = "<?xml version='1.0' encoding='GB2312'?><PushMsg><SourceAddr>0163377</SourceAddr><DestAddr>13926019282</DestAddr><MTTime>2003-01-01 17:34:11</MTTime><ReportFlag>0</ReportFlag><ServiceID>00</ServiceID><FeeUserType>0</FeeUserType><MTFlag>0</MTFlag><FeeUserAddr>13926019282</FeeUserAddr><TPPid>0</TPPid><TPUDHI>0</TPUDHI><FeeType>01</FeeType><FeeValue>0</FeeValue><MessageCoding>15</MessageCoding><Content>测试</Content></PushMsg>";
out.println(name);
out.close();
BufferedReader in
= new BufferedReader(new InputStreamReade r(connection.getInputStream
()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
}
}
这个是分析书:
短信平台接入说明
1.2. 接口说明
短信平台和SP的接口采用HTTP+XML的方式,SP和短信网关互为HTTP的客户端和服务端, HTTP客户端必须采用授权方式访问这些URL,HTTP的特点决定客户端和服务端的每一次通讯都必须完成授权连接,发送请求,接收应答,关闭连接等过程, 建议SP使用HTTP1.1 KeepAlive的方式.
对于MO方向的命令(即命令接收方为SP),由短信网关通过POST方式提交给SP进行处理,SP在应答中确认信息接收成功与否.MO需要返回的信息通过Push的方式过来
对于SP主动向用户发送信息的Push业务,由SP作为客户端将信息通过POST方式提交到SP短信接收模块,短信网关在应答中确认信息发送成功与否.
如果HTTP服务器接收到的HTTP请求内容的格式不完整或不正确,HTTP服务器应该返回错误码.
HTTP服务端支持HTTP1.0和HTTP1.1
1.2.1. IOD模块发送请求到SP服务
<?xml version="1.0" encoding="GB2312"?>
<IODMsg>
<!—短信主叫号码 -->
<SoureAddr>13923864570</SourceAddr>
<!—短信被叫号码 -->
<DestAddr>188888</DestAddr>
<!—短信接收时间-->
<MOTime>2003-01-01 17:34:11</MOTime>
<!—短信内容编码方式 -->
<MessageCoding>15</MessageCoding >
<!—短信内容 -->
<Content>特斯坦</Content>
</IODMsg>
1.2.2. SP服务向IOD模块返回
<?xml version="1.0" encoding="GB2312"?>
<IODResp>
<!— 返回代码 0:成功 1:失败-->
<Result>0</Result>
<!—返回代码描述 -->
<RetMsg>成功</RetMsg>
</IODResp>
1.2.3. SP服务向SP短信接收模块发送请求
<?xml version="1.0" encoding="GB2312"?>
<PushMsg>
<!—短信主叫号码 -->
<SoureAddr>18888</SourceAddr>
<!—短信被叫号码 -->
<DestAddr>13923864570</DestAddr>
<!—短信发送时间-->
<MTTime>2003-01-01 17:34:11</MTTime>
<!—是否需要状态报告 0:不需要,1:需要,2:产生话单-->
<ReportFlag>0</ReportFlag>
<!—业务类型-->
<ServiceID>Game</ServiceID>
<!—计费用户类型 0:对被叫用户计费,1:对主叫用户计费,2:SP计费-->
<FeeUserType>0</ FeeUserType >
<!—计费用户-->
<FeeUserAddr>13923864571</ FeeUserAddr >
<!—Tp-pid-->
<TPPid>0</ TPPid >
<!—TPUDHI-->
< TPUDHI >0</ TPUDHI >
<!—资费类型 01 :对计费号码免费,02对计费用户按条收费,03:对计费用户包月计费,04:对计费用户信息费封顶-->
< FeeType>0</ FeeType>
<!—资费代码,单位为分-->
< FeeValue>10</ FeeValue>
<!—信息格式 0:Asc,4:Binary,15:GBK,8:UCS2-->
< MessageCoding>0</ MessageCoding>
<!—短信内容编码方式 -->
<MessageCoding>15</MessageCoding >
<!—短信内容 -->
<Content>特斯坦</Content>
</PushMsg>
1.2.4. SP短信接入模块向SP服务返回
<?xml version="1.0" encoding="GB2312"?>
<PushResp>
<!— 返回代码 0:成功 1:非法登录 2:IP访问不允许,3:请求格式错误 4:非法主叫号码 5:非法计费号码 6:非法被叫号码 -->
<Result>0</Result>
<!—返回代码描述 -->
<RetMsg>成功</RetMsg>
</PushResp>
1.2.5. 身份校验
所有发送来的HTTP请求均需要身份校验,身份校验采用标准的HTTP的身份校验方式,HTTP客户端必须在每次请求中都带上授权信息.HTTP的身份校验的实现请参阅HTTP协议.
例如:用户名为jlt,密码为jlt,即在http请求的头里面设置Authorization: PGpsdD49PGpsdD4=, PGpsdD49PGpsdD4=为<jlt>=<jlt>的base64编码结果.
//发送端程序代码
import java.io.*;
import java.net.*;
import java.util.Enumeration;
import java.util.Vector;
import sun.misc.BASE64Encoder;
public class testoutput {
public static void main(String[] argv) throws Exception {
String authorizationInfo="<txly>=<txly>";
String encoding = new sun.misc.BASE64Encoder().encode (authorizationInfo.getBytes());
URL url = new URL("http://211.155.23.60:8081/spsmsgate");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty ("Authorization", encoding);
connection.setDoOutput(true);
PrintWriter out = new PrintWriter(connection.getOutputStream());
String name = "<?xml version='1.0' encoding='GB2312'?><PushMsg><SourceAddr>0163377</SourceAddr><DestAddr>13926019282</DestAddr><MTTime>2003-01-01 17:34:11</MTTime><ReportFlag>0</ReportFlag><ServiceID>00</ServiceID><FeeUserType>0</FeeUserType><MTFlag>0</MTFlag><FeeUserAddr>13926019282</FeeUserAddr><TPPid>0</TPPid><TPUDHI>0</TPUDHI><FeeType>01</FeeType><FeeValue>0</FeeValue><MessageCoding>15</MessageCoding><Content>测试</Content></PushMsg>";
out.println(name);
out.close();
BufferedReader in
= new BufferedReader(new InputStreamReade r(connection.getInputStream
()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
}
}
这个是分析书:
短信平台接入说明
1.2. 接口说明
短信平台和SP的接口采用HTTP+XML的方式,SP和短信网关互为HTTP的客户端和服务端, HTTP客户端必须采用授权方式访问这些URL,HTTP的特点决定客户端和服务端的每一次通讯都必须完成授权连接,发送请求,接收应答,关闭连接等过程, 建议SP使用HTTP1.1 KeepAlive的方式.
对于MO方向的命令(即命令接收方为SP),由短信网关通过POST方式提交给SP进行处理,SP在应答中确认信息接收成功与否.MO需要返回的信息通过Push的方式过来
对于SP主动向用户发送信息的Push业务,由SP作为客户端将信息通过POST方式提交到SP短信接收模块,短信网关在应答中确认信息发送成功与否.
如果HTTP服务器接收到的HTTP请求内容的格式不完整或不正确,HTTP服务器应该返回错误码.
HTTP服务端支持HTTP1.0和HTTP1.1
1.2.1. IOD模块发送请求到SP服务
<?xml version="1.0" encoding="GB2312"?>
<IODMsg>
<!—短信主叫号码 -->
<SoureAddr>13923864570</SourceAddr>
<!—短信被叫号码 -->
<DestAddr>188888</DestAddr>
<!—短信接收时间-->
<MOTime>2003-01-01 17:34:11</MOTime>
<!—短信内容编码方式 -->
<MessageCoding>15</MessageCoding >
<!—短信内容 -->
<Content>特斯坦</Content>
</IODMsg>
1.2.2. SP服务向IOD模块返回
<?xml version="1.0" encoding="GB2312"?>
<IODResp>
<!— 返回代码 0:成功 1:失败-->
<Result>0</Result>
<!—返回代码描述 -->
<RetMsg>成功</RetMsg>
</IODResp>
1.2.3. SP服务向SP短信接收模块发送请求
<?xml version="1.0" encoding="GB2312"?>
<PushMsg>
<!—短信主叫号码 -->
<SoureAddr>18888</SourceAddr>
<!—短信被叫号码 -->
<DestAddr>13923864570</DestAddr>
<!—短信发送时间-->
<MTTime>2003-01-01 17:34:11</MTTime>
<!—是否需要状态报告 0:不需要,1:需要,2:产生话单-->
<ReportFlag>0</ReportFlag>
<!—业务类型-->
<ServiceID>Game</ServiceID>
<!—计费用户类型 0:对被叫用户计费,1:对主叫用户计费,2:SP计费-->
<FeeUserType>0</ FeeUserType >
<!—计费用户-->
<FeeUserAddr>13923864571</ FeeUserAddr >
<!—Tp-pid-->
<TPPid>0</ TPPid >
<!—TPUDHI-->
< TPUDHI >0</ TPUDHI >
<!—资费类型 01 :对计费号码免费,02对计费用户按条收费,03:对计费用户包月计费,04:对计费用户信息费封顶-->
< FeeType>0</ FeeType>
<!—资费代码,单位为分-->
< FeeValue>10</ FeeValue>
<!—信息格式 0:Asc,4:Binary,15:GBK,8:UCS2-->
< MessageCoding>0</ MessageCoding>
<!—短信内容编码方式 -->
<MessageCoding>15</MessageCoding >
<!—短信内容 -->
<Content>特斯坦</Content>
</PushMsg>
1.2.4. SP短信接入模块向SP服务返回
<?xml version="1.0" encoding="GB2312"?>
<PushResp>
<!— 返回代码 0:成功 1:非法登录 2:IP访问不允许,3:请求格式错误 4:非法主叫号码 5:非法计费号码 6:非法被叫号码 -->
<Result>0</Result>
<!—返回代码描述 -->
<RetMsg>成功</RetMsg>
</PushResp>
1.2.5. 身份校验
所有发送来的HTTP请求均需要身份校验,身份校验采用标准的HTTP的身份校验方式,HTTP客户端必须在每次请求中都带上授权信息.HTTP的身份校验的实现请参阅HTTP协议.
例如:用户名为jlt,密码为jlt,即在http请求的头里面设置Authorization: PGpsdD49PGpsdD4=, PGpsdD49PGpsdD4=为<jlt>=<jlt>的base64编码结果.