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

王朝other·作者佚名  2006-04-22
窄屏简体版  字體: |||超大  

实例代码: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>

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航