短信网关协议长短信开发要点

本文本简单介绍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的相同。