SP 短信开发-PROVISION接口实现-正向订购实例代码

 

实例代码:MYprovision.jsp ,用JSP方式实现。

<?xml version="1.0" encoding="UTF-8"?>
<%@ page contentType="text/xml; charset=UTF-8" %>
<%@ page import="com.AAAA.appn.*" %>
<%@ page import="java.io.*" %>
<%@ page import="org.jdom.xpath.*" %>//当然分析XML数据大把库可以用。
<%@ page import="org.jdom.*" %>
<%@ page import="java.util.*" %>
<%
//用户通过手机发送定制或取消指令到相应的SP特服号,网关收到MO消息后向MISC发起MO鉴权批价请求,
//MISC收到MO鉴权批价请求后进行订购、取消点播指令匹配;
//如果判断指令是定制或取消指令,则MISC会向SP发送订购关系同步请求包SyncOrderRelationReq

    boolean resultStr = true;
    String XMLData = null;
    StringBuffer tempStringBuffer = new StringBuffer();
    String tempString = null;
    BufferedReader reader = request.getReader();//接受MISC的订购关系同步请求包SyncOrderRelationReq
   
    while ((tempString = reader.readLine()) != null){
        tempStringBuffer.append(tempString);//读取订购关系同步请求包SyncOrderRelationReq内容
    }
    XMLData = tempStringBuffer.toString();//转换订购关系同步请求包SyncOrderRelationReq内容为STRING,存储到XMLDATA里


   if(XMLData == null && XMLData.length()<10){
   resultStr = false;
   }
    tempStringBuffer.setLength(0);//清空tempStringBuffer
    tempString = null;

    //out.println("xml:="+(XMLData.equals("")));

org.jdom.input.SAXBuilder sb=new org.jdom.input.SAXBuilder();
org.jdom.Document doc=null;
//xmldata为非空字符
if(XMLData.equals("")){
 //doc=sb.build("/home/web/provision.xml");
 return ;
}else{
//调用下面的函数,写入PROVISION.XML和PROVISION.LOG文件了。
 write("/home/web/provision.xml",XMLData);//本地的provision.xml为一个临时文件;
 append("/home/web/provision.log",XMLData);//provision.log为一个同步信息的纪录文件;
 doc=sb.build("/home/web/provision.xml");//读取PROVISION.XML文件,SB和DOC的使用方法不是很明白;
 
}
//以下是读取PROVISION.XML的信息,解释XML文件的各部分定义,和读取数值到变量里。
org.jdom.Element root=doc.getRootElement();
Element SyncOrderRelationReq=null;
Element Send_Address=null;
Element Dest_Address=null;
Element FeeUser_ID=null;
Element DestUser_ID=null;

String TransactionID=null;
String MsgType=null;
String hRet=null;
String Version=null;
//--------------------
String LinkID=null;
String ActionID=null;
String ActionReasonID=null;
String SPID=null;
String SPServiceID=null;
String AccessMode=null;
String FeatureStr=null;
//----------------------
String Send_Address_DeviceType=null;
String Send_Address_DeviceID=null;
String Dest_Address_DeviceType=null;
String Dest_Address_DeviceID=null;
String FeeUser_ID_UserIDType=null;
String FeeUser_ID_MSISDN=null;
String FeeUser_ID_PseudoCode=null;
String DestUser_ID_UserIDType=null;
String DestUser_ID_MSISDN=null;
String DestUser_ID_PseudoCode=null;
//读取header信息;
Element header=(Element)XPath.selectSingleNode(root,"/SOAP-ENV:Envelope/SOAP-ENV:Header");
List ns=header.getChildren();
for(Iterator i=ns.iterator();i.hasNext();){
  Object n=i.next();
  if(n instanceof Element){
    Element e=(Element)n;
    if(e.getName().equals("TransactionID")){
      TransactionID=e.getTextNormalize();
    }
  }
}
//读取body信息;
Element body=(Element)XPath.selectSingleNode(root,"/SOAP-ENV:Envelope/SOAP-ENV:Body");
ns=body.getChildren();
for(Iterator i=ns.iterator();i.hasNext();){
  Object n=i.next();
  if(n instanceof Element){
    Element e=(Element)n;
    if(e.getName().equals("SyncOrderRelationReq")){
      SyncOrderRelationReq=e;
    }
  }
}

//取得数据包的所有孩子。
if(SyncOrderRelationReq!=null){
  ns=SyncOrderRelationReq.getChildren();
  for(Iterator i=ns.iterator();i.hasNext();){
    Object n=i.next();
    if(n instanceof Element){
      Element e=(Element)n;
      //------------------------------------
      if(e.getName().equals("Send_Address")){
        Send_Address=e;
      }
      if(e.getName().equals("Dest_Address")){
        Dest_Address=e;
      }
      if(e.getName().equals("FeeUser_ID")){
        FeeUser_ID=e;
      }
      if(e.getName().equals("DestUser_ID")){
        DestUser_ID=e;
      }
      //------------------------------------
      if(e.getName().equals("Version")){
        Version=e.getTextNormalize();
      }
      if(e.getName().equals("MsgType")){
        MsgType=e.getTextNormalize();
      }
      if(e.getName().equals("LinkID")){
        LinkID=e.getTextNormalize();
      }
      if(e.getName().equals("ActionID")){
        ActionID=e.getTextNormalize();
      }
      if(e.getName().equals("ActionReasonID")){
        ActionReasonID=e.getTextNormalize();
      }
      if(e.getName().equals("SPID")){
        SPID=e.getTextNormalize();
      }
      if(e.getName().equals("SPServiceID")){
        SPServiceID=e.getTextNormalize();
      }
      if(e.getName().equals("AccessMode")){
        AccessMode=e.getTextNormalize();
      }
      if(e.getName().equals("FeatureStr")){
        FeatureStr=e.getTextNormalize();
      }
    }
  }
}

