天天看點

雲MAS中CMPP3.0協定封裝與移動短信狀态報告狀态碼說明

【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】網絡結構拓撲

如下圖所示:

雲MAS中CMPP3.0協定封裝與移動短信狀态報告狀态碼說明

網際網路短信網關(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作為底層通信承載,具體結構如圖所示:

雲MAS中CMPP3.0協定封裝與移動短信狀态報告狀态碼說明

③ 通信方式

各網元之間共有兩種連接配接方式:長連接配接和短連接配接。所謂長連接配接,指在一個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條。

長連接配接的操作流程舉例如圖所示:

雲MAS中CMPP3.0協定封裝與移動短信狀态報告狀态碼說明
  • 短連接配接

通信雙方以客戶-伺服器方式建立TCP連接配接,應答與請求在同一個連接配接中完成。系統采用客戶/伺服器模式,操作以用戶端驅動方式發起連接配接請求,完成一次操作後關閉此連接配接。

網關與SP之間、網關之間的消息發送後等待T秒後未收到響應,應立即重發,再連續發送N-1次後仍未得到響應則停發。現階段建議取值為:T=60秒,N=3。

短連接配接的操作流程舉例如圖所示:

雲MAS中CMPP3.0協定封裝與移動短信狀态報告狀态碼說明

④ 互動過程中的應答方式

在SP與ISMG之間、SMSC與ISMG之間及ISMG之間的互動過程中均采用異步方式,即任一個網元在收到請求消息後應立即回送響應消息。

如下圖所示:

雲MAS中CMPP3.0協定封裝與移動短信狀态報告狀态碼說明

【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,即月日時分秒):​

​bit64~bit39​

​,

其中​

​bit64~bit61​

​:月份的二進制表示;

​bit60~bit56​

​:日的二進制表示;

​bit55~bit51​

​:小時的二進制表示;

​bit50~bit45​

​:分的二進制表示;

​bit44~bit39​

​:秒的二進制表示;

(2)短信網關代碼:​

​bit38~bit17​

​,把短信網關的代碼轉換為整數填寫到該字段中;

(3)序列号:​

​bit16~bit1​

​,順序增加,步長為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,即月日時分秒):​

​bit64~bit39​

​​,其中​

​bit64~bit61​

​:月份的二進制表示;

​bit60~bit56​

​:日的二進制表示;

​bit55~bit51​

​:小時的二進制表示

​bit50~bit45​

​:分的二進制表示;

​bit44~bit39​

​:秒的二進制表示;

(2)短信網關代碼:​

​bit38~bit17​

​,把短信網關的代碼轉換為整數填寫到該字段中;

(3)序列号​

​bit16~bit1​

​,順序增加,步長為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和端口。

然後,通常你需要在“管理”-“接口管理”中建立接口:

雲MAS中CMPP3.0協定封裝與移動短信狀态報告狀态碼說明

① 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中CMPP3.0協定封裝與移動短信狀态報告狀态碼說明

應用簽名就是免簽名,就是需要手動在短信内容開頭(結尾也可以,建議開頭)拼接簽名,如​

​【河南社保】​

​。否則的話,回執狀态中會提示簽名為空導緻短信發送失敗。至于簽名是什麼,這個自己看雲MAS管理背景就知道了,實在不知道問移動雲MAS客戶經理。

應用簽名(免簽名)需要客戶經理走流程申請網關删除簽名,本網簽名也要删除。這樣在發送短信的時候隻需要在短信内容開頭拼接短信簽名就OK。

如下所示:

【河南社保】短信驗證碼:458932      

業務場景:比如不同機構調用你的短信接口,不同機構使用不同的簽名。

⑤ CMPP_DELIVER與短信發送狀态