天天看點

中國移動MM7 API使用者手冊

中國移動集團公司

修改記錄

檔案編号 版本号 拟制人/

修改人 拟制/修改日期 更改理由 主要更改内容

(寫要點即可)

  V1.1 胡冬梅 2004.03.22 修改、整理  

  V1.2 胡冬梅 2004.04.14 增加内容 增加安裝說明

  V1.3 胡冬梅 2004.4.21 增加内容 增加狀态碼等說明

      V1.5.1 胡冬梅 2004.5.12 增加内容 增加擷取API版本資訊、API傳回碼說明等

目    錄

1.概述... 5

2.概念... 5

2.1企業代碼... 5

2.2服務代碼... 6

2.3業務代碼... 6

2.3.1上行業務的業務代碼規範... 6

2.3.2下行業務的業務代碼規範... 8

2.4操作指令碼... 10

2.5下行業務... 11

2.6上行業務... 11

2.7遞送報告... 11

3.安裝方法... 11

3.1 MM7 API的使用... 11

3.2配置檔案的設定... 11

4.開發方法... 13

4.1 VASP接收傳送請求(上行業務)... 13

4.1.1 方式1:普通應用程式中的用法... 13

4.1.2 方式2:Web應用程式中的用法... 14

4.2發送多媒體消息的過程(下行業務)... 15

4.2.1準備... 15

4.2.2建立待發送消息... 16

4.2.2.1 建立送出增值業務的多媒體消息(MM7SubmitReq)... 16

4.2.2.2 建立取消多媒體消息(MM7CancelReq)... 18

4.2.2.3 建立替換多媒體消息(MM7ReplaceReq)... 18

4.2.3 建立消息内容體... 19

4.2.4 發送多媒體消息... 20

4.2.5發送MM7SubmitReq消息到移動終端執行個體... 20

4.3 VASP接收傳送消息以及發送送出消息執行個體... 21

4.4 VASP接收狀态報告(上行業務)... 24

4.4.1方式1:普通應用程式中的用法... 24

4.4.2方式2:Web應用程式中的用法... 25

4.5 VASP接收讀後回複報告(上行業務)... 26

4.5.1方式1:普通應用程式中的用法... 26

4.5.2方式2:Web應用程式中的用法... 27

4.6 發送取消消息(下行業務)... 27

4.7 發送替換消息(下行業務)... 28

5.開發過程中需用的一些Status解釋... 29

5.1 關于VASP接收到消息後設定傳回響應(Res)的狀态碼及狀态報告的解釋... 29

5.2 關于VASP收到DeliverReq中MMStatus的解釋... 30

5.3 關于VASP收到ReadReplyReq中ReadStatus的解釋... 30

6.擷取MM7 API版本資訊的方法... 30

7. MM7 API傳回StatusCode說明... 30

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)

       {

        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) ;

        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) ;

        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("關聯辨別");

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("連結辨別");

submitReq.setMessageClass("MM的類别");

submitReq.setTimeStamp("送出MM的日期和時間");

submitReq.setExpiryDate("指定逾時時間");

submitReq.setEarliestDeliveryTime("最早理想時間");

submitReq.setDeliveryReport("發送報告的請求");

submitReq.setReadReply("需要讀取報告的請求");

submitReq.setReplyCharging("應答計費的請求");

submitReq.setReplyDeadline("送出應答的最遲時間");

submitReq.setReplyChargingSize("應答MM的最大大小");

submitReq.setPriority("消息的優先級");

submitReq.setSubject("多媒體消息的标題");

submitReq.setAllowAdaptations("VASP是否允許修改内容");

submitReq.setChargedParty("VASP所送出MM的付費方");

submitReq.setContent("多媒體消息的内容");

submitReq.setDistributionIndicator("是否可重新分發");

4.2.2.2 建立取消多媒體消息(MM7CancelReq)

1.建立消息對象

MM7CancelReq cancelReq = new MM7CancelReq();

2. 設定消息屬性

cancelReq.setTransactionID("關聯辨別");  

cancelReq.setVASPID("SP代碼");

cancelReq.setVASID("服務代碼");

cancelReq.setSenderAddress("MM始發方位址");

cancelReq.setMessageID("待取消的消息的辨別符");

4.2.2.3 建立替換多媒體消息(MM7ReplaceReq)

1.建立消息對象

MM7ReplaceReq replaceReq = new MM7ReplaceReq();

2. 設定消息屬性

replaceReq.setTransactionID("關聯辨別");

replaceReq.setVASPID("SP代碼");

replaceReq.setVASID("服務代碼");

replaceReq.setMessageID("被目前消息所替換的消息的辨別符");

replaceReq.setServiceCode("業務代碼");

replaceReq.setTimeStamp("送出MM的日期和時間");

replaceReq.setEarliestDeliveryTime("最早理想時間");

replaceReq.setReadReply("需要讀取報告的請求");

replaceReq.setAllowAdaptations("VASP是否允許修改内容");

replaceReq.setContent("多媒體消息内容");

replaceReq.setDistributionIndicator("是否可重新分發");

4.2.3 建立消息内容體

每個消息内容體就是一個MMContent執行個體,可以添加多個消息内容體,但是所有消息内容體大小之和不能超過MMSC允許大小(目前最大支援128K)。

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.setContentType(MMConstants.ContentType. TEXT); //一定要設定

sub2.setContentID("2.txt");

content.addSubContent(sub2);

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());

}

}

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始發方的位址");

submitReq.setTo("接收方位址");

        submitReq.addTo("單個接受方位址"); //增加單個接受方位址

submitReq.setCc("抄送方位址");

        submitReq.addCc("單個抄送方位址"); //增加單個抄送方位址

submitReq.setBcc("密送方位址");

submitReq.addBcc("單個密送方位址"); //增加單個密送方位址

submitReq.setLinkedID("連結辨別");

submitReq.setMessageClass("MM的類别");

submitReq.setTimeStamp("送出MM的日期和時間");

submitReq.setExpiryDate("指定逾時時間");

submitReq.setEarliestDeliveryTime("最早理想時間");

submitReq.setDeliveryReport("發送報告的請求");

submitReq.setReadReply("需要讀取報告的請求");

submitReq.setReplyCharging("應答計費的請求");

submitReq.setReplyDeadline("送出應答的最遲時間");

submitReq.setReplyChargingSize("應答MM的最大大小");

submitReq.setPriority("消息的優先級");

submitReq.setSubject("多媒體消息的标題");

submitReq.setAllowAdaptations("VASP是否允許修改内容"); // boolean值,預設為真,可選

submitReq.setChargedParty("VASP所送出MM的付費方");

submitReq.setChargedPartyID("chargedPartyID");

submitReq.setDistributionIndicator("是否可重新分發");

//開始建立多媒體消息的内容

MMContent content = new MMContent();

content.setContentType(MMConstants.ContentType.MULTIPART_RELATED);

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);

submitReq.setContent("多媒體消息的内容");

        MM7RSRes res = mm7Sender.send(submitReq);

        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)

       {

        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);

        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)

       {

        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) ;

        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)

       {

        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) ;

        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)

       {

        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) ;

        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)

       {

        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) ;

        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:消息内容的尺寸超出允許發送的大小

本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/youyu_wangzi/archive/2006/11/01/1359793.aspx