java实现发送手机验证码功能
时间:2020-07-15
本文章向大家介绍java实现发送手机验证码功能,主要包括java实现发送手机验证码功能使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 进入秒嘀科技(http://www.miaodiyun.com/),注册一个账号
2. 注册好之后,点击 用户中心 -> 账户管理,就会进入如下界面 (顺便提一下,新注册的用户,平台会免费赠送你10元,足够大家学习和使用了,所以不用担心需要充钱) 你需要做的就是获取你自己的 ACCOUNT SID 和 AUTH TOKEN
3. 点击 用户中心 -> 认证,进行企业认证,企业的资质证件就是企业的营业执照,网上百度一张带有红色的公章就行,公司电话填写自己的就行,最后点击提交
4. 需要在秒嘀上新建一个发送手机验证码的模板,点击 配置管理 -> 验证码短信模板,就会进入如下界面
5. 点击“新建模板”按钮, 填写好模板名称、短信签名 和 短信内容(短信内容可以选择 验证码通知短信模板 或者 自己编写短信内容),点击“提交审核”按钮即可,界面如下
6. 然后等待 短信验证码模板 审核通过即可,点击 配置管理 -> 验证码短信模板,查看 短信验证码 是否审核通过
7. 接下来就是代码了,把我圈住的地方改成自己的就行,其他的不用动,tamp值 一定要与自己创建短信模板的短信内容保持一致
8. java短信发送验证码
导入阿里巴巴fastjson.jar包:
方式一:下载fastjson.jar包导入工程就行 链接:https://pan.baidu.com/s/1RH4-x82G8-sNmn7y5YhdjA
方式二:maven工程直接把 下面这段代码复制到 pom.xml 中就行
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
package com.group.util; 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; /** * * @Title:GetMessageCode * @Description:发送验证码 * @author:ヅ零碎de記憶ぷ * @Date 2018年7月4日 下午9:27:04 */ public class GetMessageCode { private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS"; private static final String ACCOUNT_SID = ""; private static final String AUTH_TOKEN = ""; // 根据相应的手机号发送验证码 public static String getCode(String phone) { String rod = smsCode(); String timestamp = getTimestamp(); String sig = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp); String tamp = "【联途旅游】尊敬的用户,您好,您的验证码为:" + rod + ",若非本人操作,请忽略此短信。"; 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.setReadTimeout(10000);// 设置参数读取时间 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) { // TODO Auto-generated catch block 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) { 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; } }
9. 测试发送手机短信验证码 源码如下 (手机号码换成你想要发送到指定手机的手机号码即可)
package com.message.test; public class Test { public static void main(String[] args) { String phone = "12345678910"; GetMessageCode.getCode(phone); } }
10. 常见的问题
(1)返回错误码 00104 “相同的应用当天给同一手机号发送短信的条数小于等于n” 如何处理?
答:此错误是同一手机号短信发送请求频率限制,请求失败也算次;
验证码短信下发次数限制为:1分钟2次、1小时4次、24小时内10次;
通知类短信下发次数限制为:24小时内20次;
营销类短信下发次数限制为:24小时内20次。
验证码短信24小时下发10次,不能修改
通知类短信有需要可调整下发次数
该类配置的修改需要在后台中修改设置,客户端不能设置
如果在测试时候遇到请求限制,可联系客服添加白名单
验证码短信下发次数限制为:1分钟2次、1小时4次、24小时内10次;
通知类短信下发次数限制为:24小时内20次;
营销类短信下发次数限制为:24小时内20次。
验证码短信24小时下发10次,不能修改
通知类短信有需要可调整下发次数
该类配置的修改需要在后台中修改设置,客户端不能设置
如果在测试时候遇到请求限制,可联系客服添加白名单
(2)返回错误码 00134 "没有和内容匹配的模板” 如何处理?
答:请检查是否在官网建立模板,smscontent=【短信签名】+内容,发送内容要与模板匹配。
(3)返回错误码 0005 "timestamp已过期” 如何处理?
答:把获取时间戳 getTimestamp()方法中的 return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());换成return System.currentTimeMillis()+""; 即可
原文地址:https://www.cnblogs.com/mandy3651/p/13308557.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- BootStrap应用开发学习入门1
- Python实现单链表和字典
- 关于如何做好运维管理工作的一点思考
- 2.6-Air302(NB-IOT)-基础外设-AD采集,NTC温度传感器B3950
- 2.5-Air302(NB-IOT)-基础外设-串口(485,422),CRC校验
- 2.3-Air302(NB-IOT)-基础外设-输入检测
- 2.2-Air302(NB-IOT)-基础外设-PWM输出
- API可视化管理平台YApi
- BootStrap应用开发学习入门
- 为什么要学习现代控制理论(机器人方向)?
- 2.XML之编程解析示例笔记
- XML快速入门学习笔记
- Fuzz入门以及在渗透测试中重要性
- 程序设计语言介绍及调试技巧
- 项目开发学习与总结