java短信验证码_java实现发送短信验证码

本文介绍了如何使用Java实现通过第三方平台发送短信验证码。首先在秒嘀科技注册并获取ACCOUNTSID和AUTHTOKEN,然后创建模板并审核。接着在代码中设置发送验证码的逻辑,包括获取验证码、时间戳、签名等,并进行HTTP POST请求发送验证码。测试时,将手机号替换为实际号码即可。遇到的问题可能包括网络连接、企业认证和配置错误。
摘要由CSDN通过智能技术生成

java实现短信验证码发送

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

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

注册完成后,我们需要获取自己对应的ACCOUNT SID 和 AUTH TOKEN;

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

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

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

src目录下新建文件夹,存放我们写的代码

新建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当做返回结果返回就好。

可能发生的错误原因:

没连接网络

企业认证未通过

配置文件配错了

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值