java实现发送手机验证码功能

article/2025/8/27 19:43:00

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 blocke.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 blocke.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次,不能修改
               通知类短信有需要可调整下发次数
               该类配置的修改需要在后台中修改设置,客户端不能设置
               如果在测试时候遇到请求限制,可联系客服添加白名单

     (2)返回错误码 00134 "没有和内容匹配的模板” 如何处理?

        答:请检查是否在官网建立模板,smscontent=【短信签名】+内容,发送内容要与模板匹配。       

     (3)返回错误码 0005 "timestamp已过期” 如何处理? 

       答:把获取时间戳 getTimestamp()方法中的 return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());换成return System.currentTimeMillis()+""; 即可。

 


http://chatgpt.dhexx.cn/article/4og8ZfYc.shtml

相关文章

vue使用element发送手机验证码倒计时

发送验证码倒计时 html <el-form class"form" :model"form" labeal-position"left"> <el-form-item label"姓名"><el-input v-model"form.Name" placeholder"请输入姓名"></el-input>…

C# WinForm 使用SMS接口发送手机验证码+图形验证码+IP限制

文章目录 前言功能实现一、功能界面二、创建图形验证码类三、创建存储IP地址的数据库表四、创建手机验证码类五、在Form1中调用以上两个类中的函数&#xff0c;实现功能 前言 1.发送手机验证码用的是网建的SMS接口&#xff08;http://sms.webchinese.cn/&#xff09;   2.手机…

uniapp | 发送手机验证码 button组件

一、功能和效果展示 1.组件功能 uniapp &#xff08;1&#xff09;按钮初始显示“发送”&#xff0c;点击按钮后按钮显示倒计时60s&#xff1b; &#xff08;2&#xff09;倒计时60s期间点击按钮&#xff0c;不会重置计时器&#xff1b; &#xff08;3&#xff09;倒计时60s结…

发送手机验证码

手机验证码不能自己生成&#xff0c;需要由第三方来完成发送。本文选择网易云作为第三方来发送验证码。 首先&#xff0c;我们要注册网易云账号&#xff0c;完成登陆。选择“产品与服务”选项中的“通信与视频”&#xff0c;点击创建应用&#xff0c;完成后&#xff0c;下方有…

java发送手机验证码实现

正文 今天来用java实现手机验证码的发送。 短信平台有很多&#xff0c;中国网建提供的SMS短信通&#xff0c;注册免费5条短信&#xff0c;3条彩信&#xff0c; http://sms.webchinese.cn/ 但是刚才试了&#xff0c;第一次用官方提供的demo发送成功&#xff0c;然后整合到自…

Excel 字符串拼接

例子&#xff1a;“exec sp_addextendedproperty N’MS_Description’, N’”&B1&“‘, N’SCHEMA’, N’dbo’,N’table’, N’”&A1&“” &#xff1a;公式 “ abc ” &#xff1a; “”中间为任意字符/字符串 & A1 &&#xff1a;&&中间为拼…

Excel如何插入文本字符串或字符

目录 1.用“&”连接的方法插入文本或字符的办法及实例 2.用TEXT函数插入“&#xffe5;”或“$"字符 3.用TEXT函数以及“&”连接符插入文本或符号 1.用“&”连接的方法插入文本或字符的办法及实例 &#xff08;1&#xff09;方法&#xff1a;关键在于用“&a…

excel连接字符串

Excel连接字符串的功能挺强大的。 很实用。 有2种方式。 1&#xff1a; 2&#xff1a; 1个是调用了concatnate函数&#xff0c;一个是使用了&(就是号的功能了)。

excel字符串和单元格拼接,Excel中将单元格的字符串进行合并的具体方法

在利用Excel进行办公时&#xff0c;对多个单元格的字符串进行合并是很常见的操作&#xff0c;但是对于刚接触Excel软件的小伙伴来说&#xff0c;可能有些困难。下面小编就与大家分享一下在Excel中实现字符串合并的方法&#xff0c;有需要的用户可以参考下。 Excel中如何合并文本…

excel中按条件合并字符串

