首先要实现的是SSO接口,重点是加密。参考csdn上的文章,很快就可以了,
注意的是在3DES后再用Base编码回产生多余的回车换行,去掉他们再URLEncoder
写加密的时候顺便把解密也写了,等会push的时候要用来取TaskID
然后是push了,push的流程是sp->联通->亚信,其中联通只是验证包头部分。然后把包体提交给亚信。
如果包体格式不对的话,push返回错误代码也是0,但是手机收不到信息。
包头的加密就用SSO中现成的,包体用MimeMessage构造。这个是javamail的一个类。
连接用HttpURLConnection,
public void connectUrl(String strUrl)
{
try
{
url = new URL("http", "pushservice.uni-wise.com", 80,
"/imappushsubmit.aspx");
hconn = (HttpURLConnection) url.openConnection();
hconn.setRequestMethod("POST");
hconn.setDoOutput(true);
hconn.setDoInput(true);
}
catch (Exception ex)
{
System.out.println(ex);
}
}
构建包体
private void setMimeMessage()
{
try
{
Properties props = new Properties();
ServerIP = "smtp.sina.com.cn";
System.out.println(ServerIP);
props.put("mail.smtp.host", ServerIP);
Session session = Session.getInstance(props, null);
session.setDebug(true);
mime = new MimeMessage(session);
mime.setFrom(new InternetAddress("cheng_shiyong@yahoo.com.cn",new String(strFrom.getBytes("ISO8859_1"),"GB2312"),"GB2312"));
mime.addRecipient(javax.mail.Message.RecipientType.TO,
new InternetAddress(strTo));
mime.setSubject(new String(strSubject.getBytes("ISO8859_1"),"GB2312"), "GB2312");
mime.setSentDate(new java.util.Date());
mime.setContent(getMimeMultipart());
}
catch (Exception ex)
{
System.out.println("MME.Push.setMimeMessage Error" + ex);
}
}
private MimeMultipart getMimeMultipart()
{
MimeMultipart mimeMultipart = new MimeMultipart();
MimeBodyPart mimeBodyPart = new MimeBodyPart();
try
{
mimeBodyPart.setText(new String(mimeBodyText.getBytes("ISO8859_1"),"GB2312"), "GB2312");
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 javax.activation.
FileDataSource(filePath);
MimeBodyPart mimeFile = new MimeBodyPart();
mimeFile.setHeader("Content-Transfer-Encoding", "base64");
mimeFile.setDataHandler(new javax.activation.DataHandler(datasource));
mimeFile.setFileName( (new File(filePath)).getName());
mimeMultipart.addBodyPart(mimeFile);
}
}
catch (Exception e)
{
System.out.println("MME.Push.getMimeMultipart Error" + e);
}
return mimeMultipart;
}
发送信息用
MimeMessage.writeTo(hconn.getOutputStream());
读取联通返回信息
BufferedReader rd = new BufferedReader(new InputStreamReader(hconn.
getInputStream()));
for (String line = null; (line = rd.readLine()) != null; )
{
sb.append(line);
}
中间遇到过jaf 报不支持 multipart/mixed类型的错误。造成这个错误的原因是同时有多个mail包存在在系统里面,解决方式是把jaf和mail两个包都放在WEB-INF/lib下面。删除掉其他地方的副本。
另外联通返回的包里面的错误代码是10进制的,要转换成16进制的才能在错误表里面查到
只是自己备忘,写的很乱。呵呵