java实现短信验证码发送

由于我们使用第三方平台进行验证码的发送,所以首先,我们要在一个平台进行注册。

在这里我选择是秒嘀科技,因为新人注册会赠送十元,足够测试使用了。

注册完成后,我们需要获取自己对应的ACCOUNT SIDAUTH TOKEN

点击用户中心,认证,来进行企业认证(这一步是最费劲的,我认证了两天 TAT ,需要的营业执照可以百度,图片质量需要自己斟酌)。

之后在配置管理中新建一个模板,然后提交审核就好,(只要符合要求,基本都能过),可以返回查看是否通过。

准备工作完成,便可以开始代码的测试了,由于本人还是大学生新人,只能使用小的动态Web项目进行测试。新建项目,引入需要的jar包:fastjson.jar,我才用的版本是1.2.47版本。将jar包放入lib文件夹下,就可以开始我们的代码了。

  1. src目录下新建文件夹,存放我们写的代码
  2. 新建GetMessageCode.class,代码如下
     package test;
//各种引入的包
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date; import com.alibaba.fastjson.JSONObject; public class GetMessageCode {
/**
* 发送验证码
*/
private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";//固定的,它api中固定的端口,照着写就行。
private static final String ACCOUNT_SID = "自己获取到的ACCOUNT_SID ";
private static final String AUTH_TOKEN = "自己获取到的AUTH_TOKEN "; //根据相应的手机号发送验证码
public static String getCode(String phone){
//以下代码是为了获取其他方法返回的参数
String rod = smsCode();//获取随机验证码
String timestamp = getTimestamp();//获取时间戳
String sig = getMD5(ACCOUNT_SID,AUTH_TOKEN,timestamp);//获取签名
String tamp = "【xxxx】登录验证码:"+rod+",xxxxxxxxx";//必须与模板一致,否则会报错
OutputStreamWriter out = null;
BufferedReader br = null;
StringBuilder result = new StringBuilder();
try{
URL url = new URL(QUERY_PATH);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput(true);//设置是否允许数据写入
connection.setDoOutput(true);//设置是否允许参数数据输出
connection.setConnectTimeout(5000);//设置链接响应时间
connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
//提交请求
out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
String args = getQueryArgs(ACCOUNT_SID,tamp,phone,timestamp,sig,"JSON");
out.write(args);
out.flush();
//读取返回参数
br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String temp = "";
while ((temp=br.readLine())!=null){
result.append(temp);
}
}catch(Exception e){
e.printStackTrace();
}
JSONObject json = JSONObject.parseObject(result.toString());
String respCode = json.getString("respCode");
String defaultRespCode = "00000";
if(defaultRespCode.equals(respCode)){
return rod;
}else{
return defaultRespCode;
} }
// 定义一个请求参数拼接方法
public static String getQueryArgs(String accountSid, String smsContent, String to, String timestamp, String sig,
String respDataType) {
// TODO Auto-generated method stub
return "accountSid=" + accountSid + "&smsContent=" + smsContent + "&to=" + to + "&"+"timestamp=" + timestamp
+ "&sig=" + sig + "&respDataType=" + respDataType;
}
//获取时间戳
public static String getTimestamp() {
return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
}
// sing签名
public static String getMD5(String sid, String token, String timestamp) { StringBuilder result = new StringBuilder();
String source = sid + token + timestamp;
// 获取某个类的实例
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
// 要进行加密的东西
byte[] bytes = digest.digest(source.getBytes());
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xff);
if (hex.length() == 1) {
result.append("0" + hex);
} else {
result.append(hex);
}
}
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return result.toString();
} // 创建验证码
public static String smsCode() {
String random = (int) ((Math.random() * 9 + 1) * 100000) + "";
return random;
}
}

现在代码就算写完了,我们需要在同包下新建测试类进行测试。

package test;

public class Test {

	public static void main(String[] args) {
// TODO Auto-generated method stub
String phone = "测试的手机号";
GetMessageCode.getCode(phone);
}
}

以上便是java实现发送短信验证码的代码,如果想查看或使用验证码的话,只需在调用方法的时候把smsCode当做返回结果返回就好。

可能发生的错误原因:

  1. 没连接网络
  2. 企业认证未通过
  3. 配置文件配错了

新人第一次发帖,请多多包涵....

