⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sms.java.svn-base

📁 实现很多功能 实现很多功能 实现很多功能
💻 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 + -