基于CMPP2以及东软API的短信平台的开发

原创 2005年01月01日 20:57:00
基于CMPP2以及东软API的短信平台的开发
10MS发表于www.10ms.net

本平台针对网关开发。
东软API不知道是什么版本的,源代码出现某个错误,某数组允许长度64,API文档里也说明是64,可是它

是65。破解之,改之,重新编译之,无问题。
API文档里示例程序也有若干错误,很奇怪,既然是对外发布的版本,居然没有一条注释,改之,现在调

试运行没有问题,可以发送短信。
下面提供的只是个简单的示例,要强调一些细节。假设你把API放在d:/message/com/commerceware/cmpp/

目录下,我的示例也在改目录下,那么编译和运行请转到message目录下

编译javac -classpath D:/message/ f:/message/com/commerceware/cmpp/Test.java
运行java com.commerceware.cmpp.Test 13711111111 我爱ABC

运行时第一个参数是对方手机号,第二个参数是发送内容。以下是程序内容,登陆IP和用户名密码等我已

隐藏。但程序是正常的,你首先需要申请一个SP的资格
package com.commerceware.cmpp;

public class Test{

public void readPaME(conn_desc con)
{
cmppe_result cr = null;
CMPP cp = new CMPP();
try{
cr = cp.readResPack(con);
System.out.println("cr.pack_id=" + cr.pack_id);
switch(cr.pack_id)
{
case CMPP.CMPPE_NACK_RESP:


System.out.println("CMPP.CMPPE_NACK_RESP:get nack pack");
break;

case CMPP.CMPPE_LOGIN_RESP:
cmppe_login_result cl;
cl = (cmppe_login_result)cr;


System.out.println("CMPP.CMPPE_LOGIN_RESP:login resp: STAT = "+cl.stat);
break;

case CMPP.CMPPE_LOGOUT_RESP:


System.out.println("CMPP.CMPPE_LOGOUT_RESP:logout resp: STAT = "+cr.stat);
break;

case CMPP.CMPPE_SUBMIT_RESP:


System.out.println("CMPP.CMPPE_SUBMIT_RESP");
cmppe_submit_result sr;
sr = (cmppe_submit_result)cr;
cmppe_cancel cc1 = new 

cmppe_cancel();
//cc1.set_msgid(new 

String(sr.msg_id)));
cc1.set_msgid(new 

String(sr.msg_id));
break;

case CMPP.CMPPE_DELIVER:


System.out.println("CMPP.CMPPE_DELIVER:deliver: STAT = 0");


cmppe_deliver_result cd= 

(cmppe_deliver_result)cr;


cp.cmpp_send_deliver_resp(con,cd.seq,cd.stat);
break;

case CMPP.CMPPE_CANCEL_RESP:


System.out.println("CMPP.CMPPE_CANCEL_RESP:cancel: STAT = " + cr.stat);
break;
case CMPP.CMPPE_ACTIVE_RESP:


System.out.println("CMPP.CMPPE_ACTIVE_RESP:active resp: STAT " + cr.stat);
break;
default:
break;


}
}catch(Exception e)
{
System.out.println(e.getMessage());
e.printStackTrace();
System.out.println("have a exception");
try{
System.in.read();
}catch(Exception e1){}

}
}

