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

发布时间 - 2026-01-10 21:58:42    点击率:

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

本文以注册为例,在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实现短信发送验证码功能  # java实现发送短信验证码  # Java开发完整短信验证码功能的全过程  # Java实现用户短信验证码登录功能实例代码  # Java实现短信验证码服务的完整代码示例  # 自己的  # 第三方  # 短信平台  # 是在  # 发送短信  # 就能  # 客户端  # 稍作  # 短信发送  # 头文件  # 他们的  # 这一  # 会有  # 看了  # 基础上  # 已被  # 其他的  # 似懂非懂  # 很容易 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Android okhttputils现在进度显示实例代码  详解阿里云nginx服务器多站点的配置  如何在云主机上快速搭建网站?  微信小程序 HTTPS报错整理常见问题及解决方案  如何在万网自助建站平台快速创建网站?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  ,在苏州找工作,上哪个网站比较好?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  javascript读取文本节点方法小结  怎样使用JSON进行数据交换_它有什么限制  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  如何在阿里云香港服务器快速搭建网站?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel如何记录自定义日志?(Log频道配置)  php485函数参数是什么意思_php485各参数详细说明【介绍】  php结合redis实现高并发下的抢购、秒杀功能的实例  微信小程序 scroll-view组件实现列表页实例代码  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  ,网页ppt怎么弄成自己的ppt?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  如何在万网利用已有域名快速建站?  如何快速搭建二级域名独立网站?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Android Socket接口实现即时通讯实例代码  简历在线制作网站免费版,如何创建个人简历?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel怎么判断请求类型_Laravel Request isMethod用法  如何用虚拟主机快速搭建网站?详细步骤解析  WEB开发之注册页面验证码倒计时代码的实现  如何快速搭建FTP站点实现文件共享?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】