短信網關協議長短信開發要點
本文本簡單介紹cmpp(移動)、sgip(聯通)、smgp(電信行業網關)、smpp等種短信協議如何發送長短信。
長短信是指短信內容超過70個字(漢字)的短信,拆分成67個字(漢字)然後提交到短信網關。
cmpp,sgip,smgp如何發送長短信
1,三種協議都需要在短信的內容頭部增加6個字節的內容,格式如下:
msgHeader[0]=5;
msgHeader[1]=0;
msgHeader[2]=3;
msgHeader[3]=tp_udhiHead;//從0開始,依次增加,最大256,同一條長短信該值相同
msgHeader[4]=Pk_total;//按67字拆分後總條數
msgHeader[5]=j;//第幾條,從1開始
2,針對cmpp和sgip,把TP_pid設置爲0,TP_udhi設置爲1即可。
3,針對smgp,TP_udhi設置爲1,TP_pid設置爲0,但需要把這兩個值以TLV的格式增加到短信內容後面。
TLV格式:T表示類型,長度2字節;L表示內容的長度,長度2字節;V表示內容,長度由L決定。
設置TP_pid時,T值爲1,L值爲1,V值爲0
設置TP_udhi時,T值爲2,L值爲1,V值爲1
//示例代碼,其中ptr指向消息buffer
short tpPidTag = htons(0x0001);
memcpy(ptr,&(tpPidTag),2);
ptr +=2;
short tpPidTagLen = htons(1);
memcpy(ptr,&(tpPidTagLen),2);
ptr +=2;
unsigned char tpPidTagVal = 0;
memcpy(ptr,&(tpPidTagVal),1);
ptr +=1;
short tpUdhiTag = htons(0x0002);
memcpy(ptr,&(tpUdhiTag),2);
ptr +=2;
short tpUdhiTagLen = htons(1);
memcpy(ptr,&(tpUdhiTagLen),2);
ptr +=2;
unsigned char tpUdhiTagVal = 1;
memcpy(ptr,&(tpUdhiTagVal),1);
ptr +=1;
smpp如何發送長短信
smpp發送長短信時,需要把Esm_Class=40h;然後短信內容的頭部加上長短信頭,長短信頭格式與cmpp的相同。