Java实现发送短信验证验证码功能

这几天老大让我弄一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口(遵循短信平台的接口规范即可)。具体看代码:

使用HttpClient的时候需要在项目中引入:

commons-httpclient-3.1.jar

这个jar包,

项目结构:

1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法

/**
  * 文件说明
  * @Description:扩展说明
  * @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
  * @Version: V6.0
  */
package com.demo.util;

import java.io.IOException;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

/**
 * @Author: feizi
 * @Date: 2015年4月17日 上午9:26:34
 * @ModifyUser: feizi
 * @ModifyDate: 2015年4月17日 上午9:26:34
 * @Version:V6.0
 */
public class HttpRequestUtil {

    /**
     * HttpClient 模拟POST请求
      * 方法说明
      * @Discription:扩展说明
      * @param url
      * @param params
      * @return String
      * @Author: feizi
      * @Date: 2015年4月17日 下午7:15:59
      * @ModifyUser:feizi
      * @ModifyDate: 2015年4月17日 下午7:15:59
     */
    public static String postRequest(String url, Map<String, String> params) {
        //构造HttpClient的实例
        HttpClient httpClient = new HttpClient();

        //创建POST方法的实例
        PostMethod postMethod = new PostMethod(url);

        //设置请求头信息
        postMethod.setRequestHeader("Connection", "close");

        //添加参数
        for (Map.Entry<String, String> entry : params.entrySet()) {
            postMethod.addParameter(entry.getKey(), entry.getValue());
        }

        //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次
        httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false);

        //接收处理结果
        String result = null;
        try {
            //执行Http Post请求
            httpClient.executeMethod(postMethod);

            //返回处理结果
            result = postMethod.getResponseBodyAsString();
        } catch (HttpException e) {
            // 发生致命的异常,可能是协议不对或者返回的内容有问题
            System.out.println("请检查输入的URL!");
            e.printStackTrace();
        } catch (IOException e) {
            // 发生网络异常
            System.out.println("发生网络异常!");
            e.printStackTrace();
        } finally {
            //释放链接
            postMethod.releaseConnection();

            //关闭HttpClient实例
            if (httpClient != null) {
                ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown();
                httpClient = null;
            }
        }
        return result;
    }

    /**
     *  HttpClient 模拟GET请求
      * 方法说明
      * @Discription:扩展说明
      * @param url
      * @param params
      * @return String
      * @Author: feizi
      * @Date: 2015年4月17日 下午7:15:28
      * @ModifyUser:feizi
      * @ModifyDate: 2015年4月17日 下午7:15:28
     */
    public static String getRequest(String url, Map<String, String> params) {
        //构造HttpClient实例
        HttpClient client = new HttpClient();

        //拼接参数
        String paramStr = "";
        for (String key : params.keySet()) {
            paramStr = paramStr + "&" + key + "=" + params.get(key);
        }
        paramStr = paramStr.substring(1);

        //创建GET方法的实例
        GetMethod method = new GetMethod(url + "?" + paramStr);

        //接收返回结果
        String result = null;
        try {
            //执行HTTP GET方法请求
            client.executeMethod(method);

            //返回处理结果
            result = method.getResponseBodyAsString();
        } catch (HttpException e) {
            // 发生致命的异常,可能是协议不对或者返回的内容有问题
            System.out.println("请检查输入的URL!");
            e.printStackTrace();
        } catch (IOException e) {
            // 发生网络异常
            System.out.println("发生网络异常!");
            e.printStackTrace();
        } finally {
            //释放链接
            method.releaseConnection();

            //关闭HttpClient实例
            if (client != null) {
                ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown();
                client = null;
            }
        }
        return result;
    }
}

2、在创建一个类,生成验证码,然后传递相应的参数(不同的短信平台接口会有不同的参数要求,这个一般短信平台提供的接口文档中都会有的,直接看文档然后按要求来即可)

/**
  * 文件说明
  * @Description:扩展说明
  * @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
  * @Version: V6.0
  */
package com.demo.util;

import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author: feizi
 * @Date: 2015年4月17日 上午9:24:48
 * @ModifyUser: feizi
 * @ModifyDate: 2015年4月17日 上午9:24:48
 * @Version:V6.0
 */
public class SendMsgUtil {

    /**
     * 发送短信消息
      * 方法说明
      * @Discription:扩展说明
      * @param phones
      * @param content
      * @return
      * @return String
      * @Author: feizi
      * @Date: 2015年4月17日 下午7:18:08
      * @ModifyUser:feizi
      * @ModifyDate: 2015年4月17日 下午7:18:08
     */
    @SuppressWarnings("deprecation")
    public static String sendMsg(String phones,String content){
        //短信接口URL提交地址
        String url = "短信接口URL提交地址";

        Map<String, String> params = new HashMap<String, String>();

        params.put("zh", "用户账号");
        params.put("mm", "用户密码");
        params.put("dxlbid", "短信类别编号");
        params.put("extno", "扩展编号");

        //手机号码,多个号码使用英文逗号进行分割
        params.put("hm", phones);
        //将短信内容进行URLEncoder编码
        params.put("nr", URLEncoder.encode(content));

        return HttpRequestUtil.getRequest(url, params);
    }

    /**
     * 随机生成6位随机验证码
      * 方法说明
      * @Discription:扩展说明
      * @return
      * @return String
      * @Author: feizi
      * @Date: 2015年4月17日 下午7:19:02
      * @ModifyUser:feizi
      * @ModifyDate: 2015年4月17日 下午7:19:02
     */
    public static String createRandomVcode(){
        //验证码
        String vcode = "";
        for (int i = 0; i < 6; i++) {
            vcode = vcode + (int)(Math.random() * 9);
        }
        return vcode;
    }

    /**
     * 测试
      * 方法说明
      * @Discription:扩展说明
      * @param args
      * @return void
      * @Author: feizi
      * @Date: 2015年4月17日 下午7:26:36
      * @ModifyUser:feizi
      * @ModifyDate: 2015年4月17日 下午7:26:36
     */
    public static void main(String[] args) {
//      System.out.println(SendMsgUtil.createRandomVcode());
//      System.out.println("&ecb=12".substring(1));
        System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询400-069-2886(客服电话)【XXX中心】"));
    }
}

然后执行一下,一般的情况下参数传递正确,按照接口文档的规范来操作的话,都会发送成功的,手机都能收到验证码的,然后可能会出现的问题就是:发送的短信内容有可能会出现中文乱码,然后就会发送不成功,按照短信平台的要求进行相应的编码即可。一般都会是UTF-8编码。

完整代码已上传至csdn:

http://download.csdn.net/my

时间: 2024-07-31 10:40:04

Java实现发送短信验证验证码功能的相关文章

C# 发送短信验证吗

C# 发送短信验证吗,布布扣,bubuko.com

java实现发送短信

本程序是通过使用中国网建提供的SMS短信平台实现的(该平台目前为注册用户提供5条免费短信,3条免费彩信,这足够用于我们测试用了.在使用前需要注册,注册地址为http://sms.webchinese.cn/reg.shtml) 下面是实现发送短信的java源码: package com.weixinsf.utils; /** * <p>Title: 短信发送 </p> * * <p>Description: 发送短信的工具类 </p> * * @author

React 60s倒计时(发送短信验证按钮)

导入:(antd组件——Form表单) import { Button, Form, Input } from 'antd'; const FormItem = Form.Item; state = { loading: false, yztime: 59, }; //倒计60s count = () => { let { yztime } = this.state; let siv = setInterval(() => { this.setState({ yztime: (yztime--

Python使用redis-手机验证接口-发送短信验证

python使用redis 安装依赖 >: pip3 install redis 直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379) 连接池的使用 import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool) 支持高并发 缓存使用:要额外的安装django_redis模块

[麦先生]Laravel框架实现发送短信验证

今天在做到用户注册和个人中心的安全管理时,我实现借助第三方短信平台在Laravel框架中进行手机验证的设置;  由于我做的是一个为客户提供医疗咨询和保健品网站,所以我们对客户个人隐私的保护显得尤为重要,因而在客户登录后进入个人中心前,采用中间页的形式通过手机验证的方式对是否是其本人进行判断,以期降低客户因为帐号密码丢失而遭到个人信息泄漏的风险; 根据用户登录的ID查询数据库表格中客户填写的手机号码,并展示在中间页的手机号码上,由用户确认后点击发送短信,若服务器返回的状态码为2(注:互易无线平台发

[Android]手机短信验证功能

介绍 短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息验证支付等.短信验证利用短信验证码来注册会员,大大降低了非法注册,很大程度上提高了用户账户的安全性. 目前市面上已经有了很多提供短信验证的服务商,有收费的,也有免费的.如果是个人的开发者,用免费的是最划算的了!下面我就介绍一个免费的短信验证平台---Mob.com Mob平台提供的短信验证功能可以实现快速的验证和匹配通讯录好友功能,并且能为每个app每天提供10000条免费短信验证.很多开发者都想在自己的app中集成短信验证

php梦网科技短信平台手机短信验证功能实现

1.表单传输页面 <?php session_start(); error_reporting(E_ALL & ~E_NOTICE); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http:

ASP.NET MVC+Bootstrap 实现短信验证

短信验证大家都已经很熟悉了,基本上每天都在接触手机短信的验证码,比如某宝,某东购物,网站注册,网上银行等等,都要验证我们的手机号码真实性.这样做有什么好处呢. 以前咱们在做网站的时候,为了提高用户注册的质量,防止用户恶意注册,都会设置一些小阻碍,如网页验证码.邮件认证等等.但是道高一尺魔高一丈,很快网站的这些设置都被一些网络黑客利用注册机逐一攻破,这些功能也就随之变成了摆设. 但是魔高一丈道高两丈,随着移动设备的普及,短信验证的功能横空出世.他的出现轻松的排除了传统网站验证码的弊端,还提升了网站

Android之短信验证

一.目标 实现Android短信验证 二.下面用一个简单的案例来完成这个功能 1.首先下载短信验证SDK 下载短信验证SDK官网地址:http://www.mob.com 找到SDK下载,在SMS里找到"SMSSDK For Android"下载, 如图: 2.下载完成之后: 将SMSSDK文件夹下的两个.jar文件和.aar文件复制到你项目的Project->app->libs目录下 如图所示: 3.在Android->Gradle Scripts->buli