JAVA利用第三方平台发送短信验证码
来源:互联网 发布:3d建模编程 编辑:程序博客网 时间:2024/06/02 12:43
本文以注册为例,在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(); //设置sessionsession.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利用第三方平台发送短信验证码。(转发用来学习)
- Java 利用第三方平台实现发送短信功能
- 使用第三方平台短信接口实现发送验证码
- 第三方发送短信验证
- java第三方获取短信验证码
- Java通过第三方平台发送和验证手机验证码
- 利用第三方服务平台实现简单的短信验证功能
- 第三方短信验证
- 第三方短信验证
- 短信发送---ihuyi.com 的第三方平台
- 发送短信验证码到手机(阿里大于平台) java
- java实现SMS短信平台发送验证码功能
- 利用阿里大于发送短信验证码(java)
- libopencv_core.so.2.4 cannot open the object file的解决办法
- Po学校C++第二课课堂笔记
- APP二维码渠道统计解决方案
- C语言 - 自定义大小写字符转换函数的实现
- RichTextBox复制一段带格式的Excel的文本内容,粘贴后一定长度后没有\t(制表符)的处理方式
- JAVA利用第三方平台发送短信验证码
- 知识点四:JQuery--操作class ==addClass(),removeClass(), toggleClass(),css()
- Android 中查看logcat的另一种方式
- HDU2115-I Love This Game
- POJ 2049Tautology(模拟)
- Choreographer 丢帧计算
- java web中 /代表的目录
- request的getParameter() 和getAttribute()方法的区别
- perl 判断不包含某字符串