分享
 
 
 

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>

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有