联通彩E接入问题备忘

来源:互联网 发布:win7 access数据库 编辑:程序博客网 时间:2024/04/29 16:01

首先要实现的是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进制的才能在错误表里面查到

只是自己备忘,写的很乱。呵呵

原创粉丝点击