//分析数据包的

if(Send_Address!=null){
  ns=Send_Address.getChildren();
  for(Iterator i=ns.iterator();i.hasNext();){
    Object n=i.next();
    if(n instanceof Element){
      Element e=(Element)n;
      if(e.getName().equals("DeviceType")){
        Send_Address_DeviceType=e.getTextNormalize();
      }
      if(e.getName().equals("DeviceID")){
        Send_Address_DeviceID=e.getTextNormalize();
      }
    }
  }
}
if(Dest_Address!=null){
  ns=Dest_Address.getChildren();
  for(Iterator i=ns.iterator();i.hasNext();){
    Object n=i.next();
    if(n instanceof Element){
      Element e=(Element)n;
      if(e.getName().equals("DeviceType")){
        Dest_Address_DeviceType=e.getTextNormalize();
      }
      if(e.getName().equals("DeviceID")){
        Dest_Address_DeviceID=e.getTextNormalize();
      }
    }
  }
}
if(FeeUser_ID!=null){
  ns=FeeUser_ID.getChildren();
  for(Iterator i=ns.iterator();i.hasNext();){
    Object n=i.next();
    if(n instanceof Element){
      Element e=(Element)n;
      if(e.getName().equals("UserIDType")){
        FeeUser_ID_UserIDType=e.getTextNormalize();
      }
      if(e.getName().equals("MSISDN")){
        FeeUser_ID_MSISDN=e.getTextNormalize();
      }
      if(e.getName().equals("PseudoCode")){
        FeeUser_ID_PseudoCode=e.getTextNormalize();
      }
    }
  }
}
if(DestUser_ID!=null){
  ns=DestUser_ID.getChildren();
  for(Iterator i=ns.iterator();i.hasNext();){
    Object n=i.next();
    if(n instanceof Element){
      Element e=(Element)n;
      if(e.getName().equals("UserIDType")){
        DestUser_ID_UserIDType=e.getTextNormalize();
      }
      if(e.getName().equals("MSISDN")){
        DestUser_ID_MSISDN=e.getTextNormalize();
      }
      if(e.getName().equals("PseudoCode")){
        DestUser_ID_PseudoCode=e.getTextNormalize();
      }
    }
  }
}
//以上的内容是由移动定义好的SOAP XML字段,主要解释和读取数据到变量

//以下是业务逻辑部分,现在写到JSP里面了,可以用直接传递给业务层用SERVLET等方式做业务处理。


//如果要增加同步的业务信息,只需要修改以下部分代码;
if(TransactionID!=null&&ActionID!=null&&DestUser_ID_MSISDN!=null&&SPServiceID!=null){
  sun.misc.BASE64Decoder b=new sun.misc.BASE64Decoder();
        byte[] bb=b.decodeBuffer(FeatureStr); //服务订购参数(base64加密),内容是长号码+空格+用户发送内容,并用DECODEBASE64Decoder()整成BYTE[]

        String content=new String(bb,"gb2312");//转换为STRING;
 String sql_="insert into provision(content,actionid,provisiontime,MSISDN,PServiceID)  values('"+content+"',"+ActionID+",now(),'"+DestUser_ID_MSISDN+"','"+SPServiceID+"')";
DBUtil.exe(sql_);//把provision的订购信息写入到数据表里;数据库写操作函数
 content=content.trim().toUpperCase();
 ActionID=ActionID.trim().toUpperCase();
 SPServiceID=SPServiceID.trim().toUpperCase();
 
 int userid = BizLogicUtil.getUserID(DestUser_ID_MSISDN);
 //分析用户的同步订购信息内容,并更新相应的SP注册数据库表;
 if (content.startsWith("AA")) {
    BizLogicUtil.registerUser(userid, 3, 1, null);
                NVSHService.register(userid);  //注册男女字典用户;
 }else if (content.startsWith("A")) {
    BizLogicUtil.registerUser(userid, 2, 1, null);
//以下三个if的代码意义在于,不管用户发送的定制信息是否"AA"和“A”,只要同步订购信息的SPServiceID的业务代码,就进行操作,
//ActionID,服务状态管理动作代码,具体值如下:
//1: 开通服务;
//2: 停止服务;
//3: 激活服务;
//4: 暂停服务;
    
 }else if (SPServiceID.startsWith("-TEST1")&&ActionID.startsWith("1")) {
    BizLogicUtil.registerUser(userid, 1, 1, null);//注册用户函数
 }else if (SPServiceID.startsWith("-TEST2")&&ActionID.startsWith("2")) {//停止服务;
                BizLogicUtil.registerUser(userid, 1, 2, null);//注销用户函数。
            } else if (SPServiceID.startsWith("-QTYX")&&ActionID.startsWith("2")) {//停止服务;
                BizLogicUtil.registerUser(userid, 2, 2, null);
                BizLogicUtil.registerUser(userid, 3, 2, null);
            }
 //写入群发信息表,对订购用户信息发送订购成功相应的欢迎SMS或菜单;
 sql_="insert into pushsms(content,MSISDN,PServiceID,FeeType,FeeCode,Sended,ActionID,revtime)  values('"+content+"','"+DestUser_ID_MSISDN+"','"+SPServiceID+"','01','00',0,"+ActionID+",now())";
 DBUtil.exe(sql_);

}

