中国移动MM7 API用户手册(五)
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>1</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>1</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); //其它消息与此类似
4.2.5发送MM7SubmitReq消息到移动终端实例
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());
}
}