中国移动彩信开发

 
 
 
 
 
 
 
 
中国移动 MM7 API 用户手册
 
 
 
版本 V1.5.3
           
 
 
 
 
 
 
 
 
 
 
 
中国移动集团公司
 
 
 
 
 

 
修改记录
文件编号
版本号
拟制人/
修改人
拟制/修改日期
更改理由
主要更改内容
(写要点即可)
 
V1.1
胡冬梅
2004.03.22
修改、整理
 
 
V1.2
胡冬梅
2004.04.14
增加内容
增加安装说明
 
V1.3
胡冬梅
2004.4.21
增加内容
增加状态码等说明
 
    V1.5.1
胡冬梅
2004.5.12
增加内容
增加获取API版本信息、API返回码说明等
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1.概述
该文档说明了SP如何使用中国移动集团公司的MM7 API程序与彩信中心进行对接,实现MM7接口的通讯,开发增值业务应用。
该MM7 API是使用纯Java开发的,使用的JDK的版本为JDK1.4.0。所以使用该API进行开发时,要求使用的JDK版本必须是JDK1.4.0以上版本。该API所使用的通讯承载协议是HTTP/1.1。
 
缩略词:
 MM :    Multimedia Message (多媒体消息)
  MMS    Multimedia Message Service(多媒体消息服务)
  MMSC Multimedia Message Service Center(多媒体消息服务中心)
  VAS :    Value Added Service(增值业务)
  SP :      Service Provider(业务提供商)
  HTTP :   Hypertext Transfer Protocol(超文本传输协议)
2.概念
2.1企业代码
企业代码是企业身份的标识,网络中地址翻译、计费、结算等均以企业代码为依据。企业代码的数据需要在MMSC和BOSS系统中进行配置。企业代码以数字表示,共6位,从“8XY000”至“8XY999”,其中“XY”为各移动分公司代码。
彩信全网业务的SP企业代码为8XY001-8XY999。(目前短信全网业务的企业代码为9XY001-9XY500,WAP全网业务的企业代码为9XY501-9XY999。)彩信地方业务的SP企业代码由各地方移动公司按照业务许可的顺序依次分配制定,“XY”具体分配情况见相关表格。
2.2服务代码
服务代码是:用户使用彩信的发送、上传等上行类业务时,需要输入的接收方号码;或SP在根据用户的点播请求在向用户发送、下载等下行类业务时,用户终端中显示的发送方的号码。服务代码的数据需要在MMSC上进行配置,用于路由的查找和状态报告的返回。服务代码以数字表示。
全国业务的服务代码长度统一为4位,即“1000”-“9999”;本地业务服务代码长度统一为5位,即“01000”-“09999”。
以下号码或号段暂不分配:
13XX (XX=00-99)、20XX(XX=01-99)、168X(X=0-9)、186X(X=0-9)、1258/1259、172X(X=0-9)、6XXX、7XXX。
上述代码的分配和使用情况均可以在www.monternet.com上查询。
如果SP已经开展了短信等业务,原则上彩信的服务代码依照SP原有的服务代码进行分配,以保证用户的使用习惯。
目前全网业务的服务代码,由集团公司统一分配。
2.3业务代码
业务代码表示业务类别,并且区分不同业务的信息服务费。业务代码的数据需要在MMSC和BOSS系统中进行配置。业务代码用数字表示,并且不能使用000。
为便于进行业务统计和分析,业务代码尽量按照不同的业务分类如下:
互联网点播类: 以1开头
     WAP点播类:    以2开头
短信点播类: 以3开头
      STK点播类:  以4开头
彩信点播类: 以0开头
业务代码在遵循原则的前提下其余内容由SP自己制定。
2.3.1上行业务的业务代码规范
上行业务的业务代码为三位,其构成如下:
第1位:0、7、9开头的业务代码保留,其他代码由彩信SP自行编排。
第2~3位:由彩信SP自行编排
       特例:如果用户直接给四位服务代码发送上行彩信,系统会默认加上业务代码“0”,该业务代码默认开通,仅用于上行彩信到服务代码。
