java 实现发送手机验证码的功能 (超详细)

article/2025/8/27 19:37:45

我这里使用的旦米(http://www.danmi.com/)你们用阿里的就去看看其他博客

在这里插入图片描述

1.首先注册一个旦米的账号,第一次注册会免费的送你10元。足够你去测试用,不用担心自己去充钱。

2.注册好了登录进去,必须要公司认证,认证通过之后才能使用。可以自己去网上搜一些企业的营业执照。但是一定要有效的才有用。这个我自己也是搞了大半天才弄好。

3.认证通过之后,找到验证码通知里面的API配置 获取你自己的 ACCOUNT SID 和 AUTH TOKEN

在这里插入图片描述

4.在短信通知里的模板管理里面配置你短信模板,审核通过之后就可以使用了,就可以拿到自己的模板id

在这里插入图片描述

在这里插入图片描述

5.这些准备好之后,就可以写代码了

5.1 我使用的是maven,直接在pom.xml直接导入依赖就可以了
 <dependency>                                                                               <groupId>com.alibaba</groupId>                                                        <artifactId>fastjson</artifactId><version>1.2.47</version></dependency>   

注意
ACCOUNT_SID 和 AUTH_TOKEN 放你自己的 ,还有param,和templateid 用你自己的

验证码通知类的内容不要直接用smsContent字段值来进行请求,传参的时候要用param字段值和templateid字段值来进行请求;如果有变量就带param字段,没有就不带,param字段值指的是您在用户中心建的模板里边带的短信变量,多个变量用英文逗号隔开;templateid就是在用户中心建的模板生成的模板id;如果只用smsContent字段值来进行请求,系统会默认匹配到会销子账号里边去(会销是要过人工审核的)

   private static final String QUERY_PATH = "https://openapi.danmi.com/distributor/sendSMS";private static final String ACCOUNT_SID = "4dabce68d9e16a8****";private static final String AUTH_TOKEN = "80b2b2a32e0139b6ef4b***7";

demo

package com.example.demo.controller;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;import com.alibaba.fastjson.JSONObject;/*** @Description:发送验证码* @author:* @Date*/
public class UserLController {private static final String QUERY_PATH = "https://openapi.danmi.com/distributor/sendSMS";private static final String ACCOUNT_SID = "4dabce68d9e16a8****";private static final String AUTH_TOKEN = "80b2b2a32e0139b6ef4b***7";// 根据相应的手机号发送验证码public static String getCode(String phone) {//获取验证码String rod = smsCode();//获取时间戳long timestamp = getTimestamp();//获取sing签名String sig = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp);//短信模板String tamp = "【杭州华佳】亲爱的用户,您好,您的验证码为" + rod + ",2分钟内有效,若非本人操作请忽略。";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(20000);// 设置参数读取时间connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");// 提交请求out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");Integer smsType = 100000;String  templateid = "****";String  param = URLEncoder.encode(rod,"UTF-8");String args = getQueryArgs(ACCOUNT_SID, param,phone, timestamp, sig, "JSON",smsType,templateid);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 param, String to, Long timestamp, String sig,String respDataType, Integer smsType, String templateid) {return "accountSid=" + accountSid + "&param=" + param + "&to=" + to + "&"+"timestamp=" + timestamp+ "&sig=" + sig + "&respDataType=" + respDataType + "&smsType=" + smsType + "&templateid=" + templateid;}// 获取时间戳public static long getTimestamp() {//用这个要报错,要用北京时间的时间戳 //        return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());long timestamp = System.currentTimeMillis();return timestamp;}// sing签名public static String getMD5(String sid, String token, Long 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;}
}
5.2测试
package com.example.demo;import com.example.demo.controller.UserLController;import java.net.URLEncoder;public class Test {public static void main(String[] args) {String phone = "187847******";UserLController.getCode(phone);System.out.println(UserLController.getCode(phone));}}
``

http://chatgpt.dhexx.cn/article/01TwcSo5.shtml

相关文章

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

1. 进入秒嘀科技&#xff08;http://www.miaodiyun.com/&#xff09;&#xff0c;注册一个账号 2. 注册好之后&#xff0c;点击 用户中心 -> 账户管理&#xff0c;就会进入如下界面 &#xff08;顺便提一下&#xff0c;新注册的用户&#xff0c;平台会免费赠送你10元&#…

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提供了一些用于任务管理、调度、同步和通信的功…