/*
String TransactionID=null;
String MsgType=null;
String hRet=null;
String Version=null;
//--------------------
String LinkID=null;
String ActionID=null;
String ActionReasonID=null;
String SPID=null;
String SPServiceID=null;
String AccessMode=null;
String FeatureStr=null;
//----------------------
String Send_Address_DeviceType=null;
String Send_Address_DeviceID=null;
String Dest_Address_DeviceType=null;
String Dest_Address_DeviceID=null;
String FeeUser_ID_UserIDType=null;
String FeeUser_ID_MSISDN=null;
String FeeUser_ID_PseudoCode=null;
String DestUser_ID_UserIDType=null;
String DestUser_ID_MSISDN=null;
String DestUser_ID_PseudoCode=null;
*/
  hRet="0" ;
%>
<%!
//覆盖写入content到文件file;
//
//
  public static void write ( String file , String content )
    {
        FileWriter writer = null ;
        try
        {
            if ( file != null && content != null )
            {
                writer = new FileWriter ( file ) ;
                writer.write ( new String ( content.getBytes ( "GBK" ) ) ) ;
            }
        }
        catch ( IOException ex )
        {
        }
        finally
        {
            if ( writer != null )
            {
                try
                {
                    writer.close () ;
                }
                catch ( IOException ex1 )
                {
                }
            }
        }
    }

//添加COMTENT到文件file

 public static void append(String file, String content) {
        FileOutputStream fo = null;
        BufferedWriter fout = null;
        String contents = "";
        try {

            fo = new FileOutputStream(file, true);
            fout = new BufferedWriter(new OutputStreamWriter(fo));
            contents = content + "\n";
            fout.write(contents, 0, contents.length());
            fout.close();
            fo.close();
        } catch (Exception e) {

        } finally {
            try {
                fout.close();
                fo.close();
            } catch (Exception e1) {
            }
        }

    }

%>
//该部分代码基本上满足要求,可以不作改动;
//SP收到同步请求包后,对订购请求做相应的订购关系处理,并返回订购关系同步应答SyncOrderRelationResp
//MISC收到应答包后,根据返回结果是否正确,在系统中生成正式的订购关系或者取消订购关系,并由1862系统给用户下发订购成功或取消成功的提醒消息
//SyncOrderRelationResp消息字段描述:
//字段名 重要性 类型 说明
//MsgType 必须 string 消息类型
//TransactionID 必须 string 该消息编号
//Version 必须 string  该接口消息的版本号,本次所有的接口消息的版本都为“1.5.0”
//hRet 必须 integer 返回值,主要错误如下:
//0:成功
//4007: MISC 同步开通服务,但SP 端已存在订购关系,且状态为开通
//4008: MISC 同步开通服务,且SP 端不存在订购关系,但开通服务失败
//4010: MISC 同步停止服务, 且SP 端存在订购关系, 但取消服务失败
//4011: MISC 同步停止服务, 但SP 端不存在订购关系
//4012: MISC 同步暂停服务, 且SP 端存在订购关系, 但暂停服务失败
//4013: MISC 同步暂停服务, 但SP 端不存在订购关系
//4015: MISC 同步激活服务, 但SP 端已存在订购关系, 且状态为开通
//4016: MISC 同步激活服务, 但SP 端不存在订购关系
//其它错误请参见《MISC系统短信SP接入指南-接口改造分册》。

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dsmp="http://www.monternet.com/dsmp/schemas/">
<SOAP-ENV:Header>
<dsmp:TransactionID xmlns:dsmp="http://www.monternet.com/dsmp/schemas/">
<%=TransactionID %>
</dsmp:TransactionID>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<dsmp:SyncOrderRelationResp xmlns:dsmp="http://www.monternet.com/dsmp/schemas/">
<MsgType>SyncOrderRelationResp</MsgType>
<Version><%=Version %></Version>
<hRet><%=hRet %></hRet>
</dsmp:SyncOrderRelationResp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

=====本文所有代码和内容,未经过作者允许,不得转载,保留所有权====================


作者Blog:http://blog.csdn.net/cutemouse/

posted on 2007-01-21 11:11  清风徐来,水波不兴  阅读(661)  评论(0编辑  收藏  举报

导航