JAVA利用第三方平台发送短信验证码
本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能。
发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较。
为了防止有广告嫌疑这里就不说短信平台是哪个了。
一般的第三方短信平台都会有他们自己的短信接口,只要读懂他们的接口稍作稍作改变就能满足自己的需求。
首先将短信平台接口代码列出:这里要下载三个jar包commons-logging-1.1.1.jar,commons-httpclient-3.1.jar,commons-codec-1.4.jar
import java.io.UnsupportedEncodingException; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod;public class SendMsg_webchinese {public static void main(String[] args)throws Exception {HttpClient client = new HttpClient(); PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); //该第三方短信服务地址 post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码 NameValuePair[] data ={ new NameValuePair("Uid", "本站用户名"),new NameValuePair("Key", "接口安全秘钥"),new NameValuePair("smsMob","手机号码"),new NameValuePair("smsText","验证码:8888")}; post.setRequestBody(data);client.executeMethod(post); Header[] headers = post.getResponseHeaders(); int statusCode = post.getStatusCode(); System.out.println("statusCode:"+statusCode); for(Header h : headers) { System.out.println(h.toString()); } String result = new String(post.getResponseBodyAsString().getBytes("gbk")); System.out.println(result); //打印返回消息状态 post.releaseConnection();}}
不难看出,我们想要发送的信息是在这行代码里面:NameValuePair[] data ={ new NameValuePair("Uid", "本站用户名"),new NameValuePair("Key", "接口安全秘钥"),new NameValuePair("smsMob","手机号码"),new NameValuePair("smsText","验证码:8888")};
该接口中还有一个result信息,它的作用是告诉用户短信发送的状态,1表示发送成功,其他的小于0的为失败,这里只要知道1是成功即可。
我们实际的操作中,验证码肯定是要我们自己生成的。将result信息与验证码一起得到,于是很容易想到用一个HashMap集合。下面是以项目自己的需求对接口的更改:
import java.util.HashMap;import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod;import com.yuetile.utils.VerifyingCodeGenerator; public class SendMsg_webchineseController {public static HashMap<String,String> getMessageStatus(String phone)throws Exception{ HashMap<String,String> m=new HashMap<String,String>(); HttpClient client = new HttpClient(); PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码 String code=VerifyingCodeGenerator.generate();//验证码 NameValuePair[] data ={ new NameValuePair("Uid", "****"),new NameValuePair("Key", "******"),new NameValuePair("smsMob",phone),new NameValuePair("smsText","您正在注册本站会员,本次验证码为:"+code+""+"有效时间为5分钟")}; m.put("code", code); post.setRequestBody(data);client.executeMethod(post); Header[] headers = post.getResponseHeaders(); int statusCode = post.getStatusCode(); System.out.println("statusCode:"+statusCode); for(Header h : headers) { System.out.println(h.toString()); } String result = new String(post.getResponseBodyAsString().getBytes("gbk")); System.out.println(result); //打印返回消息状态 m.put("result", result);post.releaseConnection(); return m;}}
***表示的是在第三方平台注册的账号密码。
ACTION层:
/** * @author hang * @Decription 注册,发送短信验证码,保存到Session中 * @param 封装客户端请求 POST * @return 返回状态参数 * @throws Exception */ @ResponseBody @RequestMapping(value = UrlDefine.Register.CHECKMESSAGEWORK, method = RequestMethod.POST) public Object SendCheckMessage(HttpServletRequest request, @RequestBody UserBean u) throws Exception { String message = "发送成功"; String phone=u.getTelephone(); //获取到客户端发来的手机号 UserBean user = userService.getByPhone(phone); if (user != null) { message = "该手机号已被注册"; return new Response(Status.ERROR, message); } else { HashMap<String, String> m = SendMsg_webchineseController.getMessageStatus(phone); //应用发送短信接口 String result = m.get("result"); //获取到result值 if (result.trim().equals("1")) { //如果为1,表示成功发送 String code = m.get("code"); //获取发送的验证码内容 logger.info("发送的验证码:"+code); //打印日志 HttpSession session = request.getSession(); //设置session session.setAttribute("code", code); //将短信验证码放到session中保存 session.setMaxInactiveInterval(60 * 5);//保存时间 暂时设定为5分钟 return new Response(Status.SUCCESS, message); } else { message = "短信发送失败"; return new Response(Status.ERROR, message); } } }
这样就能发送成功了。
测试:
利用POSTMAN在本地进行测试:
结果:
到此发送成功。
JAVA利用第三方平台发送短信验证码相关推荐
- JAVA利用第三方平台发送短信验证码。
前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...
- JAVA实现利用第三方平台发送短信验证码
前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...
- java短信验证平台_JAVA实现利用第三方平台发送短信验证码
前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...
- java集成阿里大于第三方平台发送短信验证码
闲话不多说,言归正传.今天我要分享的是利用阿里大鱼实现网站和APP的短信验证. 阿里大鱼开放了很多的消息通知服务,包括短信通知,语音通知等. 阿里大鱼的短信发送官方API:https://api. ...
- java短信通知_通过第三方接口发送短信验证码/短信通知(推荐)
需求:将首次交付密码为公共默认密码的方式改为点击入职功能,用短信方式发送系统自动生成的八位含数字.大小写字母和特殊符号生成的密码.短信发送服务由云通信http://www.yuntongxun.com ...
- C#利用第三方平台实现短信验证消息功能
在最近合作开发过程中有用到验证码验证信息这个功能的需求,于是开始找短信服务的第三方平台,最后找到了网建短信通平台.其实实现过程很简单,先在该平台上注册用户后,它会给你五条免费的短信可使用.我们要连接第 ...
- 安卓小项目之EveryDay(6)----使用第三方平台获取短信验证码
今天要实现的使用第三方平台获取验证码,值得高兴的是,完全免费哦,但是一个手机号12小时内只能发5条短信,我在录制视频时,已经将五条都用完了,于是找了他们的官方客服要了key和secret(客服很有耐心 ...
- php 请求第三方接口发送短信验证码及注册手机号码
1:为什么要用短信验证码: 防范XSS和CSRF 2:php中怎样调用第三方接口(短信宝/京东万象/阿里云/容连云):post请求使用Curl();get请求使用file_get_contents() ...
- java调用移动api 发送短信验证码
MasSendUtils.java public class MasSendUtils {private static Logger logger = Logger.getLogger(MasSend ...
最新文章
- 浅谈分布式系统一致性之3PC协议
- 通过互信息思想来缓解类别不平衡问题
- ANDROID 4.0 SDK R14 模拟器
- virtualbox 安装 虚拟机的时候报错不能创建新任务
- Windows Phone 7 开发 31 日谈——第13日:位置服务
- oschina压缩工具
- 这是一个定时器,定时执行一次,用在定时发送邮件
- 计算机更新过后cad,升级windows10系统后cad无法打开的两种解决方法
- Unity 3D 特效学习记录
- support vector regression(SVR)支持向量回归
- 百度网盘提取码_利用审查元素自定义百度网盘提取码教程 无需工具
- 数字图像处理,中值滤波和均值滤波及其改进算法的C++实现
- php unpack 详解,【PHP】 pack unpack 详解
- xcode8 上传app到appStore 遇到 error ITMS90096
- HDU 5869 Different GCD Subarray Query (数学gcd+树状数组离线查询)
- Hazelcast IMDG参考中文版手册-第七章-分布式数据结构
- java 僵尸进程_神奇的Java僵尸(defunct)进程问题排查过程
- Linux信号处理简析
- 安卓(调试)有线投屏、wifi投屏到电脑笔记
- highchart 组织结构图
热门文章
- Linux下开源pcb设计软件,KiCAD更好用的开源免费的原理图、PCB设计软件
- 华为S9306交换机版本升级及补丁安装步骤
- Linux错误:warning: here-document at line 5 delimited by end-of-file (wanted `EOF`
- 漫漫软考路-考后总结
- Git恢复已删除文件
- 用手机APP来养一盆绿植,这个黑科技智能花盆实在是太炫酷 | 钛空舱
- 【火车头采集】如何采集一个网页的多张图片并且下载
- 底层文件I/O和ANSI标准I/O的区别
- 狂胜——Redis学习笔记
- 故事版(StoryBoard)的学习-----使用prepareForSegue方法