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

本文以注册为例,在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实现利用第三方平台发送短信验证码相关推荐

  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使用中国网建发送短信验证码

    一.注册,登录以及注意事项. 1.1 中国网建网址:http://www.smschinese.cn 1.2 注册时用户名,以及姓名都可以随便写,邮箱只会验证存在与否,不会发验证码验证,手机号填自己的 ...

最新文章

  1. python如何获取信息_如何使用Python获取系统信息?
  2. can bus 中spn是什么_CP AUTOSAR功能栈简介NM网络管理(Can)
  3. 【LCT】洞穴勘测(luogu 2147/金牌导航 LCT-1)
  4. 将Redis集成到您的Spring项目中
  5. [渝粤教育] 西南科技大学 中国现代文学 在线考试复习资料
  6. tkinter如何lable重复显示到同一行中_如何创建包含 CAD 导入和选择的仿真 App
  7. Mybatis-04-结果集映射resultMap/动态SQL/关联查询
  8. pandas如何保存在excel里面_别找了,这是 Pandas 最详细教程了
  9. 使用rust调用c++静态库并编译nodejs包
  10. 机器学习NLP领域入门
  11. 经纬度距离、范围、方位角计算、坐标转换
  12. PROFINET的时钟同步(一)
  13. repo sync repo reset: error: entry ‘comand.py ‘ not uptodate . cannot merge
  14. EDA 电子设计自动化VHDL系列课程1--加【减】法器的设计
  15. Dogfight :从无人机视频中检测无人机
  16. 1024 祝我们快乐
  17. 【Shell】Shell 脚本自动输入密码的三种方式
  18. 前端总结·基础篇·CSS
  19. win11如何连接打印机 win11连接打印机的设置方法
  20. 0.《解密:网络营销推广实战和流量变现公式》

热门文章

  1. Microsoft Edge 嗯...无法访问此页面解决办法
  2. Win10各版本区别
  3. here-document at line y delimited by end-of-file
  4. Qt知识点梳理 —— 静态函数发送信号
  5. 轨物范世:华为手机的影像哲学
  6. 获取docker容器里面的root权限
  7. 诺布酒店在希腊的第一家酒店餐厅圣托里尼诺布酒店餐厅今年春季开业;爱彼迎邀旅居体验者住进西西里乡村慢生活 | 全球旅报...
  8. 电话号码被标记了怎么取消?标记取消最强攻略来了
  9. cpu排行计算机专业,cpu性能天梯图,详细教您电脑cpu排行榜
  10. video 满屏显示_HTML5 video播放器全屏(fullScreen)方法实例