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

本文以注册为例,在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在本地进行测试:

结果:

到此发送成功。

转自https://www.cnblogs.com/xkyzp/p/6203845.html

JAVA利用第三方平台发送短信验证码。相关推荐

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

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

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

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

  3. java短信验证平台_JAVA实现利用第三方平台发送短信验证码

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

  4. java集成阿里大于第三方平台发送短信验证码

    闲话不多说,言归正传.今天我要分享的是利用阿里大鱼实现网站和APP的短信验证.  阿里大鱼开放了很多的消息通知服务,包括短信通知,语音通知等.  阿里大鱼的短信发送官方API:https://api. ...

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

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

  6. C#利用第三方平台实现短信验证消息功能

    在最近合作开发过程中有用到验证码验证信息这个功能的需求,于是开始找短信服务的第三方平台,最后找到了网建短信通平台.其实实现过程很简单,先在该平台上注册用户后,它会给你五条免费的短信可使用.我们要连接第 ...

  7. 安卓小项目之EveryDay(6)----使用第三方平台获取短信验证码

    今天要实现的使用第三方平台获取验证码,值得高兴的是,完全免费哦,但是一个手机号12小时内只能发5条短信,我在录制视频时,已经将五条都用完了,于是找了他们的官方客服要了key和secret(客服很有耐心 ...

  8. php 请求第三方接口发送短信验证码及注册手机号码

    1:为什么要用短信验证码: 防范XSS和CSRF 2:php中怎样调用第三方接口(短信宝/京东万象/阿里云/容连云):post请求使用Curl();get请求使用file_get_contents() ...

  9. java调用移动api 发送短信验证码

    MasSendUtils.java public class MasSendUtils {private static Logger logger = Logger.getLogger(MasSend ...

最新文章

  1. python函数几个return语句_Python常用函数--return 语句-阿里云开发者社区
  2. 浅谈String和StringBuffer类:
  3. 深入理解javascript原型和闭包(2)——函数和对象的关系
  4. 递归 与 动态规划 区别
  5. mysql data too large_MySQL数据库之mysql 主从同步故障解决   Error 'Row size too large ( 8126)....
  6. 【转】UML的9种图例解析
  7. paip.提升用户体验---gcc c++ try catch不能捕获异常的解决--使用 SEH Ca6
  8. 使用mouse without borders无界键盘鼠标工具实现一套键盘鼠标控制两台电脑(非常的奈斯)
  9. informatica学习1-数据仓库,ETL,数据仓库工具Informatica介绍
  10. 推荐两款ios端磁力下载工具
  11. 查看连打印机的计算机名,查看局域网打印机ip地址的方法步骤
  12. Ubuntu 修改分辨率
  13. Python嵌套字典的遍历
  14. macbook pro的漏电
  15. lisp写标高线_cad自动写标高lisp
  16. python编程锦囊pdf百度云_python编程锦囊 相关实例(示例源码)下载 - 好例子网
  17. 取之盈:html网页音乐代码大全
  18. Nginx部署Vue项目动态路由刷新404
  19. 带着最完整的语音方案,Rokid CEO祝铭明三年后重返云栖大会
  20. Android获取网络视频文件缩略图

热门文章

  1. MURA数据集--医疗影像--斯坦福
  2. NR PUCCH(二)PUCCH format 2/3/4 and interlaced RB
  3. Python实现多维背包问题MKP算法(1)——动态多维背包
  4. 1000亩盐碱地试验田 国稻种芯-田国庆:拓荒精神荒滩变良田
  5. 【MyBatis系统拓荒笔记 - 1】MyBatis入门之混沌初开
  6. 单片机 定时器/计数器
  7. checkpoint-模型保存和加载
  8. 基于PLSQL的数据库备份方法
  9. 【图解数据结构】树和二叉树全面总结(上)
  10. Android判断是否为模拟器(实际测试过,夜神,mumu都没问题)