MMS Gateway說明文件

Similar documents
iGENUS爱琴思邮件系统技术白皮书

投影片 1

EJB-Programming-4-cn.doc

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

Microsoft Word - 01.DOC

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

untitled

IP505SM_manual_cn.doc

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

问 调 用 云 端 的 语 音 服 务 的 接 口 形 式, 对 规 范 语 音 识 别 服 务 提 供 方 式, 方 便 客 户 端 的 集 成 调 用, 从 而 促 进 语 音 交 互 应 用 的 推 广 发 展, 促 进 广 大 用 户 充 分 享 受 到 语 音 交 互 带 来 的 快 速

untitled

EJB-Programming-3.PDF

untitled

untitled

TopTest_Adminstrator.doc

epub 61-2

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

ext-web-auth-wlc.pdf

( )... 5 ( ) ( )

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

第 11 章 互聯網技術 11.1 互聯 網 和 萬 維 網 的 發 展 歷 史 A. 互聯網的發展 互聯網是由 ARPANET 開 始發展的 1969 年 美國國防部高級研究計劃署 (ARPA) 把部分軍事研究所和大 的電腦連接起來 建造了㆒個實驗性的電腦網絡 稱為 ARPANET 並 列 的功能

ebook71-13

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF


Java

穨IC-1000

untitled

Microsoft Word - template.doc

CMPP Message Header (SP) (ISMG)...13

(CIP) Web /,. :, ISBN X.W T P393.4 CIP (2004) Web ( ) ( / ) : * 787

ebook

XXXXXXXX

Chapter 9: Objects and Classes

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG

untitled

基于CDIO一体化理念的课程教学大纲设计

2005 Sun Microsystems, Inc Network Circle, Santa Clara, CA U.S.A. Sun Sun Berkeley BSD UNIX X/Open Company, Ltd. / Sun Sun Microsystems Su

RunPC2_.doc

財金資訊-80期.indd

untitled

ebook4-12

ebook140-8

keystore weblogic.jks certreq.pem CA server.cer

概述

Microsoft Word - DIR-615_B2_Manual_1.00_T_.doc


3.1 num = 3 ch = 'C' 2

<4D F736F F D20C8EDBCFEB9A4B3CCCFEEC4BFD0E8C7F3B5F7D1D0B1A8B8E6B7B6B1BE>

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

<4D F736F F D D352DBED6D3F2CDF8D7E9BDA8D3EBB9DCC0EDCFEEC4BFBDCCB3CCD5FDCEC42E646F63>

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

TCP/IP TCP/IP OSI IP TCP IP IP TCP/IP TCP/IP

untitled

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

(Methods) Client Server Microsoft Winsock Control VB 1 VB Microsoft Winsock Control 6.0 Microsoft Winsock Control 6.0 1(a). 2

第一章 章标题-F2 上空24,下空24

C6_ppt.PDF

<A4E2BEF7B4FAB8D5B3F8A F52322E786C7378>

一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 S

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

工程师培训

经华名家讲堂

FileMaker 16 ODBC 和 JDBC 指南

ISP ISP 97%~99% 95%~99.5% 2

RUN_PC連載_10_.doc

PHOTON Web Hosting

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

Chapter #

EC51/52 GSM /GPRS MODEN

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

RUN_PC連載_8_.doc

XML/DTD (1) XML (Markup) SGML HTML XML XML XML 2004/7/ All Rights Reserved 2

填 写 要 求 1. 以 word 文 档 格 式 如 实 填 写 各 项 2. 表 格 文 本 中 外 文 名 词 第 一 次 出 现 时, 要 写 清 全 称 和 缩 写, 再 次 出 现 时 可 以 使 用 缩 写 3. 本 表 栏 目 未 涵 盖 的 内 容, 需 要 说 明 的, 请 在

● 源起

Microsoft Word - Functional_Notes_3.90_CN.doc

untitled

ebook140-9

Simulator By SunLingxi 2003

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

QVM330 多阜寬頻路由器


1 IT IT IT IT Virtual Machine, VM VM VM VM Operating Systems, OS IT

IE10 WorkShop

Bus Hound 5

软件概述

PL600 IPPBX 用户手册_V2.0_.doc

Microsoft Word 招股说明书07.11

Microsoft Word - YDB Vehicle Telematics Service Requirement and General Framework

Microsoft Word - YDB doc

学 院 人 才 培 养 分 项 自 评 报 告 结 果 汇 总 表 主 要 评 估 指 标 关 键 评 估 要 素 自 评 等 级 1.1 学 校 事 业 发 展 规 划 合 格 1. 领 导 作 用 1.2 办 学 目 标 与 定 位 合 格 1.3 对 人 才 培 养 重 视 程 度 合 格 1

turbomail方案

(CSR)...2 CA CA CA CA Base64 CA CA SSL

Transcription:

整合式服務平台 MMS 閘道介面 IMSP - MMS Gateway Interface Version 1.7 2016/01/15 1