public static void main(String[] args)
{

if(args[0] == null || args[0].equals("") || args[0].length() != 11){
   System.out.println("手机号码输入不正确");
   return;
}
if(args[1] == null || args[0].equals("") || args[1].length() == 0){
   System.out.println("没有输入短信内容");
return;
}

CMPP p = new CMPP();
Test t = new Test();
char test[] = new char[10];
byte short_msg[] = new byte[150];
byte buf[] = new  byte[40];
byte b1[] = new  byte[10];


cmppe_submit sub = new cmppe_submit();
cmppe_submit_result res =new cmppe_submit_result();
cmppe_cancel can = new cmppe_cancel();

byte icp_id[] = new byte[10];     //ICP隐藏
icp_id[0] =0x**;
icp_id[1] =0x**;
icp_id[2] =0x**;
icp_id[3] =0x**;
icp_id[4] =0x**;
icp_id[5] =0x**;
icp_id[6] = 0;
byte svc_type[] = new byte[6];
svc_type[0] = 0x39;
svc_type[1] = 0x34;
svc_type[2] = 0x31;
svc_type[3] = 0x30;
svc_type[4] = 0;

byte fee_type = 0;
byte info_fee = 1;
byte proto_id = 1;

byte msg_mode = 1;
    byte priority =9;
byte fee_utype = 2;
byte fee_user[] = new byte[CMPP.CMPPE_MAX_MSISDN_LEN];
for(int i=0; i<12; i++)
fee_user[0] = 0x31;
fee_user[1] = 0x33;
fee_user[2] = 0x38;
fee_user[3] = 0x30;
fee_user[4] = 0x35;
fee_user[5] = 0x30;
fee_user[6] = 0x30;
fee_user[7] = 0x31;
fee_user[8] = 0x30;
fee_user[9] = 0x36;
fee_user[10]= 0x34;
fee_user[11]= 0x0;

    byte validate[] = new byte[10];
validate[0] =0;
byte schedule[] = new byte[2];
schedule[0] =0;
byte src_addr[] = new byte[12];
src_addr[0] = 0x31;
src_addr[1] = 0x33;
src_addr[2] = 0x38;
src_addr[3] = 0x30;
src_addr[4] = 0x35;
src_addr[5] = 0x30;
src_addr[6] = 0x30;
src_addr[7] = 0x31;
src_addr[8] = 0x30;
src_addr[9] = 0x36;
src_addr[10]= 0x34;
src_addr[11]= 0x0;

byte du_count = 1;
byte dst_addr[][] = new byte[10][15];

dst_addr[0][0] = toHex(args[0].charAt(0)); //CMPPE_MAX_MSISDN_LEN+1
dst_addr[0][1] = toHex(args[0].charAt(1));
dst_addr[0][2] = toHex(args[0].charAt(2));
dst_addr[0][3] = toHex(args[0].charAt(3));
dst_addr[0][4] = toHex(args[0].charAt(4));
dst_addr[0][5] = toHex(args[0].charAt(5));
dst_addr[0][6] = toHex(args[0].charAt(6));
dst_addr[0][7] = toHex(args[0].charAt(7));
dst_addr[0][8] = toHex(args[0].charAt(8));
dst_addr[0][9] = toHex(args[0].charAt(9));
dst_addr[0][10]= toHex(args[0].charAt(10));
dst_addr[0][11]= 0x0;



//byte data_coding = 1;
byte data_coding = 15;            //15为GB2312
byte sm_len = 120;

String ss = args[1];

try{
   short_msg = ss.getBytes("GB2312");
   ss = new String(short_msg);
                }catch(Exception e){
  
}
System.out.println(short_msg.length);
                
     cmppe_result cr = new cmppe_result();
cmppe_deliver_result rs = new cmppe_deliver_result();
try{
conn_desc con = new conn_desc();
System.out.println("connecting...");
p.cmpp_connect_to_ismg("111.111.111.111",7890,con); //登

陆信息隐藏,SORRY哈
System.out.println("ICP_ID:" + "******" + "   ICP_AUTH:" + "**"); 
p.cmpp_login(con,"*****","****",(byte)2,0x12,*******);
t.readPaME(con);

sub.set_icpid(icp_id );
sub.set_svctype(svc_type);
sub.set_feetype(fee_type );
sub.set_infofee(info_fee);
sub.set_protoid(proto_id);
sub.set_msgmode(msg_mode );
sub.set_priority(priority );
sub.set_validate(validate);
sub.set_schedule(schedule );
sub.set_feeutype(fee_utype);
sub.set_feeuser(fee_user);
sub.set_srcaddr(src_addr );
sub.set_dstaddr(dst_addr );
sub.set_ducount(du_count);

sub.set_msg(data_coding,short_msg.length,short_msg );
p.cmpp_submit(con,sub);
t.readPaME(con);
p.cmpp_active_test(con);
t.readPaME(con);

p.cmpp_logout(con);
t.readPaME(con);

}catch(Exception e)
{
System.out.println(e.getMessage());
e.printStackTrace();
System.out.println("have a exception");
try{
System.in.read();
}catch(Exception e1)
{
}
return;
}
}

public static byte toHex(char c){
switch(c){
  case Ƈ':
    return 0x31;
  case ƈ':
    return 0x32;
  case Ɖ':
    return 0x33;
  case Ɗ':
    return 0x34;
  case Ƌ':
    return 0x35;
  case ƌ':
    return 0x36;
  case ƍ':
    return 0x37;
  case Ǝ':
    return 0x38;
  case Ə':
    return 0x39;
  case Ɔ':
    return 0x30;
  default: break;
}
return 0x0;
}

}