2.3.2行业务的业务代码规范
下行业务的业务代码为六位,其构成如下:
第1位:功能标识位,目前有如下两种选择:
l         1,代表一般下行业务
l         7,代表用于“先机时代”项目中手机内置并参与渠道分成的业务
l         6,代表用于集团客户应用的业务(免费)
其他数字目前保留。
第2位:彩信业务一级分类,具体如下面表格:
第3位:彩信业务二级分类,具体如下面表格:
一级分类及标识代码
二级分类及标识代码
新闻天气( 1
天气预报(1)
 
热点快讯(2)
 
社会新闻(3)
 
体育新闻(4)
 
娱乐新闻(5)
 
财经新闻(6)
 
综合新闻(0)
游戏娱乐( 2
聊天交友(1)
 
笑话幽默(2)
 
彩信游戏(3)
 
影音视线(4)
 
互动有奖(5)
 
五花八门(0)
时尚生活( 3
时尚有约(1)
 
车迷世界(2)
 
文化教育(3)
 
情感画廊(4)
 
爱情家庭(5)
 
两性健康(6)
 
证券财经(7)
 
位置服务(8)
 
五花八门(0)
卡通动漫( 4
欧美(1)
 
日本(2)
 
韩国(3)
 
港台(4)
 
本地原创(5)
 
五花八门(0)
彩信铃声( 5
明星专辑(1)
 
精品影视(2)
 
流行音乐(3)
 
古典音乐(4)
 
卡拉OK(5)
 
特殊音效(6)
 
五花八门(0)
彩图动画( 6
人物剪影(1)
 
动物一族(2)
 
美丽心情(3)
 
温馨祝福(4)
 
电影名画(5)
 
体育纵横(6)
 
大千世界(7)
 
3D动画(8)
 
五花八门(0)
彩信 DIY 7
贺卡类(1)
 
形象类(2)
 
文字类(3)
 
五花八门(0)
特色用途( 0
免费客服(1)
 
优惠套餐(2)
 
第4位:业务模式位,各个模式及其数字标识如下:
l         1:按条点播
l         2:按条定制
l         3:包月定制
l         4:包月点播
第5~6位:由彩信SP自行编排
2.4操作指令码
操作指令码是指用户通过短信点播或定制彩信业务时,在短信的信息体内输入的代码,或用户上行发送彩信时,在彩信消息体内的文本信息中输入的代码。操作指令码用于标识对彩信的处理方式。此代码出现在短信或彩信的消息体内,由SP自行处理,彩信中心不负责处理该代码。
在短信中输入的操作指令码应严格区分用户是点播、定制短信业务还是彩信业务。如果用户通过短信点播或定制彩信业务,操作指令码应以CX开头。
如:用户在短信或彩信文本信息体内输入“CX XW”发送至8888,就是定制新浪提供的彩信图片新闻业务。
2.5下行业务
由SP主动发起的业务。这里主要指SP向MMSC发起的业务。
2.6上行业务
SP被动接收的业务。这里主要指从MMSC那里接收业务。
2.7递送报告
报告是接收方(终端)对接收到消息的处理方式信息。递送报告指MMSC 在获取这个报告后把这个信息发送给发送方(SP )。接收方对消息的处理可能是接收或者拒绝等。处理流程如下:
l         SP 发送消息(通过MMSC )给终端,并且要求递送报告;
l         终端接收到消息后做相应处理(接收或拒绝);
l         MMSC 把终端对消息的处理信息(递送报告)发送给SP 。
3.安装方法
    这里主要介绍一下如何将MM7 API 运用到VASP 自己开发的程序中以及在配置文件中需要注意修改的地方。
3.1 MM7 API的使用
在VASP 用Java 开发自己程序时,只要将中国移动集团公司提供的mm7api.jar 和lib 下的所有的Jar 文件加入到classpath 中即可。
3.2配置文件的设置
    配置文件mm7Config.xml 需要根据SP 情况进行修改。
 
<?xml version="1.0"?>
<vasp:MM7Config xmlns:vasp="http://mms.chinamobile.com/mm7ConfigSchema">
       <AuthenticationMode>1</AuthenticationMode>
       <UserName>zxme</UserName>
       <Password>zxme</Password>
       <MaxMessageSize>100000000</MaxMessageSize>
       <LogPath>c:/vas_log</LogPath>
       <logLevel>1</logLevel>
       <LogNum>100</LogNum>
       <LogInterval>120</LogInterval>
       <LogSize>200</LogSize>
       <Charset>UTF-8</Charset>
       <MmscID>1</MmscID>
       <mmscURL> /mm7</mmscURL>
       <mmscIP>192.120.231.180</mmscIP>     
       <UseSSL>true</UseSSL>
       <ListenIP>192.120.231.228</ListenIP>
       <ListenPort>80</ListenPort>
       <BackLog>50</BackLog>
       <TimeOut>10000</TimeOut>
       <ReSendCount>5</ReSendCount>      
</vasp:MM7Config>
 
一些地方需要进行修改,下面一一说明:
<AuthenticationMode>1</AuthenticationMode>
表示VASP 作为服务端接收消息时是否进行鉴权或进行什么样的鉴权,0 表示不鉴权,1 表示进行基本鉴权,2 表示进行摘要鉴权。
<UserName>zxme</UserName>
<Password>zxme</Password>
表示彩信中心对VASP 进行鉴权时的用户名和密码,同时也是VASP 对接入的彩信中心进行鉴权时用户名和密码,是双向的,要VASP 和MMSC 双方进行约定。
<LogPath>c:/vas_log</LogPath>
表示日志存放的路径,在Windows 操作系统下和Linux 下是不一样的,要注意进行修改。
<MmscID>1</MmscID>
表示MMSC 网关的序号,需要从MMSC 处得到。
<mmscURL> /mm7</mmscURL>
<mmscIP>192.120.231.180</mmscIP>     
分别表示MMSC 网关的URL 地址和IP (或主机名),也需要MMSC 处得到。这里也可以填成ip:port 。例如:192.120.231.180:8080, 不填端口号使用默认端口号80 。
<ListenIP>192.120.231.228</ListenIP>
<ListenPort>80</ListenPort>
表示当VASP 用应用程序方式进行接收消息时的监听地址和端口号。
以上为这个配置文件中主要需要注意修改的地方,当然其他的内容也可以进行修改,如<logLevel>1</logLevel> 可以根据需要进行修改,0 表示不产生日志;1 表示 产生错误日志 ; 3 表示产生信息日志 ; 6 表示产生完整信息日志。
 
<TimeOut>90000</TimeOut>
表示设置发送的超时时间,若发送超过这个时间,则自动进行重新发送。
<ReSendCount>2</ReSendCount>
表示设置重发的次数,建议在3 次以下,一般用2 次即可。
4.开发方法
这里主要介绍从SP接收MMSC发过来的DeliverReq开始,到SP发送SubmitReq到MMSC的整个流程,SP所需要做的工作。
4.1 VASP接收传送请求(上行业务)
VASP接收可以有两种方式:
l         如果SP的增值应用是一个普通应用程序,可以使用方式1,即接收代理会自动打开一个监听端口,启动一个监听线程来接收来自MMSC的多媒体消息;
l         如果SP的增值应用是一个Web应用,则可以使用方式2,即接收代理作为一个Servlet运行,并自动处理从HttpRequest中搜索数据,并解码成多媒体消息。
 
4.1.1 方式1:普通应用程序中的用法
 
public class MyReceiver extends MM7Receiver
{
    //定义一个MM7DeliverReq,以便得到 MMSC发过来的Deliver消息。( 必备
    public static MM7DeliverReq deliverReq = new MM7DeliverReq();
    //Main方法
       public static void main(String[] args)
       {
//初始化VASP
MM7Config mm7Config = new MM7Config(“./config/mm7Config.xml”);
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“./config/ConnConfig.xml”);  // 必备
//构造MyReceiver
MyReciever receiver = new MyReceiver();
myReceiver.setConfig(mm7Config);    // 必备
//创建MM7消息发送接口
MM7Sender mm7Sender = new MM7Sender(mm7Config);
//启动接收器
receiver.start();
for(;;);
       }
       public MM7VASPRes doDeliver(MM7DeliverReq request)
       {
        /*接收从 MMSC发过来的传送消息,以便取出其中的部分值构造提交消息或得到一些有用
信息,如MMSC的标识符等 */
        deliverReq = request;
        System.out.println(“收到手机 ”+request.getSender()
+“提交的消息,标题为: ”+request.getSubject());
        System.out.println("MMSC的标识符为:"+request. GetMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliverRes消息,设置ServiceCode或StatusCode
MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
mm7DeliverRes.setServiceCode("服务代码"); //设置ServiceCode,可选
mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求完成状
态, 必备,以便表明SP已经接收到传送消息。一般设 1000。*/
        mm7DeliverRes.setStatusText("所用状态文本说明 "); /*设置所用状态的文本说明,
应限定请求状态,可选 */
        //返回给 MM7 API,以便API将MM7DeliverRes返回给MMSC。
return(MM7VASPRes)mm7DeliverRes;
    }
}
4.1.2 方式2:Web应用程序中的用法
 
public class MyReceiver extends MM7RecieveServlet
{
    public MM7VASPRes doDeliver(MM7DeliverReq request)
    {
        System.out.println(“收到手机 ”+request.getSender()
+“提交的消息,标题为: ”+request.getSubject());
System.out.println("MMSC的标识符为:"+request. GetMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliverRes消息,设置ServiceCode或StatusCode
MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
mm7DeliverRes.setServiceCode("服务代码"); //设置ServiceCode,可选
mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求完成状
态, 必备,以便表明SP已经接收到传送消息。一般设 1000。*/
        mm7DeliverRes.setStatusText("所用状态文本说明 "); /*设置所用状态的文本说明,
应限定请求状态,可选 */
//返回给 MM7 API,以便API将MM7DeliverRes返回给MMSC。
return(MM7VASPRes)mm7DeliverRes;
    }
}
4.2发送多媒体消息的过程(下行业务)
发送多媒体消息的过程就是使用MM7 API组织消息,并通过MM7Sender发送给MMSC的过程。主要步骤如下:
4.2.1准备
1. 初始化VASP
初始化VASP使用的是MM7Config类,该类定义了有关本 VASP和对应的MMSC的配置信息。系统在初始化时,必须对该对象进行定义,它将用于通信类的控制。
MM7Config mm7Config = new MM7Config("./config/mm7Config.xml ");
其中mm7Config.xml为配置文件,其格式如下:
<?xml version="1.0"?>
<vasp:MM7Config xmlns:vasp="http://mms.chinamobile.com/mm7ConfigSchema">
<!--鉴权方式, 1为基本鉴权,2为摘要鉴权,0为不使用鉴权-->
    <AuthenticationMode>0</AuthenticationMode>
<!--设置用户名 , 必须为被授权的用户(4位)-->
    <UserName>1111</UserName>
<!--设置VASP的密码(6位) -->
    <Password>11111111</Password>
    <!—设置允许的最大消息的大小(以字节为单位),目前最大支持 128K-->
    <MaxMessageSize>100000</MaxMessageSize>
    <!--设置日志路径 -->
    <LogPath>c:/vas_log</LogPath>
    <!--设置日志级别,8 个级别(0)No log(1)Severe, (2)Warning, (3)Info, (4)Config, (5)Fine, (6)Finer, (7)Finest-->
    <logLevel>1</logLevel>
    <!--设置指定用于对消息编码的字符集(缺省值为UTF-8) -->
    <Charset>UTF-8</Charset>
    <!--MMSC网关的URL地址 -->
    <mmscURL>/mm7</mmscURL>
    <!-- MMSC网关的IP或主机名列表-->
    <mmscIP>202.202.202.202</mmscIP>
<!—MMSC网关的序号 à
<MmscID>910010</MmscID>
    <!--是否启用SSL加密,false:不加密,true:SSL加密 -->
<UseSSL>true</UseSSL>
<!--应用程序方式的监听 IP地址 -->
    <ListenIP>102.102.102.102</ListenIP>
    <!--应用程序方式的监听端口-->
    <ListenPort>80</ListenPort>
    <!--日志文件的最大产生数量,单位为个,缺省值为 100,取值范围为:1至9999。-->
    <LogNum>100</LogNum>
<!--日志记录的产生时间间隔,单位为分,缺省值为 60,取值范围为:1至1440-->
    <LogInterval>10</LogInterval>
<!--日志文件大小的最大限制,单位为 K,缺省值为500K,最大值为10000K。-->
    <LogSize>1000</LogSize>
</vasp:MM7Config>
 
 
2. 创建MM7 消息发送接口:
创建发送接口使用的是MM7Sender类,其中已经封装了和MMSC连接的通讯机制,使用时只要创建它的一个带MM7Config参数的实例即可。
MM7Sender mm7Sender = new MM7Sender(mm7Config);
4.2.2创建待发送消息
创建待发送消息使用的类均是由MM7Message继承得到的。主要有MM7SubmitReq、MM7CancelReq、MM7ReplaceReq等类,具体设置方法将分别进行介绍。
4.2.2.1 创建提交增值业务的多媒体消息(MM7SubmitReq)
1. 创建消息对象
MM7SubmitReq submitReq = new MM7SubmitReq();
2. 设置消息属性
submitReq.setTransactionID("关联标识"); 
/*设置MM7_submit.REQ/MM7_submit.RES对的标识, 必备*/
submitReq.setVASPID("SP代码") ; //设置 SP代码, 必备
submitReq.setVASID("服务代码") ; //设置服务代码, 必备
submitReq.setServiceCode("业务代码"); //设置业务代码, 必备
submitReq.setSenderAddress("MM始发方的地址");设置MM始发方的地址(填写SP的服务代码,或者填写让用户回复SP的长号码,长号码构成:SP的服务代码+业务代码+操作码), 必备
submitReq.setChargedPartyID(“付费方手机号码”); //设置付费方的手机号码, 必备
submitReq.setTo("接收方地址"); //设置接收方MM的地址
submitReq.addTo("单个接受方地址"); //增加单个接受方地址
submitReq.setCc("抄送方地址"); //设置抄送方MM的地址
submitReq.addCc("单个抄送方地址"); //增加单个抄送方地址
submitReq.setBcc("密送方地址"); //设置密送方MM的地址
submitReq.addBcc("单个密送方地址"); //增加单个密送方地址
注:在设置或增加To,Cc和Bcc时, 至少需要设置其中一个,这些地址可能存在多
个地址或使用指示使用分发表的别名。可以标记仅供参考的地址。
submitReq.setLinkedID("链接标识"); /*设置链接标识,标识传送至VASP的上一
个有效消息的对应关系;可选*/
submitReq.setMessageClass("MM的类别"); /*设置MM的类别(例如,广告、
信息服务和计费),可选,具体有:Auto、Personal、Advertisement、Informational*/
submitReq.setTimeStamp("提交MM的日期和时间"); /*提交MM的时间和日期
(时间戳),格式如2004-02-09T10:21:07,可选*/
submitReq.setExpiryDate("指定超时时间"); /*设置MM指定的超时时间(绝对
或相对时间),可选*/
submitReq.setEarliestDeliveryTime("最早理想时间"); /*设置将MM传送给接收
方的最早理想时间(绝对或相对时间),可选*/
submitReq.setDeliveryReport("发送报告的请求"); /*设置是否需要发送报告的请
求(boolean值),可选*/
submitReq.setReadReply("需要读取报告的请求"); /*设置通过请求传送一个读
取报告进行确认,可选*/
submitReq.setReplyCharging("应答计费的请求"); /*设置应答计费的请求
(boolean值),可选*/
submitReq.setReplyDeadline("提交应答的最迟时间"); /*设置在应答计费的情况
下,向接收方提交应答的最迟时间(绝对或相对时间),可选*/
submitReq.setReplyChargingSize("应答MM的最大大小"); /*设置在应答计费的情况下,提供给接收方的应答MM的最大大小,可选*/
submitReq.setPriority("消息的优先级"); /*消息的优先级(重要性)(0=最低优先级,1=正常,2=紧急),byte类型的值,可选*/
submitReq.setSubject("多媒体消息的标题"); /*设置多媒体消息的标题,可选*/
submitReq.setAllowAdaptations("VASP是否允许修改内容"); /*设置VASP是否允许修改内容(boolean值,默认为真),可选*/
submitReq.setChargedParty("VASP所提交MM的付费方"); /*设置VASP所提交MM的付费方,例如,发送方、接收方、发送方和接收方或两方均不付费,可选,0:Sender、1:Recipients、2:Both、3:Neither、4:ThirdParty*/
submitReq.setContent("多媒体消息的内容"); /*设置多媒体消息的内容,可选,注意当要设置时,一定要设置其ContentType。*/
submitReq.setDistributionIndicator("是否可重新分发"); /*设置VASP是否可重新分发MM的内容(boolean值,true为可以,false为不可以),可选*/
4.2.2.2 创建取消多媒体消息(MM7CancelReq)
1. 创建消息对象
MM7CancelReq cancelReq = new MM7CancelReq();
2. 设置消息属性
cancelReq.setTransactionID("关联标识");    /*MM7_cancel.REQ/MM7_cancel.RES
对的标识, 必备*/
cancelReq.setVASPID("SP代码"); /*设置SP代码,可选*/
cancelReq.setVASID("服务代码"); /*设置服务代码,可选*/
cancelReq.setSenderAddress("MM始发方地址"); /*设置MM始发方地址,可选*/
cancelReq.setMessageID("待取消的消息的标识符"); /*设置待取消的消息的标识符, 必备*/
4.2.2.3 创建替换多媒体消息(MM7ReplaceReq)
1. 创建消息对象
MM7ReplaceReq replaceReq = new MM7ReplaceReq();
2. 设置消息属性
replaceReq.setTransactionID("关联标识");
/*设置MM7_replace.REQ/MM7_replace.RES对的标识, 必备*/
replaceReq.setVASPID("SP代码"); /*设置SP代码,可选*/
replaceReq.setVASID("服务代码"); /*设置服务代码,可选*/
replaceReq.setMessageID("被当前消息所替换的消息的标识符"); /*被当前消息
所替换的消息的标识符, 必备*/
replaceReq.setServiceCode("业务代码"); /*设置业务代码,可选*/
replaceReq.setTimeStamp("提交MM的日期和时间"); /*设置提交MM的时间和
日期(时间戳),格式如2004-02-09T10:21:07,可选*/
replaceReq.setEarliestDeliveryTime("最早理想时间"); /*设置将MM传送给接收
方的最早理想时间(绝对或相对时间),可选*/
replaceReq.setReadReply("需要读取报告的请求"); /*设置通过请求传送一个读
取报告进行确认(boolean值,true为需要,false为不需要),可
选*/
replaceReq.setAllowAdaptations("VASP是否允许修改内容"); /*设置VASP是否允许
修改内容(boolean值,默认为真),可选*/
replaceReq.setContent("多媒体消息内容"); /*设置多媒体消息的内容,可选,注意当要
设置时,一定要设置其ContentType。*/
replaceReq.setDistributionIndicator("是否可重新分发"); /*设置VASP是否可重新分发
MM的内容(boolean值,true为可以,false为不可以),可选*/
4.2.3 创建消息内容体
每个消息内容体就是一个MMContent实例,可以添加多个消息内容体,但是所有消息内容体大小之和不能超过MMSC允许大小(目前最大支持128K)。
MMContent content = new MMContent();
/**设置附件的类型,若不包含SMIL格式的文件,则设置类型为MMConstants.ContentType. MULTIPART_MIXED,若包含SMIL格式的文件,则设置类型为MMConstants.ContentType. MULTIPART_RELATED*/
content.setContentType(MMConstants.ContentType. MULTIPART_MIXED);
/**添加类型为Gif的附件一 */
MMContent sub1 = MMContent.createFromFile("f://yellow.gif");
sub1.setContentID("1.gif");    //可以不设
/**设置子附件的类型,有两种设置方式:一种是在setContentType里面填写MMConstants.ContentType里面定义的常量,另一种是在setContentType里面填写一个String的类型,如text/plain等。*/
sub1.setContentType(MMConstants.ContentType.GIF); // 一定要设置
content.addSubContent(sub1);
/**添加类型为Txt的附件二*/
MMContent sub2 = MMContent.createFromString("This is a Test2!");
sub2.setContentType(MMConstants.ContentType. TEXT); //一定要设置
sub2.setContentID("2.txt");
content.addSubContent(sub2);
/**将附件进行设置,设需发送消息为MM7SubmitReq*/
submitReq.setContent(content);
4.2.4 发送多媒体消息
调用MM7Sender的send方法发送多媒体消息,返回MM7RSRes类型的消息。举例,发送MM7SubmitReq类型的消息:
MM7RSRes res = mm7Sender.send(submitReq); //其它消息与此类似
package com.cmcc.mm7.vasp.conf;
 
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.service.MM7Sender;
import com.cmcc.mm7.vasp.common.*;
import java.io.*;
 
public class VaspSendTest {
public static void main(String[] args) {
       MM7Config mm7Config = new MM7Config("./config/mm7Config.xml");
       mm7Config. setConnConfigName("./config/ConnConfig.xml");
       MM7Sender mm7Sender = new MM7Sender(mm7Config);
       MM7SubmitReq submit = new MM7SubmitReq();
       submit.setTransactionID("11111111");
    submit.addTo("13915002000");
    submit.setVASID("1234");
    submit.setServiceCode("123");
    submit.setSubject("测试");
       MMContent content = new MMContent();
    content.setContentType(MMConstants.ContentType. MULTIPART_MIXED);
       MMContent sub1 = MMContent.createFromFile("f://yellow.gif");
    sub1.setContentID("1.gif");
    sub1.setContentType(MMConstants.ContentType.GIF);
    content.addSubContent(sub1);
       MMContent sub2 = MMContent.createFromString("This is a Test2!");
       sub2.setContentID("2.txt");
sub2.setContentType(MMConstants.ContentType. TEXT);
       content.addSubContent(sub2);
       submit.setContent(content);
       MM7RSRes res = mm7Sender.send(submit);
       System.out.println("res.statuscode=" + res.getStatusCode() +
                           ";res.statusText=" + res.getStatusText());
}
}
4.3 VASP接收传送消息以及发送提交消息实例
举一个实例说明VASP构建MM7SubmitReq,发送给MMSC,并得到返回消息,通过StatusCode判断,本次发送是否成功,若成功,得到MessageID,以便以后希望取消或替换该消息时用。
 
public class MyReceiver extends MM7Receiver
{
    //定义一个MM7DeliverReq,以便得到 MMSC发过来的Deliver消息。( 必备
    public static MM7DeliverReq deliverReq = new MM7DeliverReq();
    //Main方法
       public static void main(String[]args)
       {
     //初始化VASP
MM7Config mm7Config = new MM7Config(“../config/mm7Config.xml”);
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“../config/ConnConfig.xml”); // 必备
//构造MyReceiver
MyReciever receiver = new MyReceiver();
receiver.setConfig(mm7Config); // 必备
//创建MM7消息发送接口
MM7Sender mm7Sender = new MM7Sender(mm7Config);
//启动接收器
receiver.start();
//接收MM7DeliverReq完毕,开始构造MM7SubmitReq
//有两种可能,一种是MM7SubmitReq完全由 SP构造,另一种是SP用接收到的
//MM7DeliverReq的部分内容进行填充。
MM7SubmitReq submitReq = new MM7SubmitReq();
submitReq.setVASPID("SP代码") ; // 必备
submitReq.setVASID("服务代码") ; // 必备
submitReq.setServiceCode("业务代码"); // 必备
submitReq.setSenderAddress("MM始发方的地址"); /* 必备,若想从MM7DeliverReq中获得,
则应按下面的方式设:               submitReq.setSenderAddress(deliverReq.getSender());*/
submitReq.setTo("接收方地址"); /*若想从MM7DeliverReq中获得,则应按下面的方式设:
           submitReq.setTo(deliverReq.getTo());*/
        submitReq.addTo("单个接受方地址"); //增加单个接受方地址
submitReq.setCc("抄送方地址"); /*若想从MM7DeliverReq中获得,则应按下面的方式设:
                     submitReq.setCc(deliverReq.getCc()) ;*/
        submitReq.addCc("单个抄送方地址"); //增加单个抄送方地址
submitReq.setBcc("密送方地址"); /*若想从MM7DeliverReq中获得,则应按下面的方式设:
submitReq.setBcc(deliverReq.getBcc()) ;*/
submitReq.addBcc("单个密送方地址"); //增加单个密送方地址
submitReq.setLinkedID("链接标识"); /*可选,若想从MM7DeliverReq中获得,则应按
下面的方式设:submitReq.setLinkedID(deliverReq.getLinkedID()) ;*/
submitReq.setMessageClass("MM的类别"); /*可选*/
submitReq.setTimeStamp("提交MM的日期和时间"); /*格式如2004-02-09T10:21:07,
可选*/
submitReq.setExpiryDate("指定超时时间"); /*可选*/
submitReq.setEarliestDeliveryTime("最早理想时间"); /*可选*/
submitReq.setDeliveryReport("发送报告的请求"); /* boolean值,可选*/
submitReq.setReadReply("需要读取报告的请求"); /*可选*/
submitReq.setReplyCharging("应答计费的请求"); /*boolean值,可选*/
submitReq.setReplyDeadline("提交应答的最迟时间"); /*可选*/
submitReq.setReplyChargingSize("应答MM的最大大小"); /*可选*/
submitReq.setPriority("消息的优先级"); /* 0=最低优先级,1=正常,2=紧急,byte类型的值,可选,若想从MM7DeliverReq中获得,则应按下面的方式设:
submitReq.setPriority(deliverReq.getPriority());*/
submitReq.setSubject("多媒体消息的标题"); /*可选,若想从MM7DeliverReq中获得,则
应按下面的方式设:SubmitReq.setSubject(deliverReq.getSubject());*/
submitReq.setAllowAdaptations("VASP是否允许修改内容"); // boolean值,默认为真,可选
submitReq.setChargedParty("VASP所提交MM的付费方"); /*可选*/
submitReq.setChargedPartyID("chargedPartyID"); /* 必备*/
submitReq.setDistributionIndicator("是否可重新分发"); /*boolean值,true为可以,false为不
可以,可选*/
//开始创建多媒体消息的内容
/*每个消息内容体就是一个MMContent实例,可以添加多个消息内容体,但是所有消息内容体大小之和不能超过MMSC允许大小(目前最大支持128K)。*/
MMContent content = new MMContent();
content.setContentType(MMConstants.ContentType.MULTIPART_RELATED);
/**添加类型为Gif的附件一 */
MMContent sub1 = MMContent.createFromFile("f://yellow.gif");
sub1.setContentID("1.gif");    //可以不设
sub1.setContentType(MMConstants.ContentType.GIF); /*可以不设,但这个不设的话,
ContentID必须设*/
content.addSubContent(sub1);
/**添加类型为Txt的附件二*/
MMContent sub2 = MMContent.createFromString("This is a Test2!");
sub2.setContentID("2.txt");
sub2.setContentType(MMConstants.ContentType. TEXT);
content.addSubContent(sub2);
/**将附件进行设置*/
submitReq.setContent("多媒体消息的内容"); /*可选,也可以从MM7DeliverReq中获得多
媒体消息的内容,submitReq.setContent(deliverReq.getContent());*/
/*发送MM7SubmitReq消息,正确返回MM7SubmitRes消息,错误返回MM7RSError消息,
其它消息与此类似*/
        MM7RSRes res = mm7Sender.send(submitReq); 
        /*可以根据StatusCode来判断本次发送是否成功,若成功能得到MessageID等信息。
StatusCode可能得到的值,具体可见本文中的请求状态码说明。*/
        if(res instanceof  MM7SubmitRes)
{
    MM7SubmitRes submitRes = (MM7SubmitRes)res;
    System.out.println(“StatusCode=”+ submitRes.getStatusCode());
    System.out.println(“StatusText=”+ submitRes.getStatusText());
    System.out.println(“MessageID=”+ submitRes .getMessageID());
     }
    }
    public MM7VASPRes doDeliver(MM7DeliverReq request)
       {
        /*接收从 MMSC发过来的传送消息,以便取出其中的部分值构造提交消息或得到一些有用
信息,如MMSC的标识符等 */
        deliverReq = request;
        System.out.println(“收到手机 ”+request.getSender()
+“提交的消息,标题为: ”+request.getSubject());
        System.out.println("MMSC的标识符为:"+request. GetMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliverRes消息,设置ServiceCode或StatusCode
MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
mm7DeliverRes.setServiceCode("服务代码"); //可选
mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS); /* 必备,以便表明
SP已经接收到传送消息。成功可设1000。*/
        mm7DeliverRes.setStatusText("所用状态文本说明"); /*可选*/
        //返回给MM7 API,以便API将MM7DeliverRes返回给MMSC。
return(MM7VASPRes)mm7DeliverRes;
    }
}
4.4 VASP接收状态报告(上行业务)
当VASP在发送MM7SubmitReq给MMSC时设置需要发送状态报告的请求为true时,MMSC在收到MM7SubmitReq后,会发送状态报告给VASP,此时VASP可以进行接收。接收方式和接收传送消息一样,也有两种方式:
4.4.1方式1:普通应用程序中的用法
public class MyReceiver extends MM7Receiver
{
public MM7DeliveryReportReq deliveryReportReq;
    //Main方法
       public static void main(String[]args)
       {
     //初始化VASP
MM7Config mm7Config = new MM7Config(“./config/mm7Config.xml”);
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“../config/ConnConfig.xml”); // 必备
//构造MyReceiver
MyReciever receiver = new MyReceiver();
receiver.setConfig(mm7Config); // 必备
//启动接收器
receiver.start();
for(;;);
       }
       public MM7VASPRes doDeliveryReport(MM7DeliveryReportReq request)
       {
/*接收从 MMSC发过来的状态报告,以便得到一些有用信息,如MMSC的标识符等 */
        deliveryReportReq = request;
        System.out.println(“收到发送方 ”+request.getSender()
+“提交的消息,其 MessageID为:”+request.getMessageID());
        System.out.println("MMSC的标识符为:"+request. getMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliveryReportRes消息,返回给 MM7 API
MM7DeliveryReportRes mm7DeliveryReportRes = new MM7DeliveryReportRes ();
mm7DeliveryReportRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请
            求完成状态, 必备,以便表明SP已经接收到状态报告。一般设 1000。*/
        mm7DeliveryReportRes.setStatusText("所用状态文本说明 "); /*设置所用状态的文本说
明,应限定请求状态,可选 */
        //返回给 MM7 API,以便API将MM7DeliveryReportRes返回给 MMSC。
return(MM7VASPRes) mm7DeliveryReportRes;
    }
}
4.4.2方式2:Web应用程序中的用法
 
public class MyReceiver extends MM7RecieveServlet
{
public MM7VASPRes doDelivery(MM7DeliveryReportReq request)
       {
        /*接收从 MMSC发过来的状态报告,以便得到一些有用信息,如MMSC的标识符等 */
        deliveryReportReq = request;
        System.out.println(“收到发送方 ”+request.getSender()
+“提交的消息,其 MessageID为:”+request.getMessageID());
        System.out.println("MMSC的标识符为:"+request. getMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliverReportRes消息,返回给 MM7 API
MM7DeliveryReportRes mm7DeliveryReportRes = new MM7DeliveryReportRes ();
mm7DeliveryreportRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求
完成状态, 必备,以便表明SP已经接收到状态报告。一般设 1000。*/
        mm7DeliveryReportRes.setStatusText("所用状态文本说明 "); /*设置所用状态的文本说
明,应限定请求状态,可选 */
        //返回给 MM7 API,以便API将MM7DeliveryReportRes返回给 MMSC。
return(MM7VASPRes) mm7DeliveryReportRes;
    }
}
4.5 VASP接收读后回复报告(上行业务)
当VASP在发送MM7SubmitReq给MMSC时设置需要读后回复报告的请求为true时,MMSC在收到MM7SubmitReq后,会发送读后回复报告给VASP,此时VASP可以进行接收。接收方式和接收传送消息以及状态报告一样,也有两种方式:
4.5.1方式1:普通应用程序中的用法
public class MyReceiver extends MM7Receiver
{
public MM7ReadReplyReq readReplyReq;
    //Main方法
       public static void main(String[]args)
       {
     //初始化VASP
MM7Config mm7Config = new MM7Config(“./conf/vasp.xml”);
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“./config/ConnConfig.xml”); // 必备
//构造MyReceiver
MyReciever receiver = new MyReceiver();
receiver.setConfig(mm7Config); // 必备
//启动接收器
receiver.start();
for(;;);
       }
       public MM7VASPRes doReadReply(MM7ReadReplyReq request)
       {
        /*接收从 MMSC发过来的读后回复报告,以便得到一些有用信息,如MMSC的标识符等 */
        readReplyReq = request;
        System.out.println(“收到手机 ”+request.getSender()
+“的已读消息,其 MessageID为:”+request.getMessageID());
        System.out.println("MMSC的标识符为:"+request. getMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7ReadReplyRes消息,返回给 MM7 API
MM7ReadReplyRes readReplyRes = new MM7ReadReplyRes ();
readReplyRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求完成状
态, 必备,以便表明SP已经接收到读后回复报告。成功设 1000。*/
        readReplyRes.setStatusText("所用状态文本说明 "); /*设置所用状态的文本说明,应限
定请求状态,可选 */
        //返回给 MM7 API,以便API将MM7ReadReplyRes返回给 MMSC。
return(MM7VASPRes) readReplyRes;
    }
}
4.5.2方式2:Web应用程序中的用法
public class MyReceiver extends MM7RecieveServlet
{
    public MM7VASPRes doReadReply (MM7ReadReplyReq request)
       {
        /*接收从 MMSC发过来的读后回复报告,以便得到一些有用信息,如MMSC的标识符等 */
        readReplyReq = request;
        System.out.println(“收到手机 ”+request.getSender()
+“的已读消息,其 MessageID为:”+request.getMessageID());
        System.out.println("MMSC的标识符为:"+request. getMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7ReadReplyRes消息,返回给 MM7 API
MM7ReadReplyRes readReplyRes = new MM7ReadReplyRes ();
readReplyRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求完成状
态, 必备,以便表明SP已经接收到读后回复报告。成功设 1000。*/
        readReplyRes.setStatusText("所用状态文本说明 ");  /*设置所用状态的文本说明,应限
定请求状态,可选 */
        //返回给 MM7 API,以便API将MM7ReadReplyRes返回给 MMSC。
return(MM7VASPRes) readReplyRes;
    }
}
4.6 发送取消消息(下行业务)
当VASP发送MM7SubmitReq消息给MMSC成功后,VASP可以发送取消消息,以取消之前所发送给MMSC的消息。具体构建取消消息见4.2.2.2。
 
package com.cmcc.mm7.vasp.conf;
 
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.service.MM7Sender;
import com.cmcc.mm7.vasp.common.*;
import java.io.*;
 
public class VaspSendTest {
public static void main(String[] args) {
       MM7Config mm7Config = new MM7Config("../config/mm7Config.xml");
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“../config/ConnConfig.xml”);
       MM7Sender mm7Sender = new MM7Sender(mm7Config);
              MM7CancelReq cancelReq = new MM7CancelReq();
           cancel.setTransactionID("关联标识");        
              //从MM7SubmitRes中获得MessageID
              cancelReq.setMesageID(“待取消的消息的标识符”);
       MM7RSRes res = mm7Sender.send(cancelReq);
       System.out.println("res.statuscode=" + res.getStatusCode() +
                           ";res.statusText=" + res.getStatusText());
       }
}
 
4.7 发送替换消息(下行业务)
当VASP发送MM7SubmitReq消息给MMSC成功后,VASP可以发送替换消息,以替换之前所发送给MMSC的消息。具体构建替换消息见4.2.2.3。
package com.cmcc.mm7.vasp.conf;
 
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.service.MM7Sender;
import com.cmcc.mm7.vasp.common.*;
import java.io.*;
 
public class VaspSendTest {
public static void main(String[] args) {
       MM7Config mm7Config = new MM7Config("./config/mm7Config.xml");
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“./config/ConnConfig.xml”);
       MM7Sender mm7Sender = new MM7Sender(mm7Config);
              MM7ReplaceReq replace = new MM7ReplaceReq();
        replace.setTransactionID("关联标识");
              //从MM7SubmitRes中获得MessageID
              replace.setMessageID("被当前消息所替换的消息的标识符");
              //创建消息内容体
        MMContent content = new MMContent();
        content.setContentType(MMConstants.ContentType.MULTIPART_MIXED);
        MMContent sub1 = MMContent.createFromString("This is a test11");
        sub1.setContentID("1.txt");
        content.addSubContent(sub1);
        MMContent sub2 = MMContent.createFromString("This is a Test22");
        sub2.setContentID("2.txt");
        content.addSubContent(sub2);
        replace.setContent(content);
       MM7RSRes res = mm7Sender.send(replace);
       System.out.println("res.statuscode=" + res.getStatusCode() +
                           ";res.statusText=" + res.getStatusText());
       }
}
5.开发过程中需用的一些Status解释
5.1 关于StatusCode和StatusText的解释
当VASP收到MMSC发送过来的DeliverReq、DeliverReportReq、ReadReplyReq时,可以经过判断后,返回给MMSC一个状态码和状态描述,可以返回的StatusCode和StatusText分别如下,同样当VASP收到MMSC返回的SubmitRes、CancelRes、ReplaceRes、RSErrorRes时,可能得到的StatusCode和StatusText分别如下:
1000 : 成功;
1001 : 部分成功;
2000 : 客户机错误;
2001 : 操作受限;
2002 : 地址错误;
2003 : 找不到地址;
2004 : 多媒体内容被拒绝;
2005 : 找不到消息ID;
2006 : 找不到链接ID;
2007 : 消息格式破坏;
3000 : 服务器错误;
3001 : 不可接受;
3002 : 消息被拒绝;
3003 : 不支持多个地址;
4000 : 一般服务错误;
4001 : 标识不正确;
4002 : 版本不支持;
4003 : 操作不支持;
4004 : 验证错误;
4005 : 服务错误;
4006 : 无法提供服务;
4007 : 服务被拒绝;
 
5.2关于VASP收到DeliveryReportreq中MMStatus的解释
VASP收到DeliveryReportReq消息后,其中有个MMStatus字段值,是个byte型,因此说明一下具体数字所表示的含义:
0 :过期;
1 :接收;
2 :系统拒绝;
3 :用户拒绝;
4 :未知;
5 :转发;
 
5.3 关于VASP收到ReadReplyReq中ReadStatus的解释
VASP收到ReadReplyReq消息后,其中有个ReadStatus字段值,是个byte型,因此说明一下具体数字所表示的含义:
0 :已读取;
1 :未读被删;
2 :未知;
6.获取MM7 API版本信息的方法
VASP要想获得自己当前使用的API的版本号,首先在环境变量中设置mm7api.jar包存放的路径,然后点击开始菜单的运行,输入cmd进入Dos 窗口,敲命令:
 E:/> java com.cmcc.mm7.vasp.common.RetriveApiVersion 回车
可以看到打印信息如下:
当前使用的MM7 API 的版本为:V1.5.1_20040512
 
7. MM7 API返回StatusCode说明
-100 :系统错误;
-101 :超时发送失败;
-102 :接收失败;
-103 :没有返回正确的消息;
-104 :Socket 不通;
-105 :待发送的消息为空;
-106 :发送消息不正确;
-107 :接收消息为空;
-108 :Bad Request
-109 :XML 解析错误;
-110 :Server Could not fulfill the request
-113 :消息内容的尺寸超出允许发送的大小
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值