java短信发送接口开发
2017-03-08 18:06
393 查看
发送短信验证码几乎是现在每个网站都要使用到的一个功能,如注册的时候要发送短息验证码,修改密码的时候也要发送。但是第三方提供给我们的接口只是一个方法而已,并没有提供给我们更多的一个良好,可读性强的接口,如何设计一个阅读性强,扩展性高的接口。那么我们就需要设计两个接口:
一.SmsSender 接口,对接第三方短信,可以扩展支持不同的实现,如创蓝,leancloud等(相当于dao层),这个接口只负责实现发送短信,不负责其他的逻辑业务
二.SmsService 接口,发送短信的service层,这一层负责逻辑业务,如判断参数的正确性,统计短信发送的条数,但是最主要的功能就是,当需要修改第三实现接口的时候,只需要修改交注入的类,而不用修改代码。就可以实现第三短信提供商的切换。
1.SmsSender 接口,通用的sms类,
2.SmsSender 接口的实现类ClSmsSender,该类对接的是第三方短信提供商的具体实现方法,如本文使用创蓝短信
3.SmsService 类,发送短信的service层接口,有人感觉这个接口多余,客官,静下心来往下看。
4.SmsService接口的实现类SmsServiceImpl
一.SmsSender 接口,对接第三方短信,可以扩展支持不同的实现,如创蓝,leancloud等(相当于dao层),这个接口只负责实现发送短信,不负责其他的逻辑业务
二.SmsService 接口,发送短信的service层,这一层负责逻辑业务,如判断参数的正确性,统计短信发送的条数,但是最主要的功能就是,当需要修改第三实现接口的时候,只需要修改交注入的类,而不用修改代码。就可以实现第三短信提供商的切换。
1.SmsSender 接口,通用的sms类,
public interface SmsSender { /** * 中国区内为86,设计为国际化 */ public static String Zone_CN = "86"; /** * 发送短信 * @param zone 地区 * @param mobile 手机号码 * @param template 模板 * @return */ public boolean send(String zone, String mobile, String template); public boolean send(String zone, String mobile, String template, Map params); /** * 发送验证码 */ public boolean sendVerify(String zone, String mobile, String verCode); }
2.SmsSender 接口的实现类ClSmsSender,该类对接的是第三方短信提供商的具体实现方法,如本文使用创蓝短信
@Service public class ClSmsSender implements SmsSender { private static final Logger log = LoggerFactory.getLogger(ClSmsSender.class); @Value("#{properties['cl_url']}") private String url; @Value("#{properties['cl_user']}") private String user; @Value("#{properties['cl_pwd']}") private String pwd; @Override public boolean send(String zone, String acct, String msg) { return send(zone, acct, msg, null); } @Override public boolean send(String zone, String acct, String msg, Map params) { if (CommonUtil.isNotEmpty(zone) && Zone_CN.equals(zone) && Validator.isMobile(acct)) { try { String str = batchSend(acct, msg, true, null); if (str != null && str.length() > 0) { return true; } } catch (Exception e) { e.printStackTrace(); } } else { ;// do nothing; //后期改成用国际短信接口 } return false; } @Override public boolean sendVerify(String zone, String mobile, String verCode) { String msg = "【253云通讯】您好,你的验证码是" + verCode; if (CommonUtil.isNotEmpty(zone) && Zone_CN.equals(zone) ) { try { String str = batchSend(mobile, msg, true, null); if (str != null && str.length() > 0) { return true; } } catch (Exception e) { e.printStackTrace(); } } else { ;// do nothing; //后期改成用国际短信接口 } return false; } /** * 真正的发送方法 */ private String batchSend(String mobile, String msg, boolean needstatus, String extno) throws Exception { HttpClient client = new HttpClient(new HttpClientParams(), new SimpleHttpConnectionManager(true)); GetMethod method = new GetMethod(); try { URI base = new URI(url, false); method.setURI(new URI(base, "HttpBatchSendSM", false)); method.setQueryString(new NameValuePair[] { new NameValuePair("account", user), new NameValuePair("pswd", pwd), new NameValuePair("mobile", mobile), new NameValuePair("needstatus", String.valueOf(needstatus)), new NameValuePair("msg", msg), new NameValuePair("extno", extno), }); int result = client.executeMethod(method); if (result == HttpStatus.SC_OK) { InputStream in = method.getResponseBodyAsStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) != -1) { baos.write(buffer, 0, len); } String s = URLDecoder.decode(baos.toString(), "UTF-8"); return s; } else { throw new Exception("HTTP ERROR Status: " + method.getStatusCode() + ":" + method.getStatusText()); } } finally { method.releaseConnection(); } } }
3.SmsService 类,发送短信的service层接口,有人感觉这个接口多余,客官,静下心来往下看。
public interface SmsService { /** * 发送短信 * @param zone 地区 * @param acct 号码,可以是多个号码,用英文逗号连接 * @param template 短信模板 * @return */ boolean send(String zone, String acct, String template); boolean send(String zone, String acct, String template, Map params); /** * 发送验证码 */ boolean sendVerify(String zone, String acct, String verCode); }
4.SmsService接口的实现类SmsServiceImpl
@Service public class SmsServiceImpl implements SmsService { /** * 具体的第三方实现类 * 提高扩展性,如果要更换第三方接口,这个类的所有代码都不需要修改,只需要修改注解就可以了 */ @Autowired private SmsSender sms; @Override public boolean send(String zone, String acct, String template) { /* * 业务层 * 1.判断发送过来的acct是否是用英文逗号连接起来的手机号码字符串 * 2.统计发送短信的条数 * 这些业务都在这里记录 */ // String[] mobileArry = acct.split(","); // for (String mobile : mobileArry) { // // } sms.send(zone, acct, template); return true; } @Override public boolean send(String zone, String acct, String template, Map params) { return sms.send(zone, acct, template, params); } @Override public boolean sendVerify(String zone, String acct, String verCode) { return sms.sendVerify(zone, acct, verCode); } }
相关文章推荐
- java 根据接口发送手机短信
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- Java调用WebService接口实现发送手机短信验证码功能
- java通过短信接口发送短信
- JAVA利用飞信接口发送短信
- java 短信接口开发
- JAVA开发 电信支付系统短信模块精准发送短信
- java程序实现短信发送(可调用免费短信接口)
- JAVA利用SMS发送短信功能模块的开发
- java利用飞信接口发送短信
- Java调用WebService接口实现发送手机短信验证码功能
- 跟阿根一起学Java Web开发四:邮件发送与短信发送的实现
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- JAVA利用飞信接口发送短信
- 27-JAVA利用飞信接口发送短信
- java 发送短信sms实现接口
- Java调用WebService接口实现发送手机短信验证码功
- Java使用【网易云信】短信接口,给手机用户发送并校验验证码
- java调接口实现发送手机短信验证码功能,手机验证码,接口调用