📄 sms.java.svn-base
字号:
package com.easycolony;
import java.util.Collection;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import wzsoft.sms.client.AccountReq;
import wzsoft.sms.client.AccountRsp;
import wzsoft.sms.client.Protocol;
import wzsoft.sms.client.ProtocolFactory;
import wzsoft.sms.client.SmsClient;
import wzsoft.sms.client.SmsDRReq;
import wzsoft.sms.client.SmsDRRsp;
import wzsoft.sms.client.SmsEventListener;
import wzsoft.sms.client.SmsMOReq;
import wzsoft.sms.client.SmsMORsp;
import wzsoft.sms.client.SmsMTReq;
import wzsoft.sms.client.SmsMTRsp;
public class Sms implements SmsEventListener{
private static Log log = LogFactory.getLog(Sms.class);
private SmsDao dao;
private String username;
private String password;
private String serverAddress;
private int serverPort;
private boolean feedbackError = false;
public void setPassword(String password) {
this.password = password;
}
public void setServerAddress(String serverAddress) {
this.serverAddress = serverAddress;
}
public void setServerPort(int serverPort) {
this.serverPort = serverPort;
}
public void setUsername(String username) {
this.username = username;
}
public void setFeedbackError(boolean feedbackError) {
this.feedbackError = feedbackError;
}
public void setSmsDao(SmsDao smsDao){
this.dao = smsDao;
}
public void receive() throws Exception{
initialize();
findMessage();
}
private SmsClient client = null;
public Sms() { }
public void initialize() {
// 取得客户端生成工厂
ProtocolFactory factory = ProtocolFactory.getFactory();
// 生成客户端
client = factory.getClient( Protocol.SOMP );
client.setUsername(username);
client.setPassword(password);
client.setServerAddress(serverAddress);
client.setPort(serverPort);
// 设置回调接口
client.setListener(this);
// 使用同步发送请使用该句代码
// client.setSendTimeout(30000);
// 设置空闲时间
client.setIdleTimeout(60000);
System.out.println("init complete.");
}
/* (non-Javadoc)
* @see wzsoft.sms.client.SmsEventListener#onBinding()
*/
public void onBinding() {
System.out.println("onBinding"); // 开始连接
}
/* (non-Javadoc)
* @see wzsoft.sms.client.SmsEventListener#onBound()
*/
public void onBound(int result) {
System.out.println("onBound: " + result); // 0 成功,其他错误
}
/* (non-Javadoc)
* @see wzsoft.sms.client.SmsEventListener#onSmsDR(wzsoft.sms.client.SmsDRReq, wzsoft.sms.client.SmsDRRsp)
*/
public void onSmsDR(SmsDRReq req, SmsDRRsp rsp) {
System.out.println("onSmsDR");
// process delivery-report,处理接收的状态报告
System.out.println("Source-Addr: " + req.getSourceAddr()); // 源地址,手机号
System.out.println("Message-ID : " + req.getMessageID()); // 消息编号,对应SmsMTRsp.MessageID
System.out.println("Catalogue : " + req.getCatalogue()); // 对应SmsMT的Catalogue,客户端对消息的编号
System.out.println("Receipt : " + req.getReceipt()); // 消息发送的详细状态结果,直接来自网关
System.out.println("Stat : " + req.getStat() ); // 发送的状态,这个是大类,主要看这个来确定是否成功
}
/* (non-Javadoc)
* @see wzsoft.sms.client.SmsEventListener#onSmsMO(wzsoft.sms.client.SmsMOReq, wzsoft.sms.client.SmsMORsp)
*/
public void onSmsMO(SmsMOReq req, SmsMORsp rsp){
System.out.println("onSmsMO");
// process mo message, 处理手机上行信息
System.out.println("Data-Coding: " + req.getDataCoding() ); // 内容编码格式
System.out.println("Dest-Addr : " + req.getDestAddr() ); // 企业特服号
System.out.println("Content : " + req.getContent() ); // 内容
try{
System.out.println("content : " + new String(req.getContent(),"gb2312") );
}catch(Exception e){}
System.out.println("Short-Code : " + req.getShortCode() ); // 通道特服号
System.out.println("Source-Addr: " + req.getSourceAddr() ); // 手机号
String content = null;
try{
content = new String(req.getContent(),"gb2312");
content = content.trim();
//处理全角字符
content.replaceAll("1", "1");
content.replaceAll("2", "2");
content.replaceAll("3", "3");
content.replaceAll("4", "4");
content.replaceAll("5", "5");
content.replaceAll("6", "6");
content.replaceAll("7", "7");
content.replaceAll("8", "8");
content.replaceAll("9", "9");
content.replaceAll("0", "0");
content.replaceAll(".", "Z");
}catch(Exception e){
}
boolean msgIsValid = true;
long productCode = 0;
long storeCode = 0;
String strProductCode = null;
String strStoreCode = null;
if(content != null){
if(content.length()==8){
strProductCode = content.substring(0, 4);
strStoreCode = content.substring(4,8);
try{
productCode = Long.parseLong(strProductCode);
storeCode = Long.parseLong(strStoreCode);
}catch(NumberFormatException e){
msgIsValid = false;
}
}else{
msgIsValid = false;
}
}else{
msgIsValid = false;
}
if(msgIsValid){
int rt = dao.addRecord(productCode,storeCode);
if(feedbackError){
if(rt==SmsDao.ERROR_BOTH_CODE){
sendMessage("系统不能接收您发送的如下编码:\n"+(content==null?"":content)+"\n前4位商品编号不存在,后4位连锁店编号不存在.",req.getSourceAddr());
}else if(rt==SmsDao.ERROR_PRODUCT_CODE){
sendMessage("系统不能接收您发送的如下编码:\n"+(content==null?"":content)+"\n前4位商品编号不存在.",req.getSourceAddr());
}else if(rt==SmsDao.ERROR_STORE_CODE){
sendMessage("系统不能接收您发送的如下编码:\n"+(content==null?"":content)+"\n后4位连锁店编号不存在.",req.getSourceAddr());
}
}
}else{
if(feedbackError){
sendMessage("系统不能识别您发送的如下编码:\n"+(content==null?"":content)+"\n正确编号应为8位数字,前4位为商品编号,后4位为连锁店编号.",req.getSourceAddr());
}
}
}
/* (non-Javadoc)
* @see wzsoft.sms.client.SmsEventListener#onSmsMTRsp(java.lang.Object, wzsoft.sms.client.SmsMTRsp)
*/
public void onSmsMTRsp(Object key, SmsMTRsp rsp) {
// process SmsMT response,处理发送MT消息的反馈
System.out.println("onSmsMTRsp");
System.out.println("Message-ID: " + rsp.getMessageID() ); // 消息编号
System.out.println("Result : " + rsp.getResult() ); // 发送结果
}
/* (non-Javadoc)
* @see wzsoft.sms.client.SmsEventListener#onUnbound(java.util.Collection)
*/
public void onUnbound(Collection collection) {
System.out.println("onUnbound");
/*
try{
findMessage();}catch(Exception e){
e.printStackTrace();
System.out.println("system error");
}*/
}
public void findMessage() throws Exception{
// 如果仅仅接收状态报告和上行信息,请看以下代码
client.bind();
// 查询余额信息
Object req = client.createReq(AccountReq.class);
client.sendReq(req);
// 等待信息上行
Thread.sleep(27000);
// 关闭客户端
client.close();
}
public void sendMessage(String msg,String phoneNo) {
// 本Demo程序用时间作为客户端对消息的编号,建议客户自己定义
long clientID = System.currentTimeMillis();
// 生成消息实例
SmsMTReq req = (SmsMTReq) client.createReq( SmsMTReq.class );
// 设置客户端编号
req.setCatalogue(clientID);
// 设置内容
try{
req.setContent(msg.getBytes("gb2312"));
}catch(Exception e){
}
// 英文格式0,中文请填写15(GB2312);如果日文/韩文请转成Unicode,并填写8
req.setDataCoding(15);
// 设置发送的目标号码;多个用分号分割
req.setDestAddr(phoneNo);
try{
// 发送,使用异步发送
SmsMTRsp rsp = client.send(req, req);
if ( rsp == null )
System.out.println("send fail");
else
System.out.println(rsp.getMessageID() + "; " + rsp.getResult() );
}catch(Exception e){
}
}
public void destroy(){
client.close();
}
public void onAccountRsp(AccountReq req, AccountRsp rsp) {
System.out.println("onAccountRsp: " + rsp.getInformation());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -