MISC消息同步接口

2 篇文章 0 订阅

当用户手机编辑短信发送订购或者退订信息时,MISC会发送同步消息给我们的系统。下面就是处理的过程:

1、MISC 向 SP 发送订购关系同步请求 SyncOrderRelationReq:

<?xml version=\"1.0\" encoding=\"utf-8\"?><SOAP-ENV:Envelope 
  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"    
  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"    
  xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"    
  xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\">
<SOAP-ENV:Header>    
	<TransactionID xmlns=\"http://www.monternet.com/dsmp/schemas/\">00110318384464</TransactionID>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
	<SyncOrderRelationReq xmlns=\"http://www.monternet.com/dsmp/schemas/\">
		<Version>1.5.0</Version>
		<MsgType>SyncOrderRelationReq</MsgType><Send_Address><DeviceType>0</DeviceType>
		<DeviceID>0011</DeviceID></Send_Address><Dest_Address><DeviceType>400</DeviceType><DeviceID>0</DeviceID></Dest_Address><FeeUser_ID><UserIDType>1</UserIDType>
		<MSISDN>13985046628</MSISDN><PseudoCode></PseudoCode></FeeUser_ID>
		<DestUser_ID><UserIDType>1</UserIDType><MSISDN>13985046628</MSISDN>
		<PseudoCode></PseudoCode></DestUser_ID><LinkID>SP</LinkID><ActionID>1</ActionID>
		<ActionReasonID>1</ActionReasonID><SPID>924403</SPID><SPServiceID>业务代码</SPServiceID><AccessMode>3</AccessMode>
		<FeatureStr>MTA2NjIxNDQgREE=</FeatureStr>
	</SyncOrderRelationReq>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
2、接收MISC同步请求的Servlet(Servlet的地址一定要跟申请的受理地址对应起来):

/**
	 * 订购关系同步消息接口
	 * @throws IOException 
	 */
	@SuppressWarnings("static-access")
	public void SyncOrderRelationReq(HttpServletRequest request,HttpServletResponse response) throws IOException{
		String resultXml = "";
		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,存储到XMLDAT  
	    System.out.println("++++++++++++++++++++++++++++++++++++");
	    System.out.println("接收到的同步消息数据");
		System.out.println(XMLData);
		System.out.println("++++++++++++++++++++++++++++++++++++");
	    ProvisionBean p = null;
		if(XMLData == null || XMLData.length() < 10 ){
			resultStr = false;   
		}else{  
			p = new AnalysisXML().getXmlResultt(XMLData);
			if(p==null){
				resultStr = false; 
			}else{
			        处理同步消息
			}
		}  
		PrintWriter out = response.getWriter();   
		if(resultStr){
			//返回成功
			resultXml = new AnalysisXML().getResultXml(p.getTransactionID(), p.getVersion(), "0");   
		}else{
			//返回失败
			resultXml = new AnalysisXML().getResultXml(p.getTransactionID(), p.getVersion(), "1");
		}
		response.setContentType( "text/xml" ) ;
		out.print(resultXml);  
		out.flush();    
		out.close();  
	}
存放消息的实体类:

package com.bx.core.entity;

import java.io.Serializable;


/**
 * 订购同步消息bean
 * @author admin_Hzw
 *
 */
public class ProvisionBean  implements Serializable {
	private Long id;  //主键
	private String msisdnu; //计费用户标识
	private String MSISDN_D;  //使用用户标识

	private String TransactionID; //消息编号
	private String MsgType; //消息类型
	private String Version;//该接口消息的版本号,本次所有的接口消息的版本都为“1.5.0”
	//--------------------
	private String LinkID;  //临时订购关系的事务ID
	/*
	 * 服务状态管理动作代码,具体值如下:
		1: 开通服务;
		2: 停止服务;
		3: 激活服务;
		4: 暂停服务;
		5: 免费试用;
		8: 第三方确认 
	 */
	private String ActionID; 
	/*
	 * 产生服务状态管理动作原因的代码,具体值如下:
		1:用户发起行为
		2:系统发起行为
		3:扣费失败导致的服务取消
		4:其他
	 */ 
	private String ActionReasonID;
	private String SPID;  //SP的企业代码
	private String SPServiceID; //SP中该服务的服务代码
	private String FeatureStr; //服务订购参数在短信MO流程中,FeatureStr中传送的是AccessNo+短信内容。
	private String platUserId;//平台侧用户id
	private String createtime; //创建时间
	private String status;//状态0为订购成功,1为未成功
	private String Pno; //产品编号
	
	
	