更新履歷 版本 時間 更新內容 1.0 2005/10/31 初稿 1.1 2007/04/18 修改單次傳送 MMS 至多可攜 20 組受話號碼 1.2 2008/09/01 新增三組錯誤代碼 :-6-8 -9 1.3 2008/11/22 新增一組錯誤代碼 :-10 1.4 2013/05/29 新增 SSL 介面, 移除 login 之 http GET 方法介面 及說明未來將移除 eaif 之相關服務 相 關 http GET 範例改為 https GET 用法 1.5 2013/08/14 修正 http port 8080 至正確的 port 8008 1.6 2014/05/09 說明 code 3 Submitting failed 之常見的原因 1.7 2016/01/15 限制使用 SSL 連線 移除 EAIF 相關服務 補充一些 MMS 說明 及新增 JSP 程式範例 2

目錄 1. 說明... 5 2. 簡介... 5 3. Protocol 說明... 6 3.1 測試帳號 (Login Test)... 8 3.2 傳送 MMS 命令 1 (send_mms)... 9 3.4 查詢 MMS 命令 1 (query)... 15 3.5 查詢 MMS 命令 2 (query_batch)... 17 3.6 擷取 MMS 命令 (get_mime)... 19 4. 其它說明... 21 4.1 關於 MMS 訊息... 21 3

4.2 其他注意事項... 21 4.3 常見問題集... 22 5. 附錄... 24 5.1 GET_MIME 之 MMS 規格說明... 24 5.2 JSP 傳送 Mixed MMS 程式範例... 26 5.3 JSP 傳送 SMIL MMS 程式範例... 36 4

1. 說明 IMSP MMS 閘道介面提供客戶端以 HTTP protocol 從 Internet 至 MMSC 的介接 本文件提供客戶端程式與 IMSP MMS Gateway 連接時之資料傳遞格式說明及其他應注意的事項 2. 簡介 IMSP MMS Gateway 為一 Web Application, 提供客戶端以 HTTP protocol 與 IMSP MMS Gateway 連接, 目前 IMSP MMS Gateway 所提供的介面有 : 發送 MMS 訊息至手機 查詢傳送訊息的狀態及收取手機上傳至特碼之 MMS 訊息等 客戶端傳送到 IMSP MMS Gateway 的參數均是以 HTTPs Post 方式傳送 ;IMSP MMS Gateway 對於客戶端的請求則是以 HTTP Respond 方式傳回一個 HTML page, 請求的執行結果包括結果代碼及描述均在 HTML Body 中 註 1: 本 IMSP MMS 服務內定只提供客戶發送及查詢簡訊權限 若需要設定允入 IP 清單等, 請至本公司另申請帳號之相關權限 註 2: 目前 IMSP HTTP SSL 連線已於 2015/10/12 停用 SSL v3, 改只提供 TLS v1.0, v1.1, 及 v1.2 加密等級連線 當客戶端使用 JAVA 版應用程式, 建議使用 JDK 1.7 ( 含 ) 以上版本, 較好支援其 TLS 連線服務, 可參考後述 5.2 及 5.3 章節範例 5

JDK 1.6: 支援 SSLv3 及 TLS 1.0 JDK 1.7: 支援 TLS 1.1 及 TLS 1.2 JDK 1.8: 內定使用 TLS v1.2 3. Protocol 說明 目前 IMSP MMS Gateway 支援四種 request interface, 分別是 send_mms query query_batch 及 get_mime Gateway 在執行後會將結果傳回給 client 執行結果包括一個數字的結果代號 (return code) 和一個字串的描述 (description), 兩者以 <br> 隔開 return code = 0 代表 request 執行成功 return code > 0 代表 IMSP MMS Server 成功的執行了 request, 但是依照不同的 request 可能產生成功以外的結果 ( 請參考下面各個 request 的說明 ) 若 return code < 0 則代表 IMSP MMS Gateway 無法成功地完成 request, 除了每個 request 都有各自的失敗代碼外, 下表列出了所有的 request 都有可能產生的 return code 和處理方式 Return 失敗原因 處理方式 code -1 IMSP MMS 請檢查您送到 IMSP MMS Gateway 的 HTTP request packet 有沒有錯誤, 最常見的錯誤 6

Gateway 收到了一 為編碼錯誤, 例如說送出了 %7 這種編碼 ( 正確為 %07) 個錯誤的 HTTP packet -2 某個參數錯誤 請參考 description 的敘述檢查您送到 IMSP MMS Gateway 的參數是否正確 通常會造成這種錯誤的原因包括 : 1. IMSP MMS Gateway 沒有收到一個必須要有的參數 ( 也有可能是參數名稱錯誤 提醒您系統處理參數的名稱大小寫是有分別的 ); 2. 參數格式錯誤 ( 例如 IMSP MMS Gateway 預期收到 PLMN address, 但是您送了一個 e-mail address); 3. 參數未作 x-www-form-urlencoded 編碼或是編碼錯誤等 -3 資料庫錯誤 當您遇到這種錯誤, 請和我們的服務人員聯絡, 謝謝 -4 認證失敗 IMSP MMS Gateway 無法認證您的身分, 可能原因包括 : 1. 您在參數列中的帳號密碼有誤, 請確定做任何 request 時都需帶帳號密碼 1. 請參考 "3.1 測試帳號 ", 利用瀏覽器直接鍵入網址 https://imsp.emome.net:4443/ imsp/mms/servlet/login?account=xxxxx&password=xxxxx 來測試帳號是否有誤 -19 未知的錯誤 IMSP MMS Server 發生了未知的錯誤, 請和我們的技術人員聯絡, 謝謝 7

