【1】幾個術語
英文縮寫 | 英文全稱 | 說明 |
ISMG | Intenet Short Message Gateway | 網際網路短信網關 |
DSMP | Data Service Manage Platform | 資料業務管理平台 |
SMPP | Short Message Peer to Peer | 短消息點對點協定 |
CMPP | China Mobile Peer to Peer | 中國移動點對點協定 |
SMSC | Short Message Service Center | 短消息中心 |
GNS | Gateway Name Server | 網關名稱伺服器(彙接網關) |
SP | Service Provider | 業務提供者 |
ISMG_Id
網關代碼:0XYZ01~0XYZ99,其中XYZ為省會區号,位數不足時左補零,如北京編号為1的網關代碼為001001,江西編号為1的網關代碼為079101,依此類推。
SP_Id
SP的企業代碼:網絡中SP位址和身份的辨別、位址翻譯、計費、結算等均以企業代碼為依據。企業代碼以數字表示,共6位,從“9XY000”至“9XY999”,其中“XY”為各移動公司代碼。
SP_Code
SP的服務代碼:服務代碼是在使用短信方式的上行類業務中,提供給使用者使用的服務提供商代碼。服務代碼以數字表示,全國業務服務代碼長度為4位即“1000”-“9999”;本地業務服務代碼長度統一為5位,即“01000”-“09999”。
信産部對新的SP的服務代碼配置設定提出了新的要求,要求以“1061”-“1069”作為字首,目前中國移動進行了如下配置設定:1062—用于省内SP服務代碼,1066—用于全國SP服務代碼,其它号段保留。
Service_Id
SP的業務類型,數字、字母和符号的組合,由SP自定,如圖檔傳情可定為TPCQ,股票查詢可定義為11。
資料類型定義
資料類型 | 說明 |
Unsigned Integer | 無符号整數 |
Integer | 整數,可為正整數、負整數或零 |
Octet String | 定長字元串,位數不足時,如果左補0則補ASCII表示的零以填充, 如果右補0則補二進制的零以表示字元串的結束符 |
【2】網絡結構拓撲
如下圖所示:
網際網路短信網關(ISMG)是業務提供商(SP)與移動網内短信中心之間的中介實體,網際網路短信網關一方面負責接收SP發送給移動使用者的資訊和送出給短信中心。另一方面,移動使用者點播SP業務的資訊将由短信中心通過網際網路短信網關發給SP。另外,為了減輕短信中心的信令負荷,網際網路短信網關還應根據路由原則将SP送出的資訊轉發到相應的網際網路短信網關。網際網路短信網關通過向彙接網關(GNS)查詢的方式獲得網關間的轉發路由資訊。
另外,ISMG還必須與資料業務管理平台DSMP進行連接配接,在業務流程中對使用者、業務以及定購關系等進行鑒權并對業務進行批價。
這裡業務提供商可以了解為就是“我們”。
【3】CMPP協定
① CMPP協定主要提供以下兩類業務操作
(1)短信發送(Short Message Mobile Originate,SM MO)
(2)短信接收(Short Message Mobile Terminated,SM MT)
② 協定棧
CMPP協定以TCP/IP作為底層通信承載,具體結構如圖所示:
③ 通信方式
各網元之間共有兩種連接配接方式:長連接配接和短連接配接。所謂長連接配接,指在一個TCP連接配接上可以連續發送多個資料包,在TCP連接配接保持期間,如果沒有資料包發送,需要雙方發鍊路檢測包以維持此連接配接。短連接配接是指通信雙方有資料互動時,就建立一個TCP連接配接,資料發送完成後,則斷開此TCP連接配接,即每次TCP連接配接隻完成一對CMPP消息的發送。
現階段,要求ISMG之間必須采用長連接配接的通信方式,建議SP與ISMG之間采用長連接配接的通信方式。
- 長連接配接
通信雙方以客戶-伺服器方式建立TCP連接配接,用于雙方資訊的互相送出。當信道上沒有資料傳輸時,通信雙方應每隔時間C發送鍊路檢測包以維持此連接配接,當鍊路檢測包發出超過時間T後未收到響應,應立即再發送鍊路檢測包,再連續發送N-1次後仍未得到響應則斷開此連接配接。
參數C、T、N原則上應可配置,現階段建議取值為:C=3分鐘,T=60秒,N=3。
網關與SP之間、網關之間的消息發送後等待T秒後未收到響應,應立即重發,再連續發送N-1次後仍未得到響應則停發。現階段建議取值為:T=60秒,N=3。
消息采用并發方式發送,加以滑動視窗流量控制,視窗大小參數W可配置,現階段建議為16,即接收方在應答前一次收到的消息最多不超過16條。
長連接配接的操作流程舉例如圖所示:
- 短連接配接
通信雙方以客戶-伺服器方式建立TCP連接配接,應答與請求在同一個連接配接中完成。系統采用客戶/伺服器模式,操作以用戶端驅動方式發起連接配接請求,完成一次操作後關閉此連接配接。
網關與SP之間、網關之間的消息發送後等待T秒後未收到響應,應立即重發,再連續發送N-1次後仍未得到響應則停發。現階段建議取值為:T=60秒,N=3。
短連接配接的操作流程舉例如圖所示:
④ 互動過程中的應答方式
在SP與ISMG之間、SMSC與ISMG之間及ISMG之間的互動過程中均采用異步方式,即任一個網元在收到請求消息後應立即回送響應消息。
如下圖所示:
【4】CMPP Message
① 消息結構
項目 | 說明 |
Message Header | 消息頭(所有消息公共標頭) |
Message Body | 消息體 |
這裡需要注意,消息頭是所有消息公共標頭。也就是所有消息都是消息頭+消息體。消息頭結構在這裡定義說明了,下面的消息定義皆為消息體結構定義。
② 消息頭格式(Message Header)
字段名 | 位元組數 | 類型 | 描述 |
Total_Length | 4 | Unsigned Integer | 消息總長度(含消息頭及消息體) |
Command_Id | 4 | Unsigned Integer | 指令或響應類型 |
Sequence_Id | 4 | Unsigned Integer | 消息流水号,順序累加,步長為1,循環使用(一對請求和應答消息的流水号必須相同) |
以下為業務提供商(SP)與網際網路短信網關(ISMG)間的消息定義。
③SP請求連接配接到ISMG(CMPP_CONNECT)操作
SP為用戶端,向作為伺服器端的ISMG發起連接配接請求,在通過身份驗證之後SP與ISMG之間方可進行資料傳輸。
CMPP_CONNECT操作的目的是SP向ISMG注冊作為一個合法SP身份,若注冊成功後即建立了應用層的連接配接,此後SP可以通過此ISMG接收和發送短信。
ISMG以CMPP_CONNECT_RESP消息響應SP的請求。
3.1 CMPP_CONNECT消息定義(SP->ISMG)
字段名 | 位元組數 | 屬性 | 描述 |
Source_Addr | 6 | Octet String | 源位址,此處為SP_Id,即SP的企業代碼。 |
AuthenticatorSource | 16 | Octet String | 用于鑒别源位址。其值通過單向MD5 hash計算得出,表示如下:AuthenticatorSource =MD5(Source_Addr+9 位元組的0 +shared secret+timestamp) Shared secret 由中國移動與源位址實體事先商定,timestamp格式為:MMDDHHMMSS,即月日時分秒,10位。 |
Version | 1 | Unsigned Integer | 雙方協商的版本号(高位4bit表示主版本号,低位4bit表示次版本号),對于3.0的版本,高4bit為3,低4位為0 |
Timestamp | 4 | Unsigned Integer | 時間戳的明文,由用戶端産生,格式為MMDDHHMMSS,即月日時分秒,10位數字的整型,右對齊 。 |
3.2 CMPP_CONNECT_RESP消息定義(ISMG->SP)
字段名 | 位元組數 | 屬性 | 描述 |
Status | 4 | Unsigned Integer | 狀态 0:正确 1:消息結構錯 2:非法源位址 3:認證錯 4:版本太高 5~ :其他錯誤 |
AuthenticatorISMG | 16 | Octet String | ISMG認證碼,用于鑒别ISMG。 其值通過單向MD5 hash計算得出,表示如下:AuthenticatorISMG=MD5(Status+AuthenticatorSource+shared secret), Shared secret 由中國移動與源位址實體事先商定,AuthenticatorSource為源位址實體發送給ISMG的對應消息CMPP_Connect中的值。 認證出錯時,此項為空。 |
Version | 1 | Unsigned Integer | 伺服器支援的最高版本号,對于3.0的版本, 高4bit為3,低4位為0 |
④SP或ISMG請求拆除連接配接(CMPP_TERMINATE)操作
CMPP_TERMINATE操作的目的是SP或ISMG基于某些原因決定拆除目前的應用層連接配接而發起的操作。此操作完成後SP與ISMG之間的應用層連接配接被釋放,此後SP若再要與ISMG通信時應發起CMPP_CONNECT操作。
ISMG或SP以CMPP_TERMINATE_RESP消息響應請求。
- CMPP_TERMINATE消息定義(SP->ISMG或ISMG -> SP)無消息體。
- CMPP_TERMINATE_RESP消息定義(SP->ISMG或ISMG -> SP)無消息體。
⑤ SP向ISMG送出短信(CMPP_SUBMIT)操作
CMPP_SUBMIT操作的目的是SP在與ISMG建立應用層連接配接後向ISMG送出短信。
ISMG以CMPP_SUBMIT_RESP消息響應。
5.1CMPP_SUBMIT消息定義(SP->ISMG)
字段名 | 位元組數 | 屬性 | 描述 |
Msg_Id | 8 | Unsigned Integer | 資訊辨別。 |
Pk_total | 1 | Unsigned Integer | 相同Msg_Id的資訊總條數,從1開始。 |
Pk_number | 1 | Unsigned Integer | 相同Msg_Id的資訊序号,從1開始。 |
Registered_Delivery | 1 | Unsigned Integer | 是否要求傳回狀态确認報告: 0:不需要;1:需要。 |
Msg_level | 1 | Unsigned Integer | 資訊級别。 |
Service_Id | 10 | Octet String | 業務辨別,是數字、字母和符号的組合。 |
Fee_UserType | 1 | Unsigned Integer | 計費使用者類型字段: 0:對目的終端MSISDN計費; 1:對源終端MSISDN計費; 2:對SP計費; 3:表示本字段無效,對誰計費參見Fee_terminal_Id字段。 |
Fee_terminal_Id | 32 | Octet String | 被計費使用者的号碼,當Fee_UserType為3時該值有效,當Fee_UserType為0、1、2時該值無意義。 |
Fee_terminal_type | 1 | Unsigned Integer | 被計費使用者的号碼類型, 0:真實号碼;1:僞碼。 |
TP_pId | 1 | Unsigned Integer | GSM協定類型。詳細是解釋請參考GSM03.40中的9.2.3.9。 |
TP_udhi | 1 | Unsigned Integer | GSM協定類型。詳細是解釋請參考GSM03.40中的9.2.3.23,僅使用1位,右對齊。 |
Msg_Fmt | 1 | Unsigned Integer | 資訊格式:0:ASCII串;3:短信寫卡操作;4:二進制資訊;8:UCS2編碼; 15:含GB漢字。。。。。。 |
Msg_src | 6 | Octet String | 資訊内容來源(SP_Id)。 |
FeeType | 2 | Octet String | 資費類别:01:對“計費使用者号碼”免費; 02:對“計費使用者号碼”按條計資訊費; 03:對“計費使用者号碼”按包月收取資訊費。 |
FeeCode | 6 | Octet String | 資費(以分為機關)。 |
ValId_Time | 17 | Octet String | 存活有效期,格式遵循SMPP3.3協定。 |
At_Time | 17 | Octet String | 定時發送時間,格式遵循SMPP3.3協定。 |
Src_Id | 21 | Octet String | 源号碼。SP的服務代碼或字首為服務代碼的長号碼, 網關将該号碼完整的填到SMPP協定Submit_SM消息相應的source_addr字段,該号碼最終在使用者手機上顯示為短消息的主叫号碼。 |
DestUsr_tl | 1 | Unsigned Integer | 接收資訊的使用者數量(小于100個使用者)。 |
Dest_terminal_Id | 32*DestUsr_tl | Octet String | 接收短信的MSISDN号碼。 |
Dest_terminal_type | 1 | Unsigned Integer | 接收短信的使用者的号碼類型, 0:真實号碼;1:僞碼。 |
Msg_Length | 1 | Unsigned Integer | 資訊長度(Msg_Fmt值為0時:<160個位元組;其它<=140個位元組),取值大于或等于0。 |
Msg_Content | Msg_length | Octet String | 資訊内容 |
LinkID | 20 | Octet String | 點播業務使用的LinkID,非點播類業務的MT流程不使用該字段。 |
5.2 CMPP_SUBMIT_RESP消息定義(ISMG ->SP)
字段名 | 位元組數 | 屬性 | 描述 |
Msg_Id | 8 | Unsigned Integer | 資訊辨別,生成算法如下:采用64位(8位元組)的整數: (1)時間(格式為MMDDHHMMSS,即月日時分秒): , 其中 :月份的二進制表示; :日的二進制表示; :小時的二進制表示; :分的二進制表示; :秒的二進制表示; (2)短信網關代碼: ,把短信網關的代碼轉換為整數填寫到該字段中; (3)序列号: ,順序增加,步長為1,循環使用。各部分如不能填滿,左補零,右對齊。(SP根據請求和應答消息的Sequence_Id一緻性就可得到CMPP_Submit消息的Msg_Id) |
Result | 4 | Unsigned Integer | 結果: 0:正确;1:消息結構錯;2:指令字錯; 3:消息序号重複;4:消息長度錯;5:資費錯; 6:超過最大資訊長;7:業務代碼錯;8:流量控制錯; 9:本網關不負責服務此計費号碼;10:Src_Id錯誤; 11:Msg_src錯誤;12:Fee_terminal_Id錯誤; 13:Dest_terminal_Id錯誤 |
⑥ SP向ISMG查詢發送短信狀态(CMPP_QUERY)操作
CMPP_QUERY操作的目的是SP向ISMG查詢某時間的業務統計情況,可以按總數或按業務代碼查詢。ISMG以CMPP_QUERY_RESP應答。
6.1 CMPP_QUERY消息的定義(SP->ISMG)
字段名 | 位元組數 | 屬性 | 描述 |
Time | 8 | Octet String | 時間YYYYMMDD(精确至日)。 |
Query_Type | 1 | Unsigned Integer | 查詢類别:0:總數查詢;1:按業務類型查詢。 |
Query_Code | 10 | Octet String | 查詢碼。當Query_Type為0時,此項無效; 當Query_Type為1時,此項填寫業務類型Service_Id.。 |
Reserve | 8 | Octet String | 保留。 |
6.2 CMPP_QUERY_RESP消息的定義(ISMG->SP)
字段名 | 位元組數 | 屬性 | 描述 |
Time | 8 | Octet String | 時間(精确至日)。 |
Query_Type | 1 | Unsigned Integer | 查詢類别:0:總數查詢;1:按業務類型查詢。 |
Query_Code | 10 | Octet String | 查詢碼。 |
MT_TLMsg | 4 | Unsigned Integer | 從SP接收資訊總數。 |
MT_Tlusr | 4 | Unsigned Integer | 從SP接收使用者總數。 |
MT_Scs | 4 | Unsigned Integer | 成功轉發數量。 |
MT_WT | 4 | Unsigned Integer | 待轉發數量。 |
MT_FL | 4 | Unsigned Integer | 轉發失敗數量。 |
MO_Scs | 4 | Unsigned Integer | 向SP成功送達數量。 |
MO_WT | 4 | Unsigned Integer | 向SP待送達數量。 |
MO_FL | 4 | Unsigned Integer | 向SP送達失敗數量。 |
⑦ ISMG向SP送交短信(CMPP_DELIVER)操作
CMPP_DELIVER操作的目的是ISMG把從短信中心(SMSC)或其它ISMG轉發來的短信送交SP,SP以CMPP_DELIVER_RESP消息回應。
7.1 CMPP_DELIVER消息定義(ISMG->SP)
字段名 | 位元組數 | 屬性 | 描述 |
Msg_Id | 8 | Unsigned Integer | 資訊辨別。生成算法如下:采用64位(8位元組)的整數: (1)時間(格式為MMDDHHMMSS,即月日時分秒): ,其中 :月份的二進制表示; :日的二進制表示; :小時的二進制表示 :分的二進制表示; :秒的二進制表示; (2)短信網關代碼: ,把短信網關的代碼轉換為整數填寫到該字段中; (3)序列号 ,順序增加,步長為1,循環使用。各部分如不能填滿,左補零,右對齊。 |
Dest_Id | 21 | Octet String | 目的号碼。SP的服務代碼,或者是字首為服務代碼的長号碼; 該号碼是手機使用者短消息的被叫号碼。 |
Service_Id | 10 | Octet String | 業務辨別,是數字、字母和符号的組合。 |
TP_pid | 1 | Unsigned Integer | GSM協定類型。詳細解釋請參考GSM03.40中的9.2.3.9。 |
TP_udhi | 1 | Unsigned Integer | GSM協定類型。詳細解釋請參考GSM03.40中的9.2.3.23,僅使用1位,右對齊。 |
Msg_Fmt | 1 | Unsigned Integer | 資訊格式:0:ASCII串;3:短信寫卡操作;4:二進制資訊;8:UCS2編碼;15:含GB漢字。 |
Src_terminal_Id | 32 | Octet String | 源終端MSISDN号碼(狀态報告時填為CMPP_SUBMIT消息的目的終端号碼)。 |
Src_terminal_type | 1 | Unsigned Integer | 源終端号碼類型,0:真實号碼;1:僞碼。 |
Registered_Delivery | 1 | Unsigned Integer | 是否為狀态報告:0:非狀态報告;1:狀态報告。 |
Msg_Length | 1 | Unsigned Integer | 消息長度,取值大于或等于0。 |
Msg_Content | Msg_length | Octet String | 消息内容。 |
LinkID | 20 | Octet String | 點播業務使用的LinkID,非點播類業務的MT流程不使用該字段。 |
當ISMG向SP送交狀态報告時,資訊内容字段(Msg_Content)格式定義如下:
字段名 | 位元組數 | 屬性 | 描述 |
Msg_Id | 8 | Unsigned Integer | 資訊辨別。SP送出短信(CMPP_SUBMIT)操作時, 與SP相連的ISMG産生的Msg_Id。 |
Stat | 7 | Octet String | 發送短信的應答結果,含義詳見表一。 SP根據該字段确定CMPP_SUBMIT消息的處理狀态。 |
Submit_time | 10 | Octet String | YYMMDDHHMM(YY為年的後兩位00-99,MM:01-12,DD:01-31,HH:00-23,MM:00-59)。 |
Done_time | 10 | Octet String | YYMMDDHHMM。 |
Dest_terminal_Id | 32 | Octet String | 目的終端MSISDN号碼(SP發送CMPP_SUBMIT消息的目标終端)。 |
SMSC_sequence | 4 | Unsigned Integer | 取自SMSC發送狀态報告的消息體中的消息辨別。 |
ISMG向SP送交狀态報告中的STAT字段含義:發送短信的應答結果。SP根據該字段确定CMPP_SUBMIT消息的處理狀态。
Stat字段含義如下表所示:
Message State | Final Message States | Description |
DELIVERED | DELIVRD | Message is delivered to destination |
EXPIRED | EXPIRED | Message validity period has expired |
DELETED | DELETED | Message has been deleted. |
UNDELIVERABLE | UNDELIV | Message is undeliverable |
ACCEPTED | ACCEPTD | Message is in accepted state(i.e. has been manually read on behalf of the subscriber by customer service) |
UNKNOWN | UNKNOWN | Message is in invalid state |
REJECTED | REJECTD | Message is in a rejected state |
MA:xxxx | MA:xxxx | SMSC不傳回響應消息時的狀态報告 |
MB:xxxx | MB:xxxx | SMSC傳回錯誤響應消息時的狀态報告 |
MC:xxxx | MC:xxxx | 沒有從SMSC處接收到狀态報告時的狀态報告 |
CA:xxxx | CA:xxxx | SCP不傳回響應消息時的狀态報告 |
CB:xxxx | CB:xxxx | SCP傳回錯誤響應消息時的狀态報告 |
DA:xxxx | DA:xxxx | DSMP不傳回響應消息時的狀态報告 |
DB:xxxx | DB:xxxx | DSMP傳回錯誤響應消息時的狀态報告 |
SA:xxxx | SA:xxxx | SP不傳回響應消息時的狀态報告 |
SB:xxxx | SB:xxxx | SP傳回錯誤響應消息時的狀态報告 |
IA:xxxx | IA:xxxx | 下一級ISMG不傳回響應消息時的狀态報告 |
IB:xxxx | IB:xxxx | 下一級ISMG傳回錯誤響應消息時的狀态報告 |
IC:xxxx | IC:xxxx | 沒有從下一級ISMG處接收到狀态報告時的狀态報告 |
注意:
- 其中ACCEPTED為中間狀态,網關若從短信中心收到後應丢棄,不做任何操作;
- Stat字段長度為7個位元組,填寫時應填上表中Final Message States中的縮寫形式,如狀态為DELIVERED時填寫DELIVRD,依此類推;
- SP等待狀态報告預設時間為48小時。
7.2 CMPP_DELIVER_RESP消息定義(SP -> ISMG)
字段名 | 位元組數 | 屬性 | 描述 |
Msg_Id | 8 | Unsigned Integer | 資訊辨別(CMPP_DELIVER中的Msg_Id字段)。 |
Result | 4 | Unsigned Integer | 結果: 0:正确;1:消息結構錯; 2:指令字錯; 3:消息序号重複; 4:消息長度錯;5:資費錯; 6:超過最大資訊長;7:業務代碼錯; 8: 流量控制錯;9~ :其他錯誤。 |
⑧ SP向ISMG發起删除短信(CMPP_CANCEL)操作
CMPP_CANCEL操作的目的是SP通過此操作可以将已經送出給ISMG的短信删除,ISMG将以CMPP_CANCEL_RESP回應删除操作的結果。
8.1 CMPP_CANCEL消息定義(SP->ISMG)
字段名 | 位元組數 | 屬性 | 描述 |
Msg_Id | 8 | Unsigned Integer | 資訊辨別(SP想要删除的資訊辨別)。 |
8.2 CMPP_CANCEL_RESP消息定義(ISM->SP)
字段名 | 位元組數 | 屬性 | 描述 |
Success_Id | 4 | Unsigned Integer | 成功辨別。0:成功;1:失敗。 |
⑨ 鍊路檢測(CMPP_ACTIVE_TEST)操作
本操作僅适用于通信雙方采用長連接配接通信方式時用于保持連接配接。
CMPP_ACTIVE_TEST定義(SP-> ISMG或ISMG->SP)無消息體。
CMPP_ACTIVE_TEST_RESP定義(SP ->ISMG或ISMG->SP)
字段名 | 位元組數 | 屬性 | 描述 |
Reserved | 1 |
【5】狀态碼執行個體
① Stat狀态碼執行個體
狀态碼 | 說明 |
DELIVRD | 消息發送成功 |
EXPIRED | 表示因為使用者長時間關機或者不在服務區等導緻的短資訊逾時沒有遞交到使用者手機上 |
REJECTD | 消息因為某些原因被拒絕 |
UNDELIV | 表示全球通使用者因為狀态不正确如處于停機、挂起等狀态而導緻的使用者無法享受服務 |
MC:xxxx | 系統未從短信中心接收到狀态報告 |
MC:xxxx | 沒有從SMSC處接收到狀态報告時的狀态報告 |
MI:xxxx | 同“EXPIRED” |
MN:xxxx | 同“REJECTD” |
MB:0066 | 短信中心回的,超作最大發送次數 可能是手機滿了。 |
MK:0015 | 可能是手機滿了。 |
MK:xxxx | 同“UNDELIV” |
② 管理平台DSMP傳回的錯誤
狀态碼 | 說明 |
DB:0100 | 手機号碼不存在 |
DB:0101 | 手機号碼錯誤 |
DB:0102 | 使用者停機 使用者沖值後,要主動上行一條資訊到SP,才能激活使用者的短信接收服務 |
DB:0103 | 使用者欠費 |
DB:0104 | 使用者沒有使用該業務的權限 |
DB:0105 | 業務代碼錯誤 |
DB:0106 | 服務代碼錯誤 |
DB:0107 | 業務不存在 |
DB:0108 | 該業務暫停服務 |
DB:0109 | 該服務種類不存在 |
DB:0110 | 該服務種類尚未開通 |
DB:0111 | 該業務尚未開通 |
DB:0112 | SP代碼錯誤 |
DB:0113 | SP不存在 |
DB:0114 | SP暫停服務 |
DB:0115 | 使用者沒有定購該業務 |
DB:0116 | 使用者暫停定購該業務 |
DB:0117 | 該業務不能對該使用者開放 |
DB:0118 | 使用者已經訂購了該業務 |
DB:0119 | 使用者不能取消該業務 |
DB:0120 | 話單格式錯誤 |
DB:0121 | 沒有該類業務 |
DB:0122 | 接收異常 |
DB:0123 | 業務價格為負 |
DB:0124 | 業務價格格式錯誤 |
DB:0125 | 業務價格超出範圍 |
DB:0126 | 該使用者不是神州行使用者 |
DB:0127 | 該使用者沒有足夠的餘額 |
DB:0128 | 補款,沖正失敗 |
DB:0129 | 使用者已經是夢網使用者 |
DB:0130 | 使用者在BOSS中沒有相關使用者資料 |
DB:0131 | BOSS系統資料同步出錯 |
DB:0132 | 相關資訊不存在 |
DB:0133 | 使用者資料同步出錯 |
DB:0134 | SP資料同步出錯 |
DB:0135 | 業務資料同步出錯 |
DB:0136 | 使用者密碼錯誤 |
DB:0137 | 僞碼資訊錯誤 |
DB:0138 | 使用者相關資訊不存在 |
DB:0140 | 使用者未點播該業務 |
DB:9001 | 網絡異常 |
DB:9007 | 業務網關超過限制的流量 |
③ SCP傳回的錯誤
狀态碼 | 說明 |
CA:0051 | 尚未建立連接配接 移動内部錯誤 不處理 |
CA:0052 | 尚未成功登入 移動内部錯誤 不處理 |
CA:0054 | 逾時未接收到響應消息 移動内部錯誤 不處理 |
CA:0111 | SCP廠家自定義的錯誤碼 移動内部錯誤 不處理 |
CB:0001 | 非神州行預付費使用者 号碼無效或者空号 清除訂購關系 |
CB:0002 | 資料庫操作失敗 |
CB:0005 | 移動使用者帳戶資料異常(包括未頭次使用、儲值卡被封鎖、儲值卡進入保留期、儲值卡挂失) |
CB:0007 | 使用者餘額不足 不能扣費,影響包月話單 連續兩個月扣費不成功,清除訂購關系 |
CB:0016 | 參數錯誤 移動内部錯誤 不處理 |
CB:0018 | 重複發送消息序列号msgid相同的計費請求消息 移動内部錯誤 不處理 |
CB:0022 | SCP互聯失敗 移動内部錯誤 不處理 |
CB:0047 | 過期使用者或者使用者不支援夢網業務 清除訂購關系 |
CB:0053 | 夢網使用者不存在 号碼無效或者空号 清除訂購關系 |
④ 下一級短信網關ISMG傳回的錯誤
狀态碼 | 說明 |
IB:0008 | 流量控制錯 移動内部錯誤 不處理 |
IB:0009 | 前轉判斷錯誤 移動内部錯誤 不處理 |
IB:0070 | 網絡斷連或者目的裝置關閉端口 移動内部錯誤 不處理 |
IB:0100 | 移動内部錯誤 不處理 |
IB:0113 | 移動内部錯誤 不處理 |
IB:0255 | 移動内部錯誤 不處理 |
IC:0154 | 移動内部錯誤 不處理 |
⑤ 短信中心SMSC傳回的錯誤
狀态碼 | 說明 |
MA:0051 | 尚未建立連接配接 移動内部錯誤 不處理 |
MA:0054 | 逾時未接收到響應消息 移動内部錯誤 不處理 |
MA:0191 | SMSC廠家自定義的錯誤碼 移動内部錯誤 不處理 |
MB:0019 | 移動内部錯誤 不處理 |
MB:0020 | 無效的SYSTEMID 移動内部錯誤 不處理 |
MB:0065 | 目的位址錯誤 移動内部錯誤 不處理 |
MB:0066 | 無效的定時時間 移動内部錯誤 不處理 |
MB:0070 | 移動内部錯誤 不處理 |
MB:0077 | 移動内部錯誤 不處理 |
MB:0088 | 移動内部錯誤 不處理 |
MB:0145 | SMSC廠家自定義的錯誤碼 移動内部錯誤 不處理 |
MB:0147 | SMSC廠家自定義的錯誤碼 移動内部錯誤 不處理 |
MB:0192 | SMSC廠家自定義的錯誤碼 移動内部錯誤 不處理 |
MB:0193 | SMSC廠家自定義的錯誤碼 移動内部錯誤 不處理 |
MB:0241 | SMSC廠家自定義的錯誤碼 移動内部錯誤 不處理 |
MB:0244 | SMSC廠家自定義的錯誤碼 移動内部錯誤 不處理 |
MB:0250 | SMSC廠家自定義的錯誤碼 移動内部錯誤 不處理 |
MB:4024 | 移動内部錯誤 不處理 |
MB:4025 | 移動内部錯誤 不處理 |
MC:0015 | 移動内部錯誤 不處理 |
MC:0021 | 移動内部錯誤 不處理 |
MC:0055 | 移動内部錯誤 不處理 |
MC:0151 | 移動内部錯誤 不處理 |
MC:0199 | 移動内部錯誤 不處理 |
MH:0000 | 移動内部錯誤 不處理 |
MI:0000 | 移動内部錯誤 不處理 |
MI:0008 | 移動内部錯誤 不處理 |
MI:0013 | 移動内部錯誤 不處理 |
MI:0022 | 移動内部錯誤 不處理 |
MI:0024 | 移動内部錯誤 不處理 |
MI:0029 | 移動内部錯誤 不處理 |
MI:0036 | 移動内部錯誤 不處理 |
MI:0045 | 移動内部錯誤 不處理 |
MI:0057 | 移動内部錯誤 不處理 |
MI:0255 | 移動内部錯誤 不處理 |
MJ:0000 | 移動内部錯誤 不處理 |
MK:0000 | 移動内部錯誤 不處理 |
MK:0001 | 移動内部錯誤 不處理 |
MK:0008 | 移動内部錯誤 不處理 |
MK:0009 | 移動内部錯誤 不處理 |
MK:0011 | 移動内部錯誤 不處理 |
MK:0013 | 移動内部錯誤 不處理 |
MK:0022 | 移動内部錯誤 不處理 |
MK:0029 | 移動内部錯誤 不處理 |
MK:0036 | 移動内部錯誤 不處理 |
MK:0053 | 移動内部錯誤 不處理 |
MK:0057 | 移動内部錯誤 不處理 |
MK:0255 | 移動内部錯誤 不處理 |
【6】Command_Id說明
消息 | Command_Id值 | 說明 |
CMPP_CONNECT | 0x00000001 | 請求連接配接 |
CMPP_CONNECT_RESP | 0x80000001 | 請求連接配接應答 |
CMPP_TERMINATE | 0x00000002 | 終止連接配接 |
CMPP_TERMINATE_RESP | 0x80000002 | 終止連接配接應答 |
CMPP_SUBMIT | 0x00000004 | 送出短信 |
CMPP_SUBMIT_RESP | 0x80000004 | 送出短信應答 |
CMPP_DELIVER | 0x00000005 | 短信下發 |
CMPP_DELIVER_RESP | 0x80000005 | 下發短信應答 |
CMPP_QUERY | 0x00000006 | 發送短信狀态查詢 |
CMPP_QUERY_RESP | 0x80000006 | 發送短信狀态查詢應答 |
CMPP_CANCEL | 0x00000007 | 删除短信 |
CMPP_CANCEL_RESP | 0x80000007 | 删除短信應答 |
CMPP_ACTIVE_TEST | 0x00000008 | 激活測試 |
CMPP_ACTIVE_TEST_RESP | 0x80000008 | 激活測試應答 |
CMPP_FWD | 0x00000009 | 消息前轉 |
CMPP_FWD_RESP | 0x80000009 | 消息前轉應答 |
CMPP_MT_ROUTE | 0x00000010 | MT路由請求 |
CMPP_MT_ROUTE_RESP | 0x80000010 | MT路由請求應答 |
CMPP_MO_ROUTE | 0x00000011 | MO路由請求 |
CMPP_MO_ROUTE_RESP | 0x80000011 | MO路由請求應答 |
CMPP_GET_MT_ROUTE | 0x00000012 | 擷取MT路由請求 |
CMPP_GET_MT_ROUTE_RESP | 0x80000012 | 擷取MT路由請求應答 |
CMPP_MT_ROUTE_UPDATE | 0x00000013 | MT路由更新 |
CMPP_MT_ROUTE_UPDATE_RESP | 0x80000013 | MT路由更新應答 |
CMPP_MO_ROUTE_UPDATE | 0x00000014 | MO路由更新 |
CMPP_MO_ROUTE_UPDATE_RESP | 0x80000014 | MO路由更新應答 |
CMPP_PUSH_MT_ROUTE_UPDATE | 0x00000015 | MT路由更新 |
CMPP_PUSH_MT_ROUTE_UPDATE_RESP | 0x80000015 | MT路由更新應答 |
CMPP_PUSH_MO_ROUTE_UPDATE | 0x00000016 | MO路由更新 |
CMPP_PUSH_MO_ROUTE_UPDATE_RESP | 0x80000016 | MO路由更新應答 |
CMPP_GET_MO_ROUTE | 0x00000017 | 擷取MO路由請求 |
CMPP_GET_MO_ROUTE_RESP | 0x80000017 | 擷取MO路由請求應答 |
【7】封裝CMPP3.0中遇到的一些實際問題
這裡用的是移動的雲mas,移動雲mas首先要申請賬号,移動政企申請後會把賬号、密碼和EC name(企業名稱)發給你,然後你需要登入http://mas.10086.cn/login 頁面背景,進行一系列操作。
CMPP3.0 移動雲MAS接口位址:112.35.10.165:1991 這個分别對應ismgIp和ismgPort。就是短信網關的ip和端口。
然後,通常你需要在“管理”-“接口管理”中建立接口:
① CMPP_CONNECT參數
這裡需要用到的參數有Source_Addr,Shared secret,Version和Timestamp。CMPP3.0中Version為0x30,Timestamp這個是時間戳,這兩個不用再說。
那麼Source_Addr,Shared secret究竟是什麼?看接口文檔給的文字定義并沒有給執行個體,不免讓人一頭霧水。
如上面圖中紅字标注,此處的Source_Addr就是SP_Id,就是你申請接口時的使用者名!Shared secret則是你申請接口時填寫的密碼!
② CMPP_SUBMIT中幾個參數
Service_Id ,就是你的簽名編碼。
Msg_src,就是sp_id,就是你申請接口時候的使用者名。
Src_Id,就是服務代碼,這個和Service_Id同樣可以在“管理”–“EC管理”裡面看到。
至此,封裝CMPP3.0時用到的幾個核心參數就分析完了:
cmpp:
ismgIp: 短信網關IP
ismgPort: 短信網關端口
spId: 申請接口的使用者名
sharedSecret: 申請接口的密碼
spCode: 服務代碼
version: 0x30--CMPP3.0是這個
serviceId: 簽名
③ 長連接配接與短連接配接
如果你每次請求都建立新的用戶端與遠端連接配接,那麼不用做CMPP_ACTIVE_TEST。否則的話 ,你需要進行CMPP_ACTIVE_TEST操作。
你應該以某個間隔,周期性的向短信網關發送CMPP_ACTIVE_TEST,短信網關會傳回一個CMPP_ACTIVE_TEST_RESP。否則短信網關會自動斷開連接配接。也就是說,你需要寫一個定時器,固定間隔執行CMPP_ACTIVE_TEST操作。
④ 應用簽名問題
如下所示:
應用簽名就是免簽名,就是需要手動在短信内容開頭(結尾也可以,建議開頭)拼接簽名,如
【河南社保】
。否則的話,回執狀态中會提示簽名為空導緻短信發送失敗。至于簽名是什麼,這個自己看雲MAS管理背景就知道了,實在不知道問移動雲MAS客戶經理。
應用簽名(免簽名)需要客戶經理走流程申請網關删除簽名,本網簽名也要删除。這樣在發送短信的時候隻需要在短信内容開頭拼接短信簽名就OK。
如下所示:
【河南社保】短信驗證碼:458932
業務場景:比如不同機構調用你的短信接口,不同機構使用不同的簽名。
⑤ CMPP_DELIVER與短信發送狀态