JAVA实现手机短信验证(详解)

mac2026-09-24  12

目录

一、准备工作

二、具体实现

         JAVA代码

三、总结

   

一、准备工作

首先要找一个提供短信验证服务的平台。 上一年我写短信验证的时候,这种平台还是很容易就找到了,而且是注册就免费送余额,但是现在基本上都是要公司认证才能使用,或者用钱买短信条数,比如:阿里云,5000条起卖,卖几百块钱,这对于我们学生来说未免负担太大了。 我这一次也是找了秒嘀云平台(之前好像也是这个,注册就能用了,但是现在要公司认证,不过不用担心,接下来我会教你们一个小方法) 秒嘀云:http://www.miaodiyun.com/

1号才注册实现的,方法和代码都是最新的

1、注册

在秒嘀云注册完成后,首先要进行验证才可以使用 我这里是已经认证了,认证的时候需要提供自己公司的营业执照,但是自己只是一名普通学生没有公司怎么办呢?

以下有两种方法可以解决:

1. 上网找一个带红章的营业执照 2. 自己去周边的超市、饭店什么的都行,找到他们的营业执照拍下来就行了

我一开始是在网上随便找了一张营业执照去认证,结果客服小姐姐就打电话给我了,她先问了我用来干什么的,我很诚实地回答了:学生,测试。然后她告诉我:只有公司能用,你的营业执照是网上找的吧……😂(当然也有人找成功的,但我不好意思又让客服小姐姐打电话给我了😅)

方法一,pass。

然后我不死心跑去了我们学校的饭堂拍了他们的营业执照,上传,然后成功通过验证了🤫 这里需要注意以下几点:

营业执照不能有边框姓名记得填营业执照上的法人代表编号填“社会信用代码”
2、编辑短信模板

身份验证通过后,就可以去编辑验证码的短信模板了 点击“模板库”可以使用现成的模板 选好模板后继续填写剩下的内容: 注意:短信签名与营业执照上面的不一样时,会审核失败,但是没有关系,多审核几次就通过了😁😁

二、具体实现

1、API文档和demo下载

打开短信配置,点击API文档和demo下载。 也可不下载,直接看我的代码。

2、ACCOUNT_SID和AUTH_TOKEN的获取

还是同一个页面,点击查看即可获取

3、JAVA代码

1. Config.class(配置类)

ACCOUNT_SID和AUTH_TOKEN填入上一步获取到的内容

public class Config { /** * url前半部分 */ public static final String BASE_URL = "https://openapi.miaodiyun.com/distributor/sendSMS"; /** * 开发者注册后系统自动生成的账号,可在官网登录后查看 */ public static final String ACCOUNT_SID = "***********"; /** * 开发者注册后系统自动生成的TOKEN,可在官网登录后查看 */ public static final String AUTH_TOKEN = "****************"; /** * 响应数据类型, JSON或XML */ public static final String RESP_DATA_TYPE = "JSON"; }

2. Http请求工具

这里没有什么要改的,直接复制粘贴就行

package utils; import org.apache.commons.codec.digest.DigestUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; /** * http请求工具 */ public class HttpUtil { /** * 构造通用参数timestamp、sig和respDataType * * @return */ public static String createCommonParam(String sid,String token) { // 时间戳 long timestamp = System.currentTimeMillis(); // 签名 String sig = DigestUtils.md5Hex(sid + token + timestamp); return "&timestamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE; } /** * post请求 * * @param url * 功能和操作 * @param body * 要post的数据 * @return * @throws IOException */ public static String post(String url, String body) { System.out.println("body:" + System.lineSeparator() + body); String result = ""; try { OutputStreamWriter out = null; BufferedReader in = null; URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection(); // 设置连接参数 conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(5000); conn.setReadTimeout(20000); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 提交数据 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); out.write(body); out.flush(); // 读取返回数据 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line = ""; // 读第一行不加换行符 boolean firstLine = true; while ((line = in.readLine()) != null) { if (firstLine) { firstLine = false; } else { result += System.lineSeparator(); } result += line; } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 回调测试工具方法 * * @param url * @return */ public static String postHuiDiao(String url, String body) { String result = ""; try { OutputStreamWriter out = null; BufferedReader in = null; URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection(); // 设置连接参数 conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(5000); conn.setReadTimeout(20000); // 提交数据 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); out.write(body); out.flush(); // 读取返回数据 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line = ""; // 读第一行不加换行符 boolean firstLine = true; while ((line = in.readLine()) != null) { if (firstLine) { firstLine = false; } else { result += System.lineSeparator(); } result += line; } } catch (Exception e) { e.printStackTrace(); } return result; } }

3. 发送工具

这里只需修改一些发送的短信内容就可以了,尽量从自己的模板复制粘贴过来,不然有可能会审核不通过。然后直接将其中的变量{1}替换成自己生成的验证码。

package utils; import java.net.URLEncoder; /** * @author 0416 * @date 2019/11/1 **/ public class SendMessageUtil { /** * 短信发送(验证码通知) */ public static Integer execute(String phone) throws Exception { StringBuilder sb = new StringBuilder(); sb.append("accountSid").append("=").append(Config.ACCOUNT_SID); sb.append("&to").append("=").append(phone); sb.append("&param").append("=").append(URLEncoder.encode("", "UTF-8")); // 验证码 Integer verifyCode = UUIDUtil.getVerifyCode(); sb.append("&smsContent").append("=").append(URLEncoder.encode( "【自己的签名】尊敬的用户,您的短信验证码为" + verifyCode + ",2分钟内有效,若非本人操作请忽略。", "UTF-8")); String body = sb.toString() + HttpUtil.createCommonParam(Config.ACCOUNT_SID, Config.AUTH_TOKEN); String result = HttpUtil.post(Config.BASE_URL, body); System.out.println(result); return verifyCode; } } 验证码生成工具 package utils; /** * @author 0416 * @date 2019/11/1 **/ public class UUIDUtil { /** * 获取六位随机验证码 * @return */ public static int getVerifyCode(){ int vertifyCode = (int)(Math.random()*(999999-100000+1)+100000); return vertifyCode ; } }

5. 调用方法

我写代码的时候是使用了ssm框架的。

package controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static utils.SendMessageUtil.execute; /** * @author 0416 * @date 2019/11/1 **/ @Controller public class SendMessageController { @RequestMapping("/sendMessage.do") public void sendMessage(String phone){ try{ Integer verifyCode = execute(phone); }catch (Exception e){ e.printStackTrace(); } } }

三、总结

1. 发送的短信内容一定要在自己的模板那里添加并审核通过 (我一开始因为模板内容有点出入,找不到原因就去问客服了,结果还是同一个客服小姐姐给我打了电话,问我是不是需要技术支持,我说是的;然后她说:你是学生测试吧,学生是不可以使用的……看来她已经记住我了,太尴尬了🤣🤣不知道一开始就一口咬定是公司使用回是什么结果,你们可以试一下👀)

2. 代码执行之后很快就能收到验证码,如果没有可以去秒嘀云上查看一下是不是审核没有通过 (这里需要注意一下,审核没通过后台也给我返回了发送成功的信息,我一直以为自己代码出问题了) 在产品概览那里能看到发送成功还是失败

最新回复(0)