前段时间自己做的一个小项目中,涉及到用短信验证码登录、注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来。

本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能。

发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较。

为了防止有广告嫌疑这里就不说短信平台是哪个了。

一般的第三方短信平台都会有他们自己的短信接口,只要读懂他们的接口稍作稍作改变就能满足自己的需求。

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 getMessageStatus(String phone)throws Exception{

HashMap m=new HashMap();

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 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实现利用第三方平台发送短信验证码相关推荐

  1. Windows mobile PPC,利用tmail.exe发送短信、彩信、邮件

    利用tmail.exe发送短信.彩信.邮件 在有关短信.邮件的开发中,我们经常会使用MAPI来开发,但此次在项目开发时却遇到些问题,就是首先MAPI不支持发送彩信,其次使用MAPI需要自己开发相应的U ...

  2. java短信通知_通过第三方接口发送短信验证码/短信通知(推荐)

    需求:将首次交付密码为公共默认密码的方式改为点击入职功能,用短信方式发送系统自动生成的八位含数字.大小写字母和特殊符号生成的密码.短信发送服务由云通信http://www.yuntongxun.com ...

  3. 项目使用第三方插件发送短信-------建周短信SDK(Software Development Kit)

    问题:项目中使用第三方插件发送短信给指定的电话号码phone 解决:使用第三方的插件,比如发送短信,建周短信SDK Java项目中使用 JZMessageUtil.java package com.v ...

  4. 利用第三方平台验证码进行识别

    前言:这边是利用第三方平台"超级鹰"进行图片识别,超级鹰平台是收费平台,个人觉得还是很便宜的比较良心的,首先需要先去超级鹰注册账号,并充值金额(建议先充值一块钱试试感觉先) 识别代 ...

  5. stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭

    stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭 接触stm32已经有一年半的时间了,从最开始的stm32F103ZET ...

  6. 微信公众号开发之微信公众平台与公众号第三方平台区别

    微信公众号开发分为微信公众平台和公众号第三方平台. 首先需要一个认证服务号,然后在设置,基本配置里面配置公众号开发信息和服务器配置. 这是我们会得到开发者ID(AppID),开发者密码(AppSecr ...

  7. JAVA实现利用第三方平台发送短信验证码

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...

  8. JAVA利用第三方平台发送短信验证码

    本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过se ...

  9. JAVA利用第三方平台发送短信验证码。

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...

最新文章

  1. Python中的元编程:一个关于修饰器和元类的简单教程
  2. Python与C语言基础对比(Python快速入门)
  3. 有关java的读书软件吗_我手机没JAVA,能用什么读书软件、
  4. sdut 2139BFS
  5. 聊聊高并发(二十五)解析java.util.concurrent各个组件(七) 理解Semaphore
  6. 化繁为简:数据库运维人员应该知道这些...
  7. 处于停机等非正常状态_关于消防栓稳压泵不停机故障的思考
  8. SQLI-LABS(二)
  9. 女朋友也能看懂的Zookeeper分布式锁原理
  10. java Operator ‘/‘ cannot be applied to ‘java.math.BigInteger‘, ‘int‘
  11. 移动硬盘安装win10操作系统
  12. Android开发效率提升利器-ButterKnife最全使用详解及ButterKnife插件的使用
  13. Java的集合有什么?
  14. 读心术程序c语言流程图,无聊的时候写的读心术小程序
  15. 计算机基础课小论文,计算机基础课程论文参考文献大全 哪里有计算机基础课程参考文献...
  16. 前端开发【短信分享】——H5调起短信,发送指定内容到指定号码
  17. Linux 系统下可以注释标注的pdf阅读器安装、比较和推荐
  18. fix8源码分析之日志模块
  19. 惠普JAVA工程师给想从事JAVA开发的朋友一点工作心得
  20. 使用JQuery实现淘宝导航栏效果

热门文章

  1. 结构流体多物理场耦合高性能仿真计算集群配置推荐
  2. e-charts 3D饼图
  3. linux+swig+python,swig-python对C++的接口
  4. C++笔记(基础3):继承
  5. AE脚本常用学习第1天
  6. ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑
  7. Matlab 原始高斯消去法函数
  8. 扒一扒net.cn这个后缀域名
  9. DHCP Snooping原理和配置
  10. 漫画 | 数字人民币究竟会颠覆谁?