zoukankan      html  css  js  c++  java
  • 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>

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


  • 相关阅读:
    函数语法:Js之on和addEventListener的使用与不同
    练习:javascript弹出框及地址选择功能,可拖拽
    jQuery.extend 函数使用
    计算输入时间如“ 2018-12-12” 的 00:00:00距离现在的时间间隔
    JS获取当前时间戳的方法
    常规正则表达式练习
    登录表单验证简单实现
    简单计算器
    MySQL 单表查询
    C++读写文件
  • 原文地址:https://www.cnblogs.com/bobox/p/625989.html
Copyright © 2011-2022 走看看