	public String getMsisdnu() {
		return msisdnu;
	}
	public void setMsisdnu(String msisdnu) {
		this.msisdnu = msisdnu;
	}
	public String getMSISDN_D() {
		return MSISDN_D;
	}
	public void setMSISDN_D(String mSISDND) {
		MSISDN_D = mSISDND;
	}
	public String getTransactionID() {
		return TransactionID;
	}
	public void setTransactionID(String transactionID) {
		TransactionID = transactionID;
	}
	public String getMsgType() {
		return MsgType;
	}
	public void setMsgType(String msgType) {
		MsgType = msgType;
	}
	public String getVersion() {
		return Version;
	}
	public void setVersion(String version) {
		Version = version;
	}
	public String getLinkID() {
		return LinkID;
	}
	public void setLinkID(String linkID) {
		LinkID = linkID;
	}
	public String getActionID() {
		return ActionID;
	}
	public void setActionID(String actionID) {
		ActionID = actionID;
	}
	public String getActionReasonID() {
		return ActionReasonID;
	}
	public void setActionReasonID(String actionReasonID) {
		ActionReasonID = actionReasonID;
	}
	public String getSPID() {
		return SPID;
	}
	public void setSPID(String sPID) {
		SPID = sPID;
	}
	public String getSPServiceID() {
		return SPServiceID;
	}
	public void setSPServiceID(String sPServiceID) {
		SPServiceID = sPServiceID;
	}
	public String getFeatureStr() {
		return FeatureStr;
	}
	public void setFeatureStr(String featureStr) {
		FeatureStr = featureStr;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getPlatUserId() {
		return platUserId;
	}
	public void setPlatUserId(String platUserId) {
		this.platUserId = platUserId;
	}
	public String getCreatetime() {
		return createtime;
	}
	public void setCreatetime(String createtime) {
		this.createtime = createtime;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public String getPno() {
		return Pno;
	}
	public void setPno(String pno) {
		Pno = pno;
	}
	
}
  
处理同步消息的工具类:

package com.china.boxun.util;

import java.io.BufferedReader;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import org.jdom.Element;
import org.jdom.xpath.XPath;
import com.bx.core.entity.ProvisionBean;

public class AnalysisXML {
	/**
	 * 解析返回的XML信息
	 * @param XMLData 
	 */
	public static ProvisionBean getXmlResultt(String XMLData) {
		ProvisionBean p = new ProvisionBean();
		File f = null;  
		try{
			org.jdom.input.SAXBuilder sb=new org.jdom.input.SAXBuilder();
			org.jdom.Document doc=null;
			File ffFile = new File("C://temp");
			if(!ffFile.exists()){
				ffFile.mkdir();
			}
			f = new File("C://temp//temp"+System.currentTimeMillis()+new Random().nextInt(100000)+".xml");
			if(f.exists()){
				f.delete();  
			}   
			f.createNewFile();    
			RandomAccessFile ra = new RandomAccessFile(f,"rw");
			ra.writeBytes(XMLData);
			ra.close();   
			doc=sb.build(f);//读取PROVISION.XML文件,SB和DOC的使用方法不是很明白;
			//以下是读取PROVISION.XML的信息,解释XML文件的各部分定义,和读取数值到变量里。
			org.jdom.Element root=doc.getRootElement();

			//读取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")){
						p.setTransactionID(e.getTextNormalize());
					}
				}
			}
			//读取body信息;
			Element SyncOrderRelationReq = null ;
			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("FeeUser_ID")){
							ns = e.getChildren();
							for(Iterator j=ns.iterator();j.hasNext();){
								Object k=j.next();
								if(k instanceof Element){
									Element eU=(Element)k;  
									if(eU.getName().equals("MSISDN")){
										p.setMsisdnu(eU.getText());
									}
								}     
							}
						}
						if(e.getName().equals("DestUser_ID")){
							ns = e.getChildren();
							for(Iterator j=ns.iterator();j.hasNext();){
								Object k=j.next();
								if(k instanceof Element){
									Element eU=(Element)k;  
									if(eU.getName().equals("MSISDN")){
										p.setMSISDN_D(eU.getText());
									}
								}    
							}
						}
						//------------------------------------
						if(e.getName().equals("Version")){
							p.setVersion(e.getTextNormalize());
						}
						if(e.getName().equals("MsgType")){
							p.setMsgType(e.getTextNormalize());
						}
						if(e.getName().equals("LinkID")){
							p.setLinkID(e.getTextNormalize());
						}
						if(e.getName().equals("ActionID")){
							p.setActionID(e.getTextNormalize());
						}
						if(e.getName().equals("ActionReasonID")){
							p.setActionReasonID(e.getTextNormalize());
						}
						if(e.getName().equals("SPID")){
							p.setSPID(e.getTextNormalize());
						}
						if(e.getName().equals("SPServiceID")){
							p.setSPServiceID(e.getTextNormalize());
						}
						if(e.getName().equals("FeatureStr")){
							p.setFeatureStr(e.getTextNormalize());
						}
					}
				}
			}

		}catch(Exception e){
			e.printStackTrace();
			System.out.println("同步MISC请求,解析出错!");
		}finally{
			if(f!=null){
				f.delete();
			}
		}
		return p;
	}


	/**
	 * 模拟获得请求的XML
	 * @return
	 */
	public static String getXml(){
		return "<?xml version=\"1.0\" encoding=\"utf-8\"?><SOAP-ENV:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"    xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"    xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\"><SOAP-ENV:Header>    <TransactionID xmlns=\"http://www.monternet.com/dsmp/schemas/\">00110318384464</TransactionID></SOAP-ENV:Header><SOAP-ENV:Body><SyncOrderRelationReq xmlns=\"http://www.monternet.com/dsmp/schemas/\"><Version>1.5.0</Version>"+
		"<MsgType>SyncOrderRelationReq</MsgType><Send_Address><DeviceType>0</DeviceType>"+
		"<DeviceID>0011</DeviceID></Send_Address><Dest_Address><DeviceType>400</DeviceType><DeviceID>0</DeviceID></Dest_Address><FeeUser_ID><UserIDType>1</UserIDType>"+
		"<MSISDN>13985046628</MSISDN><PseudoCode></PseudoCode></FeeUser_ID>"+
		"<DestUser_ID><UserIDType>1</UserIDType><MSISDN>13985046628</MSISDN>"+
		"<PseudoCode></PseudoCode></DestUser_ID><LinkID>SP</LinkID><ActionID>1</ActionID>"+
		"<ActionReasonID>1</ActionReasonID><SPID>924403</SPID><SPServiceID>业务代码</SPServiceID><AccessMode>3</AccessMode>"+
		"<FeatureStr>MTA2NjIxNDQgREE=</FeatureStr></SyncOrderRelationReq>"+
		"</SOAP-ENV:Body></SOAP-ENV:Envelope>";
	}

	

	/**
	 * 响应XML
	 * @param TransactionID 消息编号
	 * @param Version 版本号
	 * @param hRet 0 为成功,1为失败
	 * @return
	 */
	public static String getResultXml(String TransactionID,String Version,String hRet){
		return "<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>";
	}

}
模拟测试:

package com.china.boxun.hzw;


import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;

import com.china.boxun.util.AnalysisXML;


public class Test {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		String r = AnalysisXML.getXml();
		String path ="http://localhost:8080/axis/services/bxserver";
		java.net.URL url = new java.net.URL(path);  
		// 打开连接
        HttpURLConnection connection = (HttpURLConnection) url
                .openConnection();
        // 设置是否向connection输出,因为这个是post请求,参数要放在
        // http正文内,因此需要设为true
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod("POST");
        // Post 请求不能使用缓存
        connection.setUseCaches(false);
        connection.setInstanceFollowRedirects(true);
        connection.setRequestProperty("Content-Type",
                "text/xml");
		connection.connect(); 
		DataOutputStream out = new DataOutputStream(connection
                .getOutputStream());
        
        out.writeBytes(r); 
        out.flush();  
        out.close();
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String line;
        System.out.println("=============================");
        System.out.println("Contents of post request");
        System.out.println("=============================");
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        System.out.println("=============================");
        System.out.println("Contents of post request ends");
        System.out.println("=============================");
        reader.close();
        connection.disconnect();
	}
	  
	

}







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUG胡汉三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值