若B列不为空则将A列和B列合并后给C列&#xff1b; C IF(ISBLANK(B1), B1,CONCAT(A1,B1)) 结果却出问题&#xff0c;当B列为空时&#xff0c;C列却显示0&#xff0c;解决方法是&#xff1a;选择C列设置单元格格式&#xff0c;选择自定义&#xff0c;在类型处添加 [0]" &q…

Excel技巧:巧用字符串连接

Excel中有一个基本的公式&#xff0c;就是把几个单元格中的字符串连接起来。 比如上面这个例子&#xff0c;A1&#xff0c;B1&#xff0c;C1单元格中字符串连接起来&#xff0c;只要在D1单元格中输入 A1&B1&C1即可。 下面我们开始使用字符串连接功能。 例1&#xff1a;…

Excel字符连接(concat)

Excel连接字符串有两个比较常用的方法。 1.concat函数 2.”&”连接符

C#操作Excel文件三种方式及连接字符串

转自&#xff1a;http://www.cnblogs.com/JacobHuang/p/5663926.html .Net平台上对Excel进行操作主要有两种方式。第一种&#xff0c;把Excel文件看成一个数据库&#xff0c;通过OleDb的方式进行读取与操作&#xff1b;第二种&#xff0c;调用Excel的COM组件。两种方式各有特点…

EXCEL 连接符的简单使用

在使用EXCEL处理大量表格数据的时候&#xff0c;学会【连接符】的使用很重要。 如下图所示&#xff1a; 如果我们需要在【A列】的内容后面加两个字【“编号”】两个字&#xff0c;我们就可以使用【连接符“&”】。 1&#xff1a;在B列的此处输入【】。 2&#xff1a;选中【…

Excel连接文本字符串

Excel连接文本字符串 一&#xff1a;CONCATENATE 1&#xff09;使用 CONCATENATE 函数。在这种情况下&#xff0c;您的公式将如下所示。其中X1、X2 和 X3 是你要加入的单元格。 CONCATENATE(X1,X2,X3)2&#xff09;如果要用空格分隔单元格的值&#xff0c;可以将它们添加在引…

STM32开发入门

stm32f407系列单片机基础知识 参考stc公司标准开发手册 STM32F4xx中文参考手册1.pdf ##本文是基于stm32f407zgt6单片机做出介绍 stm32系列单片机是stc公司开发并设计出的一类高速低功耗芯片&#xff0c;其具有众多可用内部资源&#xff0c;在下文将一一介绍 芯片实物图 内部资…

Structured Streaming 快速入门系列(三)Structured Streaming 实战之 Sink

文章目录 SinkHDFS SinkKafka SinkForeach Writer自定义 SinkTigger从 Source 到 Sink 的流程错误恢复和容错语义 Sink 目标和步骤 目标 能够串联两端, 理解整个流式应用, 以及其中的一些根本的原理, 比如说容错语义能够知道如何对接外部系统, 写入数据 步骤 HDFS SinkKaf…

STM32基础入门学习笔记:内部高级功能应用

文章目录&#xff1a; 一&#xff1a;低功耗模式 1.睡眠模式测试程序 NVIC.h NVIC.c key.h key.c main.c 2.停机模式测试程序 main.c 3.待机模式测试程序 main.c 二&#xff1a;看门狗 1.独立看门狗测试程序 iwdg.h iwdg.c main.c 2.窗口看门狗测试程序 wwdg…

STM32初学者入门FreeRTOS操作系统,多任务实时系统

1.详细介绍FreeRTOS操作系统&#xff0c;然后举了几个实例 FreeRTOS&#xff08;Free Real-Time Operating System&#xff09;是一个开源的嵌入式实时操作系统&#xff0c;它专门设计用于在资源有限的嵌入式系统中运行。FreeRTOS提供了一些用于任务管理、调度、同步和通信的功…

【STM32系列汇总】博主的STM32实战快速进阶之路(持续更新)

我把之前在学习和工作中使用STM32进行嵌入式开发的经验和教程等相关整理到这里&#xff0c;方便查阅学习&#xff0c;如果能帮助到您&#xff0c;请帮忙点个赞&#xff1b; 本文的宗旨 STM32 只是一个硬件平台&#xff0c;同样地他可以换成MSP430&#xff0c;NXP的RT等等&…