banner

福建移动CMPP长短信拆分方案

中文短信网之前写过一篇关于中国移动CMPP长短信实现方案,里面具体规定了协议相关的一些东西,参见https://www.zhsms.com/smstech/8.html

福建移动由于有固定签名,所以通常的长短信拆分方案会有问题,比如按照67个字来拆分,这种是有问题的,因为发长短信时,福建移动会在长短信的最后一条短信上加上固定签名,这样会导致最后一条短信的内容加上固定签名之后的长度超过70个字,会被移动截掉,导致发送的内容不完整,比如下面传统的代码:

if(contentBytes.length <= 140) {//判断字节数是否小于等于140个字,如果小于,则不是长短信,超过就是长短信
messageSize = 1;
messageLeft = 70;
} else {//长短信
messageSize = contentBytes.length/(67 * 2);
messageLeft = contentBytes.length%(67 * 2);
for (i=0;i<messageSize;i++) meslen[i] = 67 * 2;
if(messageLeft > 0) 
{messageSize++;meslen[i] =messageLeft; }//messageSize为条数,meslen数组存储每条短信的长度
}


下面给出一种福建移动长短信拆分算法

qlen = (固定签名长度+2)*2//加2是因为签名还有【】,乘2是换算成字节数
if(contentBytes.length <= 140-qlen) {//判断字节数是否小于等于140个字,如果小于,则不是长短信,超过就是长短信
messageSize = 1;
messageLeft = 70-qlen/2;
} else {//长短信
messageSize = contentBytes.length/(67 * 2);
messageLeft = contentBytes.length%(67 * 2);
if (messageLeft ==0){
messageSize ++;
for (i=0;i <messageSize -1;i++)
meslen[i] = 67 * 2;
meslen[i] = 0;
}else{
for (i=0;i<messageSize;i++)meslen[i]= 67 *2;
messageSize += messageLeft /((67-qlen/2) * 2);
if (messageLeft /((67-qlen/2) * 2) >0){
meslen[i] = (67-qlen/2) *2;
i++;
}
messageLeft = messageLeft%((67-qlen/2) * 2);
if (messageLeft >0 ){
messageSize ++;
meslen[i] = messageLeft;
}
}
}

对于短信网关没有固定签名的可以采用上面的算法,有固定签名的可以采用下面的算法

阅读: 495
本文由中文短信网原创,转载请保留链接!
中文短信网
https://www.zhsms.com/smstech/11.html

相关阅读

留言评论

暂无留言