目录
一、准备工作
二、具体实现
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 "×tamp=" + 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("¶m").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. 代码执行之后很快就能收到验证码,如果没有可以去秒嘀云上查看一下是不是审核没有通过
(这里需要注意一下,审核没通过后台也给我返回了发送成功的信息,我一直以为自己代码出问题了)
在产品概览那里能看到发送成功还是失败