SP 短信开发-PROVISION接口实现-反向取消实例代码

原创 2006年06月19日 09:37:00
反向取消接口规范-流程说明
 
1)SP代替用户,向MISC发起反向取消请求UnSubscribeServiceReq
并等待MISC处理
2)MISC对消息中的来源地址、企业代码进行鉴权,判断是否允许
该SP进行反向取消
3)接入鉴权成功后,再进行用户鉴权和订购关系鉴权,判断用户状
态是否正确以及是否存在订购关系
4)上面鉴权成功后,MISC向SP发送订购关系同步请求包
SyncOrderRelationReq
5)SP收到同步请求后,对订购请求做相应的取消处理,并返
回订购关系同步应答SyncOrderRelationResp
6)MISC收到应答后,判断应答值是否为0。如果应答值为0,则在
MISC中取消订购关系,并给SP返回成功的反向取消处理应答包
UnSubscribeServiceResp;如果应答值不为0,则不取消订购关系,同
时给SP返回不成功的反向取消应答包UnSubscribeServiceResp
7)SP如果收到MISC的错误响应,则说明取消失败,SP必须对这个失
败消息做相应处理,比如把已取消的订购关系恢复等等。
8)如果收到MISC的正确响应,则SP可以不做任何处理
 
11、反向取消接口消息定义
         功能描述
       此接口用于用户通过SP取消已订购的数据业务的时候,SP先通过该接口向MISC进行用户取消服务订购的请求。MISC进行取消服务订购成功后,SP才取消用户对应的业务订购关系。
消息名
消息类型
消息方向
UnSubscribeServiceReq
Request
SPàMISC
UnSubscribeServiceResp
Response
MISCàSP
 
         接口内容描述
       UnSubscribeServiceReq消息字段描述
字段名
重要性
类型
说明
MsgType
必须
string
消息类型
TransactionID
必须
string
该消息编号(不能超过16位)
Version
必须
string
该接口消息的版本号,本次所有的接口消息
的版本都为“1.5.0”
Send_Address
必须
address_info_schema
发送方的地址
Dest_Address
必须
address_info_schema
接收方的地址
FeeUser_ID
必须
user_id_schema
计费用户标识
DestUser_ID
必须
user_id_schema
使用用户标识
当使用用户和计费用户为同一用户的时候,
FeeUser_ID和DestUser_ID的值相同。
Service_ID
必须
service_id_schema
服务标识
 
UnSubscribeServiceResp消息字段描述:
 
字段名
重要性
类型
说明
MsgType
必须
string
消息类型
TransactionID
必须
string
该消息编号
Version
必须
string
该接口消息的版本号,本次所有的接口消
息的版本都为“1.5.0”
hRet
必须
integer
返回值。具体定义请参见《MISC系
统短信SP接入指南-接口改造分册》
 