3.1 測試帳號 (Login Test) 命令說明 備註 要求 URL Path https://imsp.emome.net:4443/imsp/mms/servlet/login (SSL) HTTP Method POST 或 GET Parameters 名稱 描述 資料型態 資料長度限制 初值設定 account 帳號 ASCII 字串 10 無 password 密碼 ASCII 字串 10 無 回應 <html> <header></header> <body> {return code <br> {description <br> </body> </html> Return Description 失敗原因 處理方式 Code 0 Login succeed from {your ip 您的帳號是可登入的 -21 Login failed 您傳送給 MMS Gateway 請檢查您送給 MMS Gateway 的帳號或密碼不正確 的帳號和密碼是否正確, 請注意 帳號和密碼是有區分大小寫的 8

-22 Illegal IP Address 您的來源 IP 是不被允許的 請從登錄的 IP Address 連接 MMS Gateway ( 可洽本公司設定您的固定式 IP 清單, 以強化您的帳號安全 ) -23 Account disabled 這個帳號已停用 請聯絡我們的管理人員 3.2 傳送 MMS 命令 1 (send_mms) 命令說明 備註 要求 URL Path https://imsp.emome.net:4443/imsp/mms/servlet/send_mms (SSL) URL 編碼字串是以 HTTP Method POST ( 不支援 GET) x-www-form-url encoded 方式編碼 Parameters 名稱 描述 資料型態 資料長度限制 初值設定 的字串 account 帳號 ASCII 字串 10 無 password 密碼 ASCII 字串 10 無 from_addr 如下註 1 [0~9] 數字串 35 無 from_addr_type 如下註 2 0 或 1 1 0 to_addr 如下註 3 [0~9] 數字串 35 無 9