如果您运行该程序得到该结果,就说明正常。
7
connecting...
ICP_ID:111111   ICP_AUTH:1111
login_type:2
CMPP_VERSION:18
cr.pack_id=-2147483647
CMPP.CMPPE_LOGIN_RESP:login resp: STAT = 0
cr.pack_id=5
CMPP.CMPPE_DELIVER:deliver: STAT = 0
cr.pack_id=-2147483644
CMPP.CMPPE_SUBMIT_RESP
cr.pack_id=-2147483640
CMPP.CMPPE_ACTIVE_RESP:active resp: STAT 0

主要看stat是0就行了,其它的是我的调试信息,首行7表示短信长度

微米平台发送短消息 类

微米平台发送短消息 类
  • neilson123456
  • neilson123456
  • 2015年01月20日 15:16
  • 1301

基于华为CMPP2.0 API开发短信平台

短信平台快完工了,晚上把开发中遇到的一些问题整理了出来便于以后的参考和开发短信下行(发送短信):SMProxy myProxy= new SMProxy(this,args);Args args = ...
  • zj978723
  • zj978723
  • 2009年09月23日 17:38
  • 5109

CMPP3与CMPP2的区别

1.        获取CMPP3.0接口api以及使用说明SP在做接口测试及改造前需要获取相应版本的CMPP3.0接口的api以及使用说明,这些资料可以通过向各个接入网关厂家索取如果SP有能力自行开...
  • csqcyit
  • csqcyit
  • 2008年10月12日 10:59
  • 2231

短信平台建设方案

传统的短信群发平台是基于中国移动、联通、电信直接提供的短信端口与互联网连接实现与客户指定号码进行短信批量发送和自定义发送的,短信平台主要分为两种:一种是要下载安装到本地的软件版,一种是通过浏览器登录的...
  • zhongguomao
  • zhongguomao
  • 2016年07月09日 08:42
  • 2094

基于百度地图API的开发

(1)百度地图API         根据自己的需求在百度地图demo中找到适合自己需求的demo(第一步很重要,找对了demo事半功倍,找错了后期开发很可能遇到问题,需要重新回来找) (2)开发  ...
  • content6
  • content6
  • 2016年11月10日 16:57
  • 663

我的东软五年

2003年的年初,我被评为东软的优秀员工,欣喜之余,突然意识到自己很快便要在东软度过第五个年头了,心情一下子便觉得感慨交加。脑海中顿时回忆起这些年来的点点滴滴,心中有个声音在说“该写一些东西了”,但随...
  • blueluhan
  • blueluhan
  • 2004年11月12日 10:38
  • 6826

一个支持Git应用编程开发的第三方库(API)

libgit2 is a portable, pure C implementation of the Git core methods provided as a re-entrant linkab...
  • wag2765
  • wag2765
  • 2016年01月25日 16:41
  • 335

RESTful Web 服务 - Java (JAX-RS)

JAX-RS 表示用于 RESTful Web 服务的 Java API。JAX-RS 是一种基于 Java 的编程语言 API 以及为创建 RESTful Web 服务提供支持的规范。2.0 版本发...
  • zl1zl2zl3
  • zl1zl2zl3
  • 2017年03月09日 11:28
  • 269

短信平台如何开发?

请问,短信平台如何开发?我在一家SP工作,可能需要开发一个短信平台,但是我不太清楚短信平台需要用到那些东西,例如:触发器、消息队列等。希望大家指点一下用那些模块组合为一个短信平台。谢谢...
  • qirenli_cn
  • qirenli_cn
  • 2004年11月16日 08:40
  • 1636

东软,内部员工离职述说

怀着对软件的梦想,我来到了东软   从看到沈阳园区的第一眼起,我就深深喜欢上了这里,大气磅礴壮美的园区洋溢的是宁静和谐的气氛   当时真的觉得东软和宣传的一样简单、务实、美      起初很喜...
  • lee576
  • lee576
  • 2007年12月28日 10:04
  • 20518
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于CMPP2以及东软API的短信平台的开发
举报原因:
原因补充:

(最多只允许输入30个字)