反向取消实例代码。
以下代码保留所有权。请不要转载。
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<%@ page language="java" contentType="text/html; charset=gb2312" import="java.sql.*"  %>
<%@ include file="../Cos/cos.jsp" %>
<%@ include file="fun.jsp" %>
<%@ page import="java.util.*"%>
<%@ page import="java.net.*"%>
<%@ page import="java.io.*"%>
<%@ page import="com.AAA.appk.*"%>
<%!
private String SendReq(String TransactionID,String sp_id,String dest_mobile,
String fee_mobile,String service,String spnumber,String send_DeviceID,StringBuffer bf){
  String sReturn="success";
  try
  {
  //http://dsmp.gd.monternet.com/dsmp/dsmp.wsdl
     // ???p://211.136.253.116/dsmp/dsmp.wsdl
  
   String sURL = "http://211.136.253.116/dsmp/dsmp.wsdl";
   sURL=sURL.trim();
   URL Url = new URL(sURL);
   HttpURLConnection connection = (HttpURLConnection) Url.openConnection();//建立连接
   connection.setRequestMethod("POST");
   connection.setDoInput(true);
   connection.setDoOutput(true);
   connection.setUseCaches (false);
   connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
   PrintWriter out = new PrintWriter(connection.getOutputStream());//准备输出数据。
   //反向取消XML UnSubscribeServiceReq包数据写入STRINGBUFFER中。
   StringBuffer xmlStr=new StringBuffer("<?xml version=/"1.0/" encoding=/"utf-8/" ?>");
   xmlStr.append("<SOAP-ENV:Envelope");
   xmlStr.append(" xmlns:SOAP-ENV=/"http://schemas.xmlsoap.org/soap/envelope//"");
   xmlStr.append(" xmlns:SOAP-ENC=/"http://schemas.xmlsoap.org/soap/encoding//"");
   xmlStr.append(" xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/"");
   xmlStr.append(" xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/"");
   xmlStr.append("SOAP-ENV:encodingStyle=/"http://schemas.xmlsoap.org/soap/encoding//"");
   xmlStr.append(" xmlns=/"http://www.monternet.com/dsmp/schemas//">");
   xmlStr.append("<SOAP-ENV:Header>");
   xmlStr.append("<TransactionID xmlns=/"http://www.monternet.com/dsmp/schemas//" xsi:type=/"xsd:string/">0011"+dest_mobile+"</TransactionID>");
   xmlStr.append("</SOAP-ENV:Header>");
   xmlStr.append("<SOAP-ENV:Body>");
   xmlStr.append("<UnSubscribeServiceReq xmlns=/"http://www.monternet.com/dsmp/schemas//">");
   xmlStr.append("<Version>1.5.0</Version>");
   xmlStr.append("<MsgType>UnSubscribeServiceReq</MsgType>");
   xmlStr.append("<Send_Address>");
   xmlStr.append("<DeviceType>400</DeviceType>");
   xmlStr.append("<DeviceID>"+sp_id+"</DeviceID>");
   xmlStr.append("</Send_Address>");
   xmlStr.append("<Dest_Address>");
   xmlStr.append("<DeviceType>0</DeviceType>");
   xmlStr.append("<DeviceID>0011</DeviceID>");
   xmlStr.append("</Dest_Address>");
   xmlStr.append("<FeeUser_ID>");
   xmlStr.append("<UserIDType>1</UserIDType>");
   xmlStr.append("<MSISDN>"+fee_mobile+"</MSISDN>");
   xmlStr.append("<PseudoCode />");
   xmlStr.append("</FeeUser_ID>");
   xmlStr.append("<DestUser_ID>");
   xmlStr.append("<UserIDType>1</UserIDType>");
   xmlStr.append("<MSISDN>"+dest_mobile+"</MSISDN>");
   xmlStr.append("<PseudoCode />");
   xmlStr.append("</DestUser_ID>");
   xmlStr.append("<Service_ID>");
   xmlStr.append("<ServiceIDType>1</ServiceIDType>");
   xmlStr.append("<SPID>"+sp_id+"</SPID>");
   xmlStr.append("<SPServiceID>"+service+"</SPServiceID>");
   xmlStr.append("<AccessNo />");
   xmlStr.append("<FeatureStr />");
   xmlStr.append("</Service_ID>");
   xmlStr.append("</UnSubscribeServiceReq>");
   xmlStr.append("</SOAP-ENV:Body>");
   xmlStr.append("</SOAP-ENV:Envelope>"); 
   //向MISC输出数据
   out.println(xmlStr.toString());
   //把输出数据保存到BF里,
   bf.append("start");
   bf.append(xmlStr.toString());
   bf.append("end");
   out.close();
   //读取连接返回的数据。UnSubscribeServiceResp?SyncOrderRelationReq?SyncOrderRelationResp?
   BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
   String line;
   while ((line = in.readLine()) != null) {
    bf.append("rstart");
    bf.append(line);
    bf.append("rend");
   }
   in.close();
  }
  catch (MalformedURLException e)
  {
   sReturn="fail";
   bf.append("wap Connect SP Error1:"+e.toString());
  }
  catch (IOException e)
  {
   sReturn="fail";        
   bf.append("wap Connect SP Error2:"+e.toString());
  }
  return sReturn;
 }

%>
<%
String phoneno=getString(request.getParameter("phoneno"));
int app=getInt(request.getParameter("app"));
if(phoneno==null)phoneno="";
String ServiceID="";
if(app==2){
 ServiceID="-OTYX";
}else if(app==1){
 ServiceID="-OLBY";
 }else if(app==3){
 ServiceID="-OTYX";
}else if(app==6){
    ServiceID="-OTYX";
}
String res=null;
String command=getString(request.getParameter("command"));
if(command!=null&&command.equals("send")&&phoneno!=null&&phoneno.length()>0){
    String TransactionID=System.currentTimeMillis()+"";
    String send_DeviceID="10666666";
    String FeeUser_ID=phoneno;
    String DestUser_ID=phoneno;
    String SPServiceID=ServiceID;
    String sp_code="456789";
          TransactionID=sp_code+TransactionID.substring(sp_code.length()-(15-TransactionID.length()),TransactionID.length());
    StringBuffer sb=new StringBuffer("");
    String restr=SendReq(TransactionID,sp_code,DestUser_ID,FeeUser_ID,SPServiceID,send_DeviceID,send_DeviceID,sb);
    res=restr;
    //out.println("res:"+restr+"   full:"+sb.toString());//可以读取,发送UnSubscribeServiceReq数据后,MISC返回的数据,
}
Collection apps=null;
if(phoneno.length()>0){
apps=BizUtil.list("select * from UserReg u,accuser a where u.id=a.id and a.phonenum='"+phoneno+"'");
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" _fcksavedurl=""style.css"" _fcksavedurl=""style.css"" rel="stylesheet" type="text/css">
<title>Untitled Document</title>
</head>
<script language="JavaScript" type="text/JavaScript">
<!--
function send(id) { //v3.0
  formI.command.value="send";
  formI.app.value=id;
  formI.submit();
}
//-->
</script>
<body>
<tabIe width="100%">
  <tr>
    <td ><table width="100%" >
 <form name="form1" method="post" action="cancel.jsp">
      <tr>
        <td colspan="5" bgcolor="#FFFFCC">
    <p>o?㞉   <input type="text" name="phoneno" value="<%=phoneno%>">
      <input type="submit" name="Submit2"  value="2?">
            <input name="command" type="hidden" id="command"> 
            <input name="app" type="hidden" id="app">       
    </td>
   
      </tr>
   <%if(apps!=null&&apps.size()>0){%>
         <tr>
        <td height="22" bgcolor="#00CCCC" ><strong>
         ???3?/strong></td>
   
        <td bgcolor="#00CCCC" ><strong>????strong></td>
        <td bgcolor="#00CCCC" ><strong>?2?¨·</strong></td>
        <td bgcolor="#00CCCC" ><strong>????¨·</strong></td>
        <td bgcolor="#00CCCC" ><strong>??</strong></td>
          </tr>
   <%for (Iterator i=apps.iterator();i.hasNext();) {
    HashMap r=(HashMap)i.next();
  int proid=getInt(r.get("proid"));
  String name="";
  String code="";
  int flag=getInt(r.get("flag"));
  if(proid==1){
   name="8¨©???;
   code="-LBY";
  }else if(proid==2){
   name="???¡�
   code="-jYX";
  }else if(proid==3){
   name="???¦̥¢;
   code="-lYX";
  }else if(proid==6){
                     name="??¡὿";
                     code="-llYX";
                }
  int prevnum=getInt(r.get("prevnum"));
  String registertime=getString(r.get("regtime"));
  String unregtime=getString(r.get("unregtime"));
  %>
 
          <tr>
        <td >
         <% = name %>
    </td>
   
        <td ><% = code %></td>
        <td ><% = regtime; %></td>
        <td ><% = unregtime %></td>
        <td ><% =(flag=I?"<a href='#' onclick='send("+proid+");'>?¡§??</a>":"????") %></td>
          </tr>
<%}%>
   <%}%>
   </form>
    </tabIe></td>
  </tr>
</tabIe>
</body>
</html>

关于认证,基本认证和摘要认证(翻译tr069 3.4.4 和3.4.5)

3.4.4  认证     如果CPE没有用TLS认证,ACS必须用HTTP来认证CPE。如果TLS用来加密,ACS应该用基本认证。如果TLS没有用来做加密,ACS必须使用摘要认证。   CPE必须支...
  • xiaopang_yan
  • xiaopang_yan
  • 2017年01月12日 11:53
  • 241

ldap服务器搭建——python认证接口

1、支持用户名、邮箱、用户ID三种认证方式 2、代码如下:import ldap import re LDAP_PATH = "ldap://localhost:389" LDAP_BASE_DN...
  • LClansefengbao
  • LClansefengbao
  • 2015年12月22日 18:05
  • 1702

使用nginx搭建前端项目web服务器以及利用反向代理调试远程后台接口

今天给大家介绍的是在前后端分离的趋势下,前端同学们利用nginx来开发和调试自己的前端项目。 换做以前,大家正常的前端调试流程可能是这样的。 1、首先搭建好后台的语言环境 2、把后台代码拉到本机 3、...
  • cjd6568358
  • cjd6568358
  • 2016年07月10日 14:00
  • 8931

OAuth2.0 用户验证接口分析理解

这是一篇针对用户验证的接口说明!
  • u013990690
  • u013990690
  • 2016年04月06日 09:48
  • 3684

关于实名认证的方案(附代码)

什么是实名认证? 最早的实名认证就是2001年随着公安部批复成立“全国公民身份证号码查询服务中心”,国家政策上对外开放了全国公民身份证查询业务。该数据逐渐开放给了政府部门,银行和运营商以用于互联网实...
  • APIX_CN
  • APIX_CN
  • 2015年11月12日 16:25
  • 7246

常见认证方式

/转自 http://www.cnblogs.com/Irving/p/4964489.html 作者:花儿笑弯了腰 常用认证方式 在之前的文章REST API 安全设计指南与使用 ...
  • jansony1
  • jansony1
  • 2016年09月04日 09:51
  • 2210

前端接口调试 -- 通过Nginx反向代理机制解决跨域问题

安装配置 安装 git 安装node 安装 anywhere node 插件包$ npm install anywhere -g //全局安装anywhere 安装nginx 解压n...
  • github_36618205
  • github_36618205
  • 2016年12月09日 15:45
  • 3604

OAuth的机制原理讲解及开发流程

原文地址:http://kb.cnblogs.com/page/189153/本想前段时间就把自己通过QQ OAuth1.0、OAuth2.0协议进行验证而实现QQ登录的心得及Demo实例分享给大家,...
  • AloneSword
  • AloneSword
  • 2013年09月30日 11:33
  • 55381

企业号认证接口

认证接口文档地址:http://qydev.weixin.qq.com/wiki/index.php?title=OAuth验证接口 认证接口下面有3个接口:身份验证、成员登录授权、单点登录授权 ...
  • bobo789456123
  • bobo789456123
  • 2017年02月04日 12:18
  • 370

HttpClient实现反向代理功能

本文利用HttpClient实现简单的反向代理功能,对于其中的细节部分,还需要进行仔细地斟酌实现才能适用到生产环境中。HttpClient通过策略模式提供CloseableHttpClient实例的定...
  • jiangjiajian2008
  • jiangjiajian2008
  • 2017年01月24日 01:56
  • 2075
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SP 短信开发-PROVISION接口实现-反向取消实例代码
举报原因:
原因补充:

(最多只允许输入30个字)