SP 提交信息到 uni-wise Push接口的数据分包头和包体,其中包体以MIME格式传输。
1、构建包头: SP的企业代码(不加密)+ SP的密钥(加密)+付费代码(加密)+条件类别(加密)+条件代码(加密) +发送方式(加密)+[发送开始时间(加密)+截止时间(加密)]+ 计费手机号码(加密)+ MIME包体 中的边界字段Boundary(加密)
import java.net.HttpURLConnection;
import java.net.URL;
private Url url = null;
HttpURLConnection conn = null;
//先建立URL长连接
public void connectUrl(String strUrl)
{
try
{
url = new URL(strUrl);
conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("post");
}
catch(Exception ex)
{
}
}
//设置包头
public void setHeader()
{
conn.setRequestProperty("SPCode", spCode);
conn.setHeader("EncryptSPKey",enKey);
conn.setHeader("FeeCode",enFeeCode );
conn.setHeader("ConditionType",enConditionType);
conn.setHeader("ConditionCode", enConditionCode);
conn.setHeader("SendType", enSendType);
conn.setHeader("StartTime", enStartTime);
conn.setHeader("EndTime",enEndTime);
conn.setHeader("ThirdPartyPayPhone",enThirdPartyPayPhone);
conn.setHeader("Boundary", enBoundary);
}
包头中除了spcode不用加密,其余的都遵行base64(3des(contentbyteplus,keybyte))加密方式。 加密的实现代码和前面章节描述的一致。
2、构建包体
MIME (Multipurpose Internet Mail Extensions,多目的Internet邮件扩展)是创建用于电子邮件交换, 网络文档,及企业网和Internet上的其他应用程序中的文件格式的规范.
例 4.1. 构建MIME格式的包体
private MimeMessage mime;
//构造MIME格式的包体
private void setMimeMessage()
{
try
{
mime.setFrom(new InternetAddress(strFrom)); (1)
mime.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(strTo)); (2)
mime.setSubject(strSubject,"UTF-8"); (3)
mime.setSentDate(new Date());
mime.setContent(getMimeMultipart());
}
catch(Exception ex)
{
}
}
private MimeMultipart getMimeMultipart()
{
MimeMultipart mimeMultipart = new MimeMultipart();
MimeBodyPart mimeBodyPart = new MimeBodyPart();
try
{
mimeBodyPart.setText((String)mimeBodyText.get(i),"UTF-8"); (4)
mimeMultipart.addBodyPart(mimeBodyPart);
Vector filePathes = getFilePaths();
for(int i = 0; i < filePathes.size(); i++)
{
String filePath = (String)filePathes.get(i);
javax.activation.DataSource datasource = new FileDataSource(filePath);
MimeBodyPart mimeFile = new MimeBodyPart();
mimeFile.setDataHandler(new DataHandler(datasource));
mimeFile.setFileName((new File(filePath)).getName());
mimeMultipart.addBodyPart(mimeFile);
}
}
catch(Exception e)
{
}
return mimeMultipart;
}
(1) |
设置发送地址,在手机上显示发送方为该值 |
(2) |
设置要发送到的手机号 |
(3) |
手机上显示的标题值,经过笔者测试如果不指定编码为UTF-8,手机上显示为乱码(测试手机京瓷), 不知道其他手机是否有这种情况。 |
(4) |
手机上显示的正文,经过笔者测试如果不指定编码为UTF-8,手机上显示为乱码(测试手机京瓷)。 |
3、提交内容到push接口
public void write(String body)
{
java.io.OutputStream outStream = conn.getOutputStream(); (1)
DataOutputStream dataOutStream = new DataOutputStream(outStream);
dataOutStream.writeBytes(body);
dataOutStream.flush();
dataOutStream.close();
}
(1) |
这里的conn对象是引用第一步中实例的URLConnection对象,已经处于open状态。 |
4、读取push响应信息
提交信息与返回信息是实时的,因此应该在提交后即实现读取操作。
public String responsePush()
{
StringBuffer sb = null;
try
{
sb = new StringBuffer("");
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
for(String line = null; (line = rd.readLine()) != null;)
sb.append(line);
rd.close();
}
catch(Exception ex)
{
}
return new String(sb);
}
responsePush()得到的是一个标准的xml字符串。格式请参考接口指南。code节点的值为0代表push成功。