系统实现短信功能,一般都引用官方的接口,在这里,我对自己做过的东西贴在这里,确实自己曾经学习过这些,也是对自己的学习做个备份。
首先该代码是在 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
相关推荐
Java 短信接口开发是指使用 Java 语言编写的程序来实现短信接口的开发,目的是通过短信接口发送验证码短信、订单通知短信等。下面是 Java 短信接口开发的详细知识点: 一、短信接口类型 Java 短信接口开发中使用的...
在Java编程领域,调用短信接口发送短信是一项常见的任务,特别是在验证码验证、通知服务和营销活动中。本示例将详细讲解如何使用阿里大于(现更名为阿里云通信)提供的短信服务API来实现这一功能。阿里大于是阿里...
6. **异步发送与回调机制**: 为了提高系统性能,可以采用异步发送短信的方式,将发送任务放入工作队列,由后台服务处理。同时,可以通过回调函数或基于观察者模式监听发送状态,以便在短信发送成功或失败时执行相应...
【联通短信网关JAVA接口】是通信行业中一种重要的技术实现,它主要用于企业或服务提供商与运营商之间进行短信发送和接收的交互。JAVA接口是开发者利用Java编程语言与短信网关进行通讯的工具,使得应用程序能够方便地...
Java发送短信:应用华为短信平台接口发送手机短信。
Java短信接口是软件开发中一个重要的组成部分,尤其是在用户验证、安全提醒等方面发挥着关键作用。在本文中,我们将深入探讨Java实现短信接口的相关知识点,包括原理、步骤、库的使用以及最佳实践。 1. **短信服务...
在Java开发中,调用第三方短信接口是一项常见的任务,用于实现验证码发送、通知提醒等功能。以下将详细讲解这个过程中的关键知识点。 1. **HTTP请求**:大部分第三方短信平台提供的API是基于HTTP协议的,因此Java中...
基于电信smgp3.0协议的短信接口!简单测试通过
Java短信接口代码示例主要涉及的是在Java编程环境中如何与短信服务提供商进行通信,以便实现发送短信、尤其是发送验证码的功能。这个示例通常包括以下几个关键知识点: 1. **HTTP请求库**:Java中常见的用于发送...
Java短信平台发送源码是基于Java编程语言实现的,用于通过互联网网关接口与短信服务提供商进行通信,以便发送短信到指定的手机设备。在这个场景中,第一信息短信平台(www.1xinxi.cn)被用作服务提供商,用户可以在...
在IT行业中,Java短信接口调用是一个常见的任务,特别是在开发涉及用户验证或通知的应用程序时。这个"JAVA短信接口调用test工程"提供了一个框架,允许开发者快速集成短信验证码功能到他们的项目中。下面我们将详细...
【短信验证码_JAVA短信接口对接】是针对移动应用或网站安全验证的一种常见技术,通过将随机生成的一次性密码(OTP)发送到用户手机,确保用户身份的真实性。在这个专题中,我们将深入探讨如何使用JAVA语言集成秒嘀...
总的来说,使用华兴的Java模版HTTP接口发送短信涉及了Java网络编程、HTTP协议理解、JSON处理、异常处理等多个技术点。通过熟练掌握这些知识,你可以创建出稳定且高效的短信发送功能。在实际开发过程中,一定要遵循...
CMPP2.0短信网关发送短信代码是Java开发者用于与中国移动通信集团的短信服务进行交互的一种技术实现。CMPP(China Mobile Short Message Peer-to-Peer)2.0协议是移动运营商提供的一种通信协议,主要用于短信业务的...
Java代码实现短信猫发送短信是一项常见的通信应用,主要利用了串行通信技术。短信猫,又称GSM调制解调器,是一种硬件设备,通过USB或串口与计算机连接,可以实现短信的收发功能。在Java编程环境中,我们可以利用Java...
如果需要批量发送短信,可以考虑使用线程池或者异步处理方式,提高发送效率,同时避免对服务提供商接口的频繁调用导致的限制问题。 综上所述,这个Java工具类简化了短信发送的集成工作,只需简单配置和调用,就...
该项目为Java语言编写的短信发送解决方案,采用CMPP、SGIP、SMGP、SMPP等多种短信协议进行封装,通过提供简单的HTTP接口,实现短信的快速...它旨在降低用户使用门槛,使得用户仅需简单配置通道,即可便捷地发送短信。
Java 短信通信接口文档主要涉及了Java应用...这个Java短信通信接口文档涵盖了短信服务的基础操作,包括发送、接收、状态查询和账户管理等,为开发者提供了完整的API参考,方便集成到Java应用程序中实现短信通讯功能。
在Java开发中,有时我们需要与外部服务交互,例如调用移动接口来发送短信。这个过程通常涉及网络通信、HTTP请求和可能的JSON序列化与反序列化。以下将详细介绍如何在Java中实现这一功能。 首先,为了调用移动接口,...
标题中的“短信猫java,java集成短信接口”指的是在Java应用程序中使用短信猫设备来实现短信的发送功能。短信猫是一种硬件设备,它通过串行接口(如USB或COM口)连接到计算机,使得计算机可以通过AT命令控制进行短信...