to_addr_type 如下註 4 0 或 1 1 0 cp_id 如下註 5 [0~9] 數字串 3 000 subject 如下註 6 URL 編碼字串 40 無 expire_offset 如下註 7 [0~9] 數字串 無 0 message_type 如下註 8 0 或 1 1 0 presentation_id 如下註 9 ASCII 字串 100 000 no_contents 如下註 10 [0~9] 數字串 無 無 contentxid 如下註 11 ASCII 字串 100 無 contentxtype 如下註 12 ASCII 字串 50 無 contentx 如下註 13 URL 編碼字串 無 無 回應 Response <html> <header></header> <body> {return code <br> {description <br> </body> </html> Return Description 失敗原因 處理方式 Code 0 一個數字形的 message id, 此 message id 在查詢訊息狀態時需要傳給 MMS Gateway 此筆訊息已成功接收, MMS Gateway 將會為您發送此訊息到所有的 to address 10

1 一個 (message id) 之後接著多個無法為您傳送到部分的 to 請參考 fail reason 重送正 (to address:fail reason), 視您 address, 最常見的原因有確的 to address 的 MMS 訊息中有幾個失敗的 to 您填的 to address type address 而定 未列在此處的 to 不是 PLMN, 或是您的帳 address 表示已成功接收, 其訊號無此權限 息代號為 message id -5 Content Size 過大 MMS 所含 Content Size 請刪減 content 內容 每 過大 (content size 總合超支手機可接受的 MMS 過 capacity 限制 ) size 並不一定, 建議至大不 要超過 100K,Gateway 所檢查的 content size 並不是針對收方手機的能力, 而只是一個概括的檢查 -6 Prepaid System Error 預付式系統發生錯誤 企客預付式系統或放心講客戶扣款失敗, 可能原因為餘額不足或預付式系統介 接異常 11

-7 To_addrs Exceed 受話號碼 (to_addr) 超過限請修正每次 request 至多 制, 目前限制 20 組 帶 20 組號碼 ( 號碼間用逗 號隔開 ), 分多次傳送 -8 Can't determine customer type 系統無法查詢客戶屬性 MMS Gateway 無法查詢客戶屬性 -9 Can't determine msisdn type 系統無法查詢計費 / 受訊號 MMS Gateway 無法查詢 碼之網內 / 外資訊 計費 / 受訊號碼之網內 / 外 資訊 -10 Service not provisioned in prepaid system 系統禁止此特碼使用預付式扣款服務 MMS Gateway 禁止此特碼使用預付式扣款服務 若有疑問請洽行通特碼 PM 人員 -41 Permission Denied 您的帳號無此權限 請不要再發送這筆訊息, 若您需要提昇權限, 請聯絡服務人員 註 1. from address : 這通 MMS 訊息的發送者的號碼, 此欄位不包含 /TYPE=PLMN 字串 由於此欄位關係到 收費對象, 請謹慎填寫 12

註 2. 註 3. 註 4. 註 5. 註 6. 註 7. 註 8. from address type : 發送者號碼 (from address) 的種類,MMS Server 可以接受兩種發送者號碼, 當此欄為 0 時代表 from address 是一個手機門號, 當此欄為 1 的時候代表 from address 是一個 emome 代碼 to address : 這通 MMS 訊息的發送對象, 此欄位不包含 /TYPE=PLMN 字串, 可以接受 09 開頭 886 開頭 +886 開頭三種格式 ( 皆指國內台灣門號 ) 若您有足夠的權限, 此欄可以接受其他電信業者的門號 此欄可以包含一個以上的門號, 以 ASCII 的逗號 (,) 隔開, 但至多不超過 100 個門號, 每一個 to address 都要記一通 MMS 傳送費用 to address type : 發送對象號碼 (to address) 的種類,MMS Gateway 可以接受兩種發送對象號碼, 當此欄為 0 時代表 to address 是一個手機門號, 當此欄為 1 的時候代表 to address 是一個 emome 代碼 為保持回溯相容, 若沒有傳送這個參數, 系統自動內定此參數為 0( 發送對象為手機門號 ) 請注意若此參數為 1 時 ( 發送對象為 emome 代碼 ),to address 只能接受一個號碼, 否則系統會回應參數錯誤 cp id : 若您是為其他 content provider 代發, 請在此欄填入 content provider 的代碼, 若否, 請在此欄填入 000 subject : 這通 MMS 訊息的 subject, 以 UTF-8 作為編碼方式 ( 可含有中文 ), 不可為空字串 以 java 程式為例, 即 URLEncoder.encode(strSubject.getBytes( UTF-8 )) expire offset : 這通 MMS 訊息何時 ( 幾分鐘後 ) 會失效 MMS 訊息失效的時間以此訊息進入 MMS Gateway 的時間為準, 以分鐘為單位 若此欄位為 0, 則使用 MMSC 的預設值 message type : 這通 MMS 訊息的訊息種類, 如果該訊息為 multipart mixed, 此欄設為 0 ;如果該訊息為 multipartrelated ( 含 SMIL), 此欄設為 1 NOTE: 要在 Android 手機達到最多相容性, 建議使用 SMIL, 即其值為 1, 可不需另指定 presentation id 及 content SMIL 內容 13

註 9. 註 10. 註 11. 註 12. 註 13. presentation id : 若這一通 MMS Message 是一個包含有 SMIL 的 message 的話, 請在這一欄填入 SMIL content 的 content id 若 server 沒有收到這個參數, 則這個參數會被設為 "<0000>" 這個字串 number of contents : 這通 MMS 訊息包含的 content 數量 contentxid : X 為一個數字, 第一個 content 為 content0id, 第二個為 content1id, 其餘類推 contentxid 的個數必須符合 number of content( 也就是說要有 content0id~content(number of content-1)id) 此 content id 為一個字串, 主要用途是在 message type 為 multipart related 時作為 SMIL presentation 的參考對象 contentxtype : X 為一個數字, 第一個 content 為 content0type, 第二個為 content1type, 其餘類推 ContentXtype 的個數必須符合 number of content( 也就是說要有 content0type~content(number of content-1)type) 此參數指出 content 的格式, 例如 text/plain 等 contentx : X 為一個數字, 第一個 content 為 content0, 第二個為 content1, 其餘類推 ContentX 的個數必須符合 number of content ( 也就是說要有 content0~content(number of content-1)) 若該 content 的 content type 為 text/* 的話, 請用 UTF-8 編碼送出 ; 即以 java 程式為例, 即 URLEncoder. encode(strtext.getbytes( UTF-8 )) 其他圖檔及聲音檔請直接讀出 byte[] 資料, 再經由 URLEncoder.encode() 送出 可參考後述 5.2 及 5.3 章節之 JSP 傳送 MMS 程式範例說明 14

3.4 查詢 MMS 命令 1 (query) 命令說明 要求 URL Path https://imsp.emome.net:4443/imsp/mms/servlet/query (SSL) HTTP Method POST ( 不支援 GET) Parameters 名稱 描述 資料型態 資料長度限制 初值設定 account 帳號 ASCII 字串 10 無 password 密碼 ASCII 字串 10 無 message_id 如下註 1 [0~9] 數字串 10 無 to_address_type 如下註 2 0 或 1 1 0 to_address [0~9] 數字串 35 無 備註 回應 <html> <header></header> <body> {return code <br> {description <br> </body> </html> Return Code Description 失敗原因 處理方式 15

0 Initial state MMS Server 已成功接收此筆訊息並處理中 1 Submitting MMS Server 正在轉 送此筆訊息 2 Submitted to MMSC 此筆訊息已成功轉送 至 MMSC 3 Submitting failed 此筆訊息無法轉送至 MMSC 4 Message pending 此筆訊息正等待接收 端接收 5 Message delivered 此筆訊息已成功發送 至接收端 6 Message expired 此筆訊息無法在時間 內發送至接收端 7 Message rejected 接收端拒絕接受此筆 訊息 視為發訊中 視為發訊中 視為發訊中 視為發訊失敗 大部份情況為受訊端手機未啟用 GPRS 上網功能等, 使得無法傳送 MMS 至受訊端 視為發訊中 視為發訊成功 視為發訊失敗 視為發訊失敗 16

8 Unknown state 此筆訊息狀態不明 視為無法得知 -31 Message not found 無法找到您要找的訊息 請確定您所傳送的 Message id 和 to address 是否正確 註 1. 註 2. message id : MMS message 的 message id, 由 MMS Server 在成功的 MMS 傳送請求時傳回 to address : MMS message 的 to address, 只包含 address, 不包含 /TYPE=PLMN 等字串 to address type : 發送對象號碼 (to address) 的種類,MMS Gateay 可以接受兩種發送對象號碼, 當此欄為 0 時代表 to address 是一個手機門號, 當此欄為 1 的時候代表 to address 是一個 emome 代碼 為保持回溯相容, 若沒有傳送這個參數, 系統自動內定此參數為 0 ( 發送對象為手機門號 ) 3.5 查詢 MMS 命令 2 (query_batch) 命令說明 備註 要求 URL Path https://imsp.emome.net:4443/imsp/mms/servlet/query_batch (SSL) 與 query 不同的是, HTTP Method POST ( 不支援 GET) query_batch 會傳回此 msgid 的所有訊息 Parameters 名稱 描述 資料型態 資料長度限制 初值設定 狀態 ( 如果受訊是多 17

account 帳號 ASCII 字串 10 無 方 ),query_batch 不 password 密碼 ASCII 字串 10 無 適合用在 Emome 平 message_id 如下註 1 [0~9] 數字串 10 無 台 回應 <html> <header></header> <body> {return code <br> {description <br> </body> </html> Return Code Description 失敗原因 處理方式 > 0 $msisdn,$status,$desc;{$msisdn, 成功查詢到 n 筆資料 如註 2. -31 Message not found 無法找到您要找的訊請確定您所傳送的 息 Message id 是否正確 註 1. 註 2. message id : MMS message 的 message id, 由 MMS Gateway 在成功的 MMS 傳送請求時傳回 to address : MMS message 的 to address, 只包含 address, 不包含 /TYPE=PLMN 等字串 Return code 表示總共查詢到幾筆資料, 查到的資料會以 msisdn,status,desc 這樣的 pattern 顯示, 二筆資料間以 ; 隔開,status 及 desc 可參考 3.4 節 底下為一 example, 表成功查詢到兩筆資料 : <html><header></header><body>2<br>0934444444,7,message rejected;0937044059,2, Submitted to MMSC <br> </body></html> 18

3.6 擷取 MMS 命令 (get_mime) 命令說明 備註 要求 URL Path https://imsp.emome.net:4443/imsp/mms/servlet/get_mime (SSL, 註 ) 從 Http Response HTTP Method POST ( 不支援 GET) Parameters 名稱 描述 資料型態 資料長度限制 初值設定 account 帳號 ASCII 字串 10 無 password 密碼 ASCII 字串 10 無 回應 <html> <header></header> <body> {return code <br> {description <br> </body> </html> Return Description 失敗原因 處理方式 Code code 檢查是否有未收之 MMS 若有屬於您的帳號的 mms 的話,http response code 為 200,content 則為一 19

1 No MO message found 沒有您的 MMS 訊息 個 binary 的 eaif /mime packet 若沒有屬於您的帳號的 mms 的話或是發生了其他的錯誤的話, http response code 為 202 註 : get_mime 所傳回的是符合 MIME (Multipurpose Internet Mail Extensions) 格式之 MMS 封包,MIME 有 RFC 標準,decoder 取得也較方便, 將 Server 所回傳之封包存成 ".eml" 的檔案即可使用 mail tools ( 如 outlook express) 瀏覽 MMS 內容, 相當方便, 在 附錄一 裡有更多的說明, 網站上也有相關的 Java 程式範可參考, 其網址為 http://imsp.emome.net:8008/imsp_home/mms_cp_help.htm 20

4. 其它說明 4.1 關於 MMS 訊息 若發送方號碼帶的是 emome subscriber number (EMOME 平台專用 ) 的話, 請記得把 from address type 設為 1, 否則會造成錯誤 若您使用的是 send_eaif command 的話, 請在 EAIF packet 裡的 from address 欄填入 emome subscriber number, 並把 address type 設為 PLMN, 和 semd_mms command 一樣, 請記得把 from address type 設為 1 在 3GPP 的 standard 中並沒有規範手機必須支援的聲音格式, 經過實測, 各家手機的支援格式也各不相同 發送之前請自行針對設定的手機作測試, 以免得到無法預期的結果 4.2 其他注意事項 IMSP MMS 的功能為傳送 MMS 訊息到指定的門號上, 沒有包含網頁展示等其他功能 基於 http protocol 傳送上的需要, 所有的 parameter 必須以 x-www-form-urlencoded 方式編碼, 詳細編碼方式請參閱 http://www.w3.org/tr/html4/, 或參考說明網頁上的 Java 範例 請注意 parameter name 全部為小寫 21

4.3 常見問題集 A. 無法 login? 請確定下列事項 :1. 是否由註冊的 IP address 連接, 若否的話,server 會擋掉連線 2. Parameter 參數名稱有區分大小寫 3. Parameter 參數值不包含大括號 ( 上面說明的大括號只是為了清楚表達用 ) 4. 用正確的帳號和密碼連接 B. 收到 http packet error 的錯誤訊息? server 收到一個錯誤編碼的 http packet, 最常見的原因是收到 %7 之類的字串 ( 正確字串應該是 %07),URL encoded 編碼 請參考在 sample code 裡的 String UrlEncode(byte[]) 函式 C. 收到 eaif packet error 的錯誤訊息? 要不是 server 沒有收到 eaif_packet 這個 parameter, 就是 server 收到了一個無法解譯的 eaif packet D. send_mms request 的 presentation id 是作什麼的? 若這一通 MMS Message 是一個包含有 SMIL 的 message 的話, 請在這一欄填入 SMIL content 的 content id 若 server 沒有收到這個參數, 則這個參數會被設為 "<0000>" 這個字串 經過測試某些手機如 Nokia 7650 會自動尋找 SMIL content, 而某些手機如 Sharp i98 則需要這個參數來指明 SMIL content 為了安全起見, 建議您不管手機型和為何, 都指 22

23 定這個參數, 以得到最大的相容性

5. 附錄 5.1 GET_MIME 之 MMS 規格說明 請參考 Java 範例程式中的 "example_mime.eml" (https://imsp.emome.net:4443/imsp_home/mms_cp_help.htm 範例程式 中可取得 ), 用文字編輯模式開啟 Date: 2005/03/08 13:52:53 CST // 手機上載 MMS 的時間 To: 44441 From: 0000013969 // 上載的手機號碼 /Emome-id < 註一 > Msgid: 96625 // message id, 檔案名稱會以此命名 Subject: =?utf-8?b?6zad5ywj5lia6jmf?= // 閃光一號, 編碼規格詳見 < 註二 > Content_number: 3 Mime-version: 1.0 Content-type: multipart/mixed; boundary="----=_cht_mms_boundary.96625" ------=_CHT_MMS_BOUNDARY.96625 // boundary Content-type: application/smil Content-transfer-encoding: base64 // content 一律使用 base64 Content-disposition: attachment; filename="96625_0.smil" Content-id: "<t0> 24 PHNtaWw+CiA8aGVhZD4KICA8bGF5b3V0PgogICA8cm9vdC1sYXlvdXQgaGVpZ2h0PSIxMjciIHdp ZHRoPSIxMTEiLz4KICAgPHJlZ2lvbiBpZD0iSW1hZ2UiIHRvcD0iNTAlIiBsZWZ0PSIwJSIgaGVp Z2h0PSI1MCUiIHdpZHRoPSIxMDAlIi8+CiAgIDxyZWdpb24gaWQ9IlRleHQiIHRvcD0iMCUiIGxl ZnQ9IjAlIiBoZWlnaHQ9IjUwJSIgd2lkdGg9IjEwMCUiLz4KICA8L2xheW91dD4KIDwvaGVhZD4K CTxib2R5PgoJCTxwYXIgZ.( 以下略 )

------=_CHT_MMS_BOUNDARY.96625 Content-type: text/plain Content-transfer-encoding: base64 Content-disposition: attachment; filename="96625_1.txt" Content-id: t1.txt 6YCZ5piv6ZaD5YWJ5LiA6Jmf 這是閃光一號 (utf-8 編碼,base64) < 註三 > ------=_CHT_MMS_BOUNDARY.96625 Content-type: image/jpeg Content-transfer-encoding: base64 Content-disposition: attachment; filename="96625_2.jpg" Content-id: picture014.jpg /9j/4QEQRXhpZgAASUkqAAgAAAAGABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAA AAAgAAADIBAgAUAAAAZgAAABMCAwABAAAAAQAAAGmHBAABAAAAegAAAAAAAABIAAA AAQAAAEgAAAABAAAAMjAwNTowMzowODoxMzo0OTo0NQAIAACQBwAEAAAAMDIxMAOQAgA UAAAA4AAAAASQAgAUAAAA9AAAAAGRBwAEAAAAAQIDAACgBwAEAAAAMDEwMAGgAwAB AAAAAQAAAAKgAwABAAAA4AEAAAOgAwABAAAAgAIAAAAAAAAyMDA1OjAzOjA4OjEzOjQ5Oj Q1ADIwMDU6MDM6MDg6MTM6NDk6NDUA/9sAhAAGBAUFBQQGBQUFBwYGBwkPCgkICAkSDQ4 LDxYTFxcVExUVG (.. 以下略 ) ------=_CHT_MMS_BOUNDARY.96625-- // 結尾的 boundary 25

註 1. From 有兩種表示方法, 一為手機號碼 ( 如 0937xxxxxx), 一為 emome-subid ( 如 000300xxxx), 會收到手機號碼或是 emome-subid 是可設定的, 若發現收到的種類不是預期希望, 請聯絡行通服務人員進行設定 註 2. SUBJECT 編碼方式符合 RFC 2047 標準, 即 'encoded-word', 舉 "=?utf-8?b?6zad5ywj5lia6jmf?=" 為例, 一開始的 "=?" 及結尾的 "?=" 為 encoded-word 的開始及結尾, 然後兩個 "?" 將剩餘部份切成三部份, 第一部份指明文字編碼方式, 即 "utf-8", 第二部份的 "B" 表示 Base64, 第三部份即真正的內文部份 MMS 的 subject 一律以 UTF-8 及 Base64 編碼 註 3. TEXT 皆以 UTF-8 編碼, 包括 SUBJECT 及內文部份 (UTF-8 編碼後再以 Base64 編碼 ) MIME 格式可參考 RFC 2045 RFC 2046 RFC 2047, 手動解碼時, 請注意換行為 CRLF,ASCII 分別為 13 10 5.2 JSP 傳送 Mixed MMS 程式範例 以下以 jsp 檔為例, 說明如何經由 HTTPS 傳送 Mixed MMS 訊息, 即類似 email 附加檔功能 <%@ page contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <%@ page import="java.io.bufferedreader,java.io.inputstreamreader,java.io.randomaccessfile"%> 26

<%@ page import="java.net.url,java.net.httpurlconnection,java.io.dataoutputstream" import="java.io.fileinputstream,java.io.ioexception" import="java.net.urlencoder"%> <%@ page import="javax.net.ssl.hostnameverifier,javax.net.ssl.httpsurlconnection" import="javax.net.ssl.sslcontext,javax.net.ssl.trustmanager"%> <%@ page import="javax.net.ssl.sslpeerunverifiedexception,javax.net.ssl.sslsession" import="javax.net.ssl.x509trustmanager"%> <%@ page import="java.security.securerandom,java.security.cert.certificate" import="java.security.cert.x509certificate"%> <%! private String readtextfile(string strfilepath) { BufferedReader reader = null; StringBuffer sb = new StringBuffer(); try { String strfilecharset = "UTF-8"; // 文字檔請用 UTF-8 編碼儲存 reader = new BufferedReader(new InputStreamReader(new FileInputStream(strFilePath), strfilecharset)); 27

int c; while ((c = reader.read())!= -1) { sb.append((char) c); catch (Exception e) { e.printstacktrace(); finally { if (reader!= null) { try { reader.close(); catch (Exception e) { reader = null; return sb.tostring(); private byte[] ReadBinaryContentFile(String strfilepath) { RandomAccessFile rf = null; 28

byte[] buf = null; try { rf = new RandomAccessFile(strFilePath, "r"); int nfilesize = (int) rf.length(); buf = new byte[nfilesize]; for (int i = 0; i < nfilesize; i++) { buf[i] = rf.readbyte(); catch (Exception e) { e.printstacktrace(); finally { if (rf!= null) { try { rf.close(); catch (Exception e) { rf = null; 29

return buf; // 二位元格式 private TrustManager[] get_trust_mgr() { TrustManager[] certs = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getacceptedissuers() { return null; public void checkclienttrusted(x509certificate[] certs, String t) { ; public void checkservertrusted(x509certificate[] certs, String t) { return certs; // HTTPS POST request private void sendhttpsslpost(string strurl, String strparameters) throws Exception { System.err.println("\n=============== HTTP SSL POST TEST=========================="); 30

// Create a context that doesn't check certificates. SSLContext ssl_ctx = SSLContext.getInstance("TLS"); TrustManager[] trust_mgr = get_trust_mgr(); ssl_ctx.init(null, // key manager trust_mgr, // trust manager new SecureRandom()); // random number generator HttpsURLConnection.setDefaultSSLSocketFactory(ssl_ctx.getSocketFactory()); System.out.println("\nSending SSL 'POST' request to URL: \n" + strurl); System.out.println("POST Parameters (length=" + strparameters.length() + "): " + strparameters); URL url = new URL(strUrl); HttpsURLConnection https = (HttpsURLConnection) url.openconnection(); https.sethostnameverifier(new HostnameVerifier() { public boolean verify(string host, SSLSession sess) { if (host.equals("imsp.emome.net")) { return true; else { return false; 31

); //add request header https.setrequestmethod("post"); // Send post request https.setdooutput(true); DataOutputStream wr = new DataOutputStream(https.getOutputStream()); wr.writebytes(strparameters); wr.flush(); wr.close(); int responsecode = https.getresponsecode(); System.out.println("Response Code: " + responsecode); BufferedReader isr = new BufferedReader( String inputline; new InputStreamReader(https.getInputStream()/*, "UTF-8"*/)); 32

StringBuffer response = new StringBuffer(); while ((inputline = isr.readline())!= null) { response.append(inputline); isr.close(); https.disconnect(); %> System.out.println("SSL POST Result: " + response.tostring()); <% String account = "1xxxx"; // 請填您的特碼帳號 String password = "xxxxxxxx"; // 請填您的特碼密碼 String cp_id = "xxx"; // 請填您的 CP_ID 資訊 ( 內定 000) String expire_offset = "0"; // 請填訊息重送期限 String from_addr = "09xxxxxxxx"; // 請填您的發訊方號碼 String from_addr_type = "0"; String to_addr = "09xxxxxxxx"; // 請填您的受訊方號瑪 String to_addr_type = "0"; 33

byte[] basubject = new String(" 含兩段文字 及一張圖 -SMIL").getBytes("UTF-8"); String strsubject = new String(baSubject, "ISO-8859-1"); String message_type = "0"; String presentation_id = ""; String content0id = "T0"; String content0type = "text/plain"; byte[] ba0 = new String(" 此為要傳送的文字內容 ").getbytes("utf-8"); String strcontent0 = new String(ba0, "ISO-8859-1"); String content1id = "T1"; String content1type = "image/jpeg"; byte[] ba1 = ReadBinaryContentFile("C:\\myMMS.jpg"); // 要傳送的圖形 String strcontent1 = new String(ba1, "ISO-8859-1"); String content2id = "T2"; String content2type = "text/plain"; byte[] ba2 = new String(" 上圖為包括一張圖 ").getbytes("utf-8"); String strcontent2 = new String(ba2, "ISO-8859-1"); int no_contents = 3; 34

try { StringBuffer sbpostdata = new StringBuffer(); sbpostdata.append("account=" + account); sbpostdata.append("&password=" + password); sbpostdata.append("&cp_id=" + cp_id); sbpostdata.append("&expire_offset=" + expire_offset); sbpostdata.append("&from_addr=" + from_addr); sbpostdata.append("&from_addr_type=" + from_addr_type); sbpostdata.append("&message_type=" + message_type); sbpostdata.append("&to_addr=" + to_addr); sbpostdata.append("&to_addr_type=" + to_addr_type); sbpostdata.append("&subject=" + URLEncoder.encode(strSubject, "ISO-8859-1")); sbpostdata.append("&presentation_id=" + presentation_id); sbpostdata.append("&no_contents=" + Integer.toString(no_contents)); sbpostdata.append("&content0id=" + content0id); sbpostdata.append("&content0type=" + content0type); sbpostdata.append("&content0=" + URLEncoder.encode(strContent0, "ISO-8859-1")); sbpostdata.append("&content1id=" + content1id); 35

sbpostdata.append("&content1type=" + content1type); sbpostdata.append("&content1=" + URLEncoder.encode(strContent1, "ISO-8859-1")); sbpostdata.append("&content2id=" + content2id); sbpostdata.append("&content2type=" + content2type); sbpostdata.append("&content2=" + URLEncoder.encode(strContent2, "ISO-8859-1")); %> sendhttpsslpost("https://imsp.emome.net:4443/imsp/mms/servlet/send_mms", sbpostdata.tostring()); catch (Exception e) { e.printstacktrace(); 5.3 JSP 傳送 SMIL MMS 程式範例 類似上述 5.2 章節, 除了下列程式異動 及補充之外, 使可傳送 SMIL 訊息, 如 : 依一或多個版面顯示或播放訊息 : String message_type = "1"; 36

String presentation_id = "T3"; // 若無此客制化版面需求, 可不設定該值, 交由手機自行處理 SMIL MMS 顯示 : String content3id = "T3"; // 若無此客制化版面需求, 可不設定這些資訊 String content3type = "application/smil"; byte[] ba3 = new String("<smil><head></head><body><par><text src=\"t0\"/><img src=\"t1\"/><text src=\"t2\"/></par></body></smil>").getbytes("utf-8"); String strcontent3 = new String(ba3, "ISO-8859-1"); int no_contents = 4; // 若無此客制化版面需求, 請設 3 表示不包括 content3 資訊 try { : if (no_contents == 4) { sbpostdata.append("&content3id=" + content3id); // 若無此客制化版面需求, 可不設定這些資訊 sbpostdata.append("&content3type=" + content3type); //( 同上 ) sbpostdata.append("&content3=" + URLEncoder.encode(strContent3, "ISO-8859-1")); //( 同上 ) sendhttpsslpost("https://imsp.emome.net:4443/imsp/mms/servlet/send_mms", sbpostdata.tostring()); 37

catch (Exception e) { e.printstacktrace(); 38