java实现发送短信验证码的更多相关文章

  1. java + maven 实现发送短信验证码功能

    如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenzikj.com/doc/sdk.html ...

  2. java 阿里云接口实现发送短信验证码

    此刻自己做的小项目中,需要用到手机发送短信验证码实现注册功能,于是就去阿里云注册了账号,并实现随机发送验证码的功能 第一步:在阿里云官网登录注册   已有支付宝或淘宝的账号可以直接登录,最后需要实名认 ...

  3. Java 实现手机发送短信验证码

    Java 实现手机发送短信验证码 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ,之后想要在使用就得花钱了.简单的操作 ...

  4. 阿里云短信服务发送短信验证码(JAVA开发此功能)

    开发此功能需注册阿里云账号,并开通短信服务(免费开通) 充值后,不会影响业务的正常使用!(因为发送验证类短信:1-10万范围的短信是0.045元/条).开发测试使用,充2块钱测试足够了 可参考阿里云官 ...

  5. java发送短信验证码的功能实现

    总结一下发送短信验证码的功能实现 (题外话:LZ是在腾讯云买的第三方(山东鼎信)短信服务平台的接口,1块钱20次的套餐来练手,哈哈,给他们打个广告,有需要的可以去购买哈,下面是购买链接短信服务平台购买 ...

  6. android发送短信验证码并自动获取验证码填充文本框

    android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com) ...

  7. 超实用的JavaScript代码段 Item4 --发送短信验证码

    发送短信验证码 实现点击“发送验证码”按钮后,按钮依次显示为“59秒后重试”.“58秒后重试”…直至倒计时至0秒时再恢复显示为“发送验证码”.在倒计时期间按钮为禁用状态 . 第一步.获取按钮.绑定事件 ...

  8. Laravel5中使用阿里大于(鱼)发送短信验证码

    在做用户注册和个人中心的安全管理时,我实现借助第三方短信平台(阿里大于(鱼))在Laravel框架中进行手机验证的设置:阿里大于,是阿里通信旗下优质便捷的云通信服务平台,整合了三大运营商的通信能力,为 ...

  9. 微信小程序发送短信验证码完整实例

    微信小程序注册完整实例,发送短信验证码,带60秒倒计时功能,无需服务器端.效果图: 代码: index.wxml <!--index.wxml--> <view class=&quo ...

随机推荐

  1. vue中两行代码实现全选及子选项全部选中,则全选按钮选中,反之有一个没选中,就取消选中全选按钮

    every() 方法使用指定函数检测数组中的所有元素: 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测. 如果所有元素都满足条件,则返回 true. 逻辑 ...

  2. 实现一个类型判断函数,需要鉴别出基本类型、function、null、NaN、数组、对象?

    只需要鉴别这些类型那么使用typeof即可,要鉴别null先判断双等判断是否为null,之后使用typeof判断,如果是obejct的话,再用Array.isArray判断是否为数组,如果是数字再使用 ...

  3. Redis存储对象(序列化和反序列化)

    代码以及实例: package com.hp.test; import redis.clients.jedis.Jedis; import java.io.*; public class Test3 ...

  4. Day5 - 06 函数的参数-命名关键字参数

    引子:对于关键字参数,调用时可以传入任意个不受限制的关键字参数,至于到底传入了哪些,就需要在函数内部通过[函数里定义的关键字参数]检查,例子里就是通过otherinfo检查.        >& ...

  5. css 16-浏览器的兼容性问题

    16-浏览器的兼容性问题 我们在div里放一个img,发现: 在html和html5中,div的长宽是不同的,后者的高度要超过几个像素. 比如说,下面这个是html的. <!DOCTYPE ht ...

  6. cmd.exe解释器漏洞

    安全研究员Julian Horoszkiewicz发现了cmd.exe命令行解释器中的漏洞,该漏洞允许执行任意命令. 在寻找新的攻击媒介以允许Windows中注入命令时,Khoroshkevich发现 ...

  7. Hibernate实现对数据的CRUD

    今天主要去看公司的老框架, CRUD用的较多,所以总结一下步骤,以免忘记的时候温习 回顾 JDBC 工作过程: 加载驱动 建立连接 定义sql,发生sql语句 执行sql语句获得执行结果 处理返回结果 ...

  8. Linux 搭建ELK日志收集系统

    在搭建ELK之前,首先要安装Redis和JDK,安装Redis请参考上一篇文章. 首先安装JDK及配置环境变量 1.解压安装包到/usr/local/java目录下[root@VM_0_9_cento ...

  9. HTC Vive使用WebVR的方法以及启用后头显无画面的解决方法

    1.下载支持WebVR的浏览器. 笔者使用的是HTC Vive,故下载了Firefox的Nightly版本[下载地址]. 2.Nightly 开启WebVR的步骤[引用自Mozilla VR] 1.从 ...

  10. Python之matplotlib画图

    折线图: Matplotlib处理csv文件 这里写两个其他的. 柱状图,柱状图个人喜欢用pygal来画,有两篇文章 - Pygal之掷骰子 和 pygal之掷骰子 - 2颗面数为6的骰子.下面用ma ...