关于JAVA版的SGIP API调研
一:准备工作:
1.首先你需要得到sgip的java API包sgip_java.rar。(下载?拷贝?联通给你的?whatever~)
2.打开ECLIPSE,并新建两个JAVA PROJECT,分别命名为:SGIPClientDemo与SGIPServerDemo
3.解压sgip_java.rar后,将release包下的SGIPClientDemo,SGIPServerDemo的src目录分别复制到
eclipse的项目中来。
4.将sgip_java\sgip_java\release\api文件夹下的jar包(com.zte.smgw.api.jar)与
\sgip_java\sgip_java\release\lib文件夹下的jar包(log4j-1.2.15.jar)添加至
ECLIPSE里的这两个项目里。(JAVA BUILD PATH,不会的话你可以去撞墙了!)
5.将\sgip_java\sgip_java\release\api文件夹下的两个配置文件(log4j.properties与sgipconfig.properties)
分别拷贝到ECLIPSE两个项目中的src目录下。(这两个文件一般情况下不用修改,至少我没有改~)
PS:最重要的准备工作是你需要去联通网关申请先关的参数等等等等。让联通给你开户等等等等。
(but thats none of my business right?cuz im a coder.)
二:短信上行:手机-->联通网关-->JAVA程序
短信上行的原理:首先你拿一个测试手机给联通的一个号段例如105550200508发短信,
这个号码叫特服号码(不是你足疗保健洗澡的那个特服。。。),不懂的话自己去问度娘。
之后联通网关会监听这个特服号码,收到往这个特服号码的短信后,联通网关会路由到配置好的IP和端口
这是之前在准备工作里你需要去联通申请的一系列信息。将这条信息发给你的SERVER。
你的SERVER端需要一直run一个多线程的监听服务。之后可以在JAVA程序中收到短信内容。
短信上行主要用到的是SGIPServerDemo这个项目。
您需要配置四个主要参数,他们分别是:
info.IP = "111.111.11.11";//这个IP是你申请的IP。如果外网转内网的话请使用强大的TCP-TRACE工具
info.port = 10227;//这个端口号是你申请的端口号。
info.userName = "yang";//以此类推,你申请的账号
info.passWord = "yanglala";//你申请的密码
以上这四个参数都是联通为你提供的,不知道的话尽管给他们打电话就好了。
设置完成之后就可以RUN了,就是这么简单!
RUN AS -->JAVA APPLICATION 不用我教你了吧?
RUN成功的提示信息如下:
INFO [main] com.zte.smgw.api.sgip.server.SGIPServer - SGIP server is init success!
INFO [main] com.zte.smgw.socket.server.SocketServer - 11.11.11.11:11111 is begin to listen!
INFO [main] com.zte.smgw.api.sgip.server.SGIPServer - SGIP server is start success!
恭喜你,可以进入下一步了~
拿起您的手机,往你申请的特服号码发送一条测试短信。例如往105550200508,发一条"i luv u"
此时此刻,在receiveThread中的
SGIPDeliver deliver = (SGIPDeliver) msg.obj;
会接收到短信内容;
然后把他打出来吧
SGIPDeliverBody a = deliver.getBody();
System.out.println(new String(a.getMessageContent()));
控制台显示:i luv u.
至此,上行短信全部OK。
(中文的问题在这里就不说了,DIY吧。)
PS:如果行不通的话就给联通打电话。我这个流程就是正常的流程。
三:短信下行:JAVA程序-->联通网关-->手机
短信下行的原理:在程序里设定手机号,然后程序将短信下发到联通网关,联通网关监听到短信后,
将短信发送至用户手机。
短信上行主要用到的是SGIPClientDemo这个项目。
你需要修改test这个类。
第一步:修改一些参数~~~~
info.IP = "111.111.1.11";//联通运营商网关IP地址
info.port = 8801;//联通运营商网关端口
info.userName = "yang";//用户名
info.passWord = "yanglala";//密码
info.maxLink = 20;//最大连接数
第二步:修改一堆参数~~~~
submit.getBody().setSPNumber("100000000000");//特服号
submit.getBody().setChargeNumber("000000000000000000000");//21个0 付费的手机号码
submit.getBody().setUserCount(1);//用户数量 默认为1
submit.getBody().setUserNumber("8613333333333"); //用户号码 发送的目的手机号码 前面要加86
submit.getBody().setCorpId("22222");//企业ID,企业代码 5位代码 你们申请的
submit.getBody().setFeeType(0);//付费类型 默认0
submit.getBody().setFeeValue("0");//付费值 默认0
submit.getBody().setGivenValue("0");//下面都是默认值,就不写注释了。
submit.getBody().setAgentFlag(0);
submit.getBody().setMorelatetoMTFlag(0);
submit.getBody().setPriority(0);
submit.getBody().setExpireTime("");
submit.getBody().setScheduleTime("");
submit.getBody().setReportFlag(1);//1是返回状态报告, 0是不返回
submit.getBody().setTP_pid(0);
submit.getBody().setTP_udhi(0);
submit.getBody().setMessageCoding(8);//默认值
submit.getBody().setMessageType(3);//默认值
submit.getBody().setMessageContent("zhjt2222est".getBytes());//短信内容
submit.getBody().setReserve("dd");//不知道是什么东东,貌似没有用。
第三步:
设置完成之后就可以RUN了,就是这么简单!
RUN AS -->JAVA APPLICATION 不用我教你了吧?
PS:你的测试机器必须是能连接到外网的机器,如果telnet不通联通的IP和端口,那么一切都是徒劳无功的~
发送完毕后,在SGIPServerDemo项目中的receiveThread类里会有接收状态码哦,亲~
SGIP技术支持:13189004174,不要随便骚扰他们,谢谢。