`

java短信接口 ,发送短信(方式一)

阅读更多

系统实现短信功能,一般都引用官方的接口,在这里,我对自己做过的东西贴在这里,确实自己曾经学习过这些,也是对自己的学习做个备份。

首先该代码是在 spring 项目上开发的,需要 spring 相关包以及 log4j 相关包。

1、资源配置文件

 

#短信配置
sms.spCode=xxxxx
sms.loginName=xxxxx
sms.password=xxxxx
sms.sendBasicUrl=xxxxx
sms.searchBasicUrl=xxxxx

2、读取资源配置文件

package sms;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Properties;


public class ProConfig {

	private static Properties props = null;
	static {
		props = new Properties();
		  try {  
			  URL url = ProConfig.class.getClassLoader().getResource("sms.properties");
			  load(url.openStream());
		  } catch (Exception e) {   
			  System.out.println("读取配置信息出错:"+e.getMessage());
		  }   
	}
	
	private static void load(InputStream inputStream) throws Exception {
		  props.load(new InputStreamReader(inputStream, "UTF-8")); 
	}

	
	public static String getProperty(String key) {
		return getProperty(key, "");
	}
	
	
	public static String getProperty(String key, String defaultValue) {
		return props.getProperty(key, defaultValue);
	}
}

 

3、短信构建对象

package sms;

import java.util.ArrayList;
import java.util.List;



/**
 * <p>短信构建对象 </p>
 * 
 * @author Selina
 * @qq 418114362
 */
public class SmsBilder {
	/**
	 * 手机号码(多个号码用”,”分隔),最多1000个号码
	 */
	private String userNumber;
	/**
	 * 短信内容, 最大700个字符
	 */
	private String messageContent;
	
	/**
	 * 接收者短信集合
	 */
	private List<String> toSmsList;
	/**
	 * 获取一个短信构建对象
	 * @return
	 */
	public static SmsBilder getInstanBilder(){
		return new SmsBilder();
	}
	
	/**
	 * 获取手机号码
	 * @return
	 */
	public String getUserNumber() {
		return userNumber;
	}
	
	/**
	 * 设置手机号码
	 * @param messageContent 
	 */
	public SmsBilder setUserNumner(String userNumber) {
		this.userNumber = userNumber;
		return this;
	}
	
	/**
	 * 获取短信内容
	 * @return
	 */
	public String getMessageContent() {
		return messageContent;
	}
	
	/**
	 * 设置短信内容
	 * @param messageContent 
	 */
	public SmsBilder setMessageContent(String messageContent) {
		this.messageContent = messageContent;
		return this;
	}
	
	/**
	 * 获取接收短信列表
	 * @return
	 */
	public List<String> getSmsList() {
		return toSmsList;
	}
	
	/**
	 * 添加接收短信
	 * @param email
	 */
	public SmsBilder addToSmsList(String sms) {
		if(this.toSmsList == null){
			this.toSmsList = new ArrayList<String>();
		}
		this.toSmsList.add(sms);
		return this;
	}
	
	
	
	/**
	 * 执行后台发送
	 */
	public void sendInQueue(){
		SmsQueue.addMailTask(this);
	}
	
	/**
	 * 执行即刻发送
	 */
	public String send(){
		return SmsQueue.smsSend(this);
	}
	
}

 4、短信配置

package sms;

import org.apache.commons.io.Charsets;


/**
 * <p>短信配置</p>
 * 
 * @author Selina
 * @qq 418114362
 */
public class SmsConfig {
	/**
	 * 企业编号
	 */
	public static String spCode ;
	/**
	 * 用户名称
	 */
	public static String loginName;
	
	/**
	 * 用户密码
	 */
	public static String password;
	
	/**
	 * 字符集
	 */
	public static String charset = Charsets.UTF_8.name();
	
	
	/**
	 * 超时时间
	 */
	public static String timeout = "25000";
	
	/**
	 * 短信发送调用地址
	 */
	public static String sendBasicUrl;
	
	/**
	 * 短信剩余条数调用地址
	 */
	public static String searchBasicUrl;
	
	static {
		spCode = ProConfig.getProperty("sms.spCode");
		loginName = ProConfig.getProperty("sms.loginName");
		password = ProConfig.getProperty("sms.password");
		sendBasicUrl = ProConfig.getProperty("sms.sendBasicUrl");
		searchBasicUrl = ProConfig.getProperty("sms.searchBasicUrl");
	}
	
}

 5、短信工具类

package sms;




import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * <p>短信工具类 </p>
 * 
 * @author Selina
 * @qq 418114362
 */
public class SmsQueue extends AbstractQueue<SmsBilder>{
	
	
	private static SmsQueue queue = new SmsQueue();
	
	static {
		queue.start();
	}
	
	private SmsQueue() {
	}
	
	/**
	 * 添加短信任务
	 * @param smsBilder 短信构建对象
	 */
	public static void addMailTask(SmsBilder smsBilder) {
		queue.addTask(smsBilder);
	}
	
	public void runTask(SmsBilder smsBilder) {
		SmsQueue.smsSend(smsBilder);
	}
	
	public static String smsSend(SmsBilder smsBilder){
		String errorInfo = null;
		Throwable error = null;
		try{
			//在这里执行短信发送
			String url = SmsConfig.sendBasicUrl;
			Map<String, String> params = new HashMap<String, String>();
			params.put("SpCode", SmsConfig.spCode);
			params.put("LoginName", SmsConfig.loginName);
			params.put("Password", SmsConfig.password);
			params.put("UserNumber", smsBilder.getUserNumber());
			params.put("MessageContent", smsBilder.getMessageContent());
			HttpRemote.doSomething(url, params);
		}catch(Exception e){
			errorInfo = "短信发送错误";
			error = e;
		}finally{
			if(error!=null){
				
			}
		}
		return errorInfo;
	}
	
}

 6、5点引用的两个工具类

package sms;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;


/**
 * <p>抽象阻塞队列 </p>
 * 
 * @author Selina
 * @qq 418114362
 */
public abstract class AbstractQueue<E> implements Runnable, DisposableBean {
	protected final Logger logger = LoggerFactory.getLogger(this.getClass());
	protected BlockingQueue<E> queue;
	
	private boolean started = false;

	public AbstractQueue() {
		this(30);
	}

	public AbstractQueue(int queueSize) {
		queue = new ArrayBlockingQueue<E>(queueSize);
	}

	/**
	 * 添加任务
	 * 
	 * @param task
	 * @return
	 */
	public boolean addTask(E task) {
		return queue.offer(task);
	}

	public void destroy() throws Exception {
		int size = queue.size();
		if (size == 0) {
			logger.info("queue size=0, exit.");
			return;
		}
		logger.info("queue still has size=" + size + ", wait 10s.");
		wait(10);
		logger.info("queue has size=" + queue.size() + ", still exit.");
	}

	/**
	 * 获取队列当前长度
	 * 
	 * @return
	 */
	public int getQueueSize() {
		return queue.size();
	}

	public void run() {
		this.started = true;
		while (true) {
			E task = null;
			try {
				task = queue.take();
				runTask(task);
			} catch (Exception e) {
				logger.error("Exception occur while running task", e);
			}
		}
	}
	
	/**
	 * 开始运行
	 */
	public synchronized void start(){
		if(started){
			logger.warn("the queue has stsrted");
			return ;
		}
		new Thread(this).start();
	}
	
	/**
	 * 是否在运行
	 * @return
	 */
	public boolean isStarted(){
		return started;
	}

	/**
	 * 任务执行方法(抽象方法)
	 * 
	 * @param task
	 */
	protected abstract void runTask(E task);
	
	

}

 

package sms;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

/**
 * <p>公共类</p>
 * 
 * @author Selina
 * @qq 418114362
 */
public class HttpRemote {
	public static HttpClient doSomething(String url, Map<String, String> object)
			throws Exception {

		HttpClient httpclient = new DefaultHttpClient();
		try {
			HttpPost post = new HttpPost(url);
			List<NameValuePair> params = convertParam(object);
			post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
			HttpResponse response = httpclient.execute(post);
			Header locationHeader = response.getFirstHeader("Location");
			if (locationHeader == null) {
				return null;
			}
			int statusCode = response.getStatusLine().getStatusCode();
			if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY
					|| statusCode == HttpStatus.SC_MOVED_TEMPORARILY
					|| statusCode == HttpStatus.SC_SEE_OTHER
					|| statusCode == HttpStatus.SC_TEMPORARY_REDIRECT) {
				String newUrl = response.getLastHeader("Location").getValue();
			}
		} catch (Exception e) {
		}
		return httpclient;
	}

	


	private static List<NameValuePair> convertParam(Map<String, String> params) {
		List<NameValuePair> list = new ArrayList<NameValuePair>();
		if (params != null) {
			for (Map.Entry<String, String> entry : params.entrySet()) {
				list.add(new BasicNameValuePair(entry.getKey(), entry
						.getValue()));
			}
		}
		return list;
	}
}

 

综合以上代码,下面我们就来进行短信发送:

String userPhones = "";
	userPhones="号码1,号码2";
	SmsBilder smsBilder = new SmsBilder();
	smsBilder.setUserNumner(userPhones);
	smsBilder.setMessageContent("Hello word!");
	smsBilder.send();

 这样就可以发送短信啦!

引用的短信服务接口为:http://ums.zj165.com/im/sp.jsp

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics