java实现发送短信验证码

最近用学习了一下调用第三方接口发送短信验证码的程序,希望能够帮助到大家。

1.首先下图为项目的目录结构,需要带入三个包:

commons-httpclient-3.1.jar

commons-logging-1.0.4.jar

codec-1.3.jar

2.其次要创建模拟POST、GET请求的工具类:

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;

public class HttpRequestUtil {
 /**
 * HttpClient 模拟POST请求
 * @param url
 * @param params
 * @return
 */
 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
  */
 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;
 }
}

3.创建发送短信的方法,其中要通过短信内容要进行设置编码集为utf-8,调用第三方接口传参要按照第三方文档规范:

package com.demo.util;

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

public class SendMsgUtil {
 /**
  * 发送短信消息
  * 方法说明
  * @Discription:扩展说明
  * @param phones
  * @param content
  * @return
  * @return String
  */
 @SuppressWarnings("deprecation")
 public static String sendMsg(String phones,String content) {
 try {
 content = java.net.URLEncoder.encode(content,"utf-8");
 System.out.println(content);
 } catch (UnsupportedEncodingException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
  //短信接口URL提交地址
  String url = "https://api.dingdongcloud.com/v1/sms/sendyzm?apikey=b46c4961aa875f626b7924aace0d53f7&mobile="+phones+"&content="+content;

  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
  */
 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
  */
 public static void main(String[] args) {
//  System.out.println(SendMsgUtil.createRandomVcode());
//  System.out.println("&ecb=12".substring(1));
  System.out.println(sendMsg("18201150549", "【签名】尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",请在10分钟内输入。请勿告诉其他人!"));
 }
}

4.调用main方法可以进行测试,如果控台太输出返回状态值不是200,可以参考第三方发短信的文档返回参数说明。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java基于正则提取字符串中的数字功能【如提取短信中的验证码】

    本文实例讲述了java基于正则提取字符串中的数字功能.分享给大家供大家参考,具体如下: 使用Java正则可以很方便的从字符串中提取符合条件的内容. 1.提取字符串中所有的手机号: private void getPhoneNum(String smsBody) { Pattern pattern = Pattern.compile("(13|14|15|18)\\d{9}"); Matcher matcher = pattern.matcher(smsBody); while (mat

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

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较. 为了防止有广告嫌疑

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

    一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口(遵循短信平台的接口规范即可).具体看代码: 使用HttpClient的时候需要在项目中引入: commons-httpclient-3.1.jar 这个jar包, 项目结构: 1.创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法 /** * 文件说明 * @Descriptio

  • 基于JAVA的短信验证码api调用代码实例

    本文实例为大家分享了JAVA的短信验证码api调用代码,供大家参考,具体内容如下 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import jav

  • Android 用RxBinding与RxJava2实现短信验证码倒计时功能

    场景:注册账号页面时,我们点击按钮发送验证码,在等待验证码时,界面会有倒计时提示,这此期间按钮不可点击.当倒计时结束时,按钮恢复. 实现与功能都不难,这次用 RxBinding,RxJava2 的方法去实现.并实现了手动.自动停止倒计时,防止多次点击. 功能动态图 要使用 RxBinding.RxJava2 先添加 Gradle 配置: compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxj

  • java短信验证码获取次数限制实例

    现在不管什么项目,用到短信验证功能,都会在程序上设计一个短信验证码的获取次数限制,这样主要是避免短信验证码接口被刷. 前一段正好做一个项目的用户短信验证码登录功能,就研究了以下,下面贴出来分享一下. 这里涉及到的短信接口,用的第三方短信接口-动力思维思维乐信的(http://www.lx598.com/),如果想了解短信接口接入,可以到他们官网,查看下短信接口API文档说明,参考下面的代码应该就能弄明白. 用户注册部分,主要代码如下: //主要js方法: //获取手机验证码: function

  • java实现短信验证码5分钟有效时间

    本文实例为大家分享了java实现短信验证码5分钟有效时间,供大家参考,具体内容如下 实现一个发送短信验证码的请求,要求5分钟之内重复请求,返回同一个验证码. 网上可找到几种方案: 如,存储数据库或缓存中.实现起来比较麻烦,舍弃: 另一种方式即本例,使用session存储.其他方式,暂未进一步了解. 实现步骤: (springmvc) 1.controller中,获取session对象,取code,取不到新生成,并存储session中: 2.单手机号发送量,判断并 +1 记入数据库: 3.Time

  • Java使用云片API发送短信验证码

    下面开始介绍的是如何利用机器完成批量操作,将短信业务自动化. 获取APIKEY 云片网提供了完整的SDK和API,可以帮助开发者快速完成业务开发. 在开始Coding前,需要先获取APIKEY,如下所示. 获取APIKEY 点击眼睛按钮后,输入验证码,就可以查看APIKEY了. 这里需要说明的是,APIKEY特别重要,一定要保护好它,避免泄露.云片这边提供了几重保护机制,例如验证.敏感处理.子账号独立APIKEY等,看得出来他们的安全意识还是挺不错的. 开始Coding 有了APIKEY,就可以

  • Java实现短信验证码和国际短信群发功能的示例

    最近由于公司的业务拓展,需要给国外用户发送国际短信,像西班牙.葡萄牙.意大利这些国家都要发,还有中国的香港.澳门.台湾(港澳台)这些地区也要发,不过现在已经有许多公司提供国际短信的业务了,之前使用过云片的验证码业务,顺便看到他们也有国际短信的业务,并且更重要的是,不需要修改任何代码,只要添加下国际短信模板,就可以直接使用之前的代码继续发送国际短信,简直太方便了. 废话不多说,直接上代码. /** * Created by bingone on 15/12/16. */ import org.ap

  • Java随机生成手机短信验证码的方法

    本文实例讲述了Java随机生成手机短信验证码的方法.分享给大家供大家参考,具体如下: /** * 创建指定数量的随机字符串 * @param numberFlag 是否是数字 * @param length * @return */ public static String createRandom(boolean numberFlag, int length){ String retStr = ""; String strTable = numberFlag ? "1234

随机推荐