最近在做用户登陆注册模块的时候用到了采用第三方短信接口发送短信验证码,查询了一些网站和参考了一些别人的方法,用的是网建短信通的,也可以阿里云平台的或者别的平台的 。
首先还是登陆注册用户信息,然后进入这个网站的首页之后我们先进入修改短信密钥拿到自己的安全密钥,然后进入上面的短信API接口页面
可以看到他们官方给出了一个演示demo
import JAVA.io.UnsupportedEncodingException;
import org.Apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
public class SendMsg_webchinese {
public static void main(String[] args)throws Exception
{
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.api.smschinese.cn");
post.addRequestHeader("Content-Type","
Application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码
NameValuePair[] data =https://www.isolves.com/it/cxkf/yy/JAVA/2022-08-19/{ new NameValuePair("Uid", "本站用户名"),new NameValuePair("Key", "接口安全秘钥"),new NameValuePair("smsMob","手机号码"),new NameValuePair("smsText","验证码:8888")};
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk"));
System.out.println(result); //打印返回消息状态
post.releaseConnection();
}
}
代码还是很容易就能看懂的,我们只需要改的是
NameValuePair[] data =https://www.isolves.com/it/cxkf/yy/JAVA/2022-08-19/{ new NameValuePair("Uid", "本站用户名"),new NameValuePair("Key", "接口安全秘钥"),new NameValuePair("smsMob","手机号码"),new NameValuePair("smsText","验证码:8888")};
1
可以看到这个Uid就是刚刚我们注册的用户名,key是刚刚获取到的密钥,smsMob就是要发送信息的手机号了,smsText就是要发送的信息 。
所以把上面的演示demo稍微修改一下就可以直接使用了:
public static HashMap<String,String> getMessageStatus(String phone)throws Exception
{
HashMap<String,String> map=new HashMap<String,String>();
String code=VerifyingCode();
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("
http://gbk.api.smschinese.cn");//该第三方短信服务地址
【Java实现第三方短信接口发送短信验证码】post.addRequestHeader("Content-Type",
"
application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码
NameValuePair[] data = https://www.isolves.com/it/cxkf/yy/JAVA/2022-08-19/{
new NameValuePair("Uid", "*****"),
new NameValuePair("Key", "*********"),
new NameValuePair("smsMob",phone),
new NameValuePair("smsText","您的验证码是"+code+",有效时间为10分钟,请尽快验证 。")
};
map.put("code",code);
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk"));
System.out.println(result); //打印返回消息状态,1表示发送成功,其他的小于0的为失败
map.put("result", result);
post.releaseConnection();
return map;
}
//生成六位随机数
public static String VerifyingCode()
{
Random random=new Random();
String code="";
for (int i=0;i<6;i++)
{
code+=random.nextInt(10);
}
System.out.println(code);
return code;
}
我的想法就是定义一个hashmap将生成的验证码与发送的状态放在map里面,那么在service层上进行业务处理的时候就可以直接拿到我们刚刚发送的验证码进行业务处理 。
最后还需要导入官方给的三个jar包,依赖如下
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
推荐阅读
- |专家建议:大城市30岁还未实现经济独立的女性,趁早回老家!
- Java|Java:2022年招聘Java开发人员指南
- Java|HR傲慢对待求职者,还“诅咒”对方找不到工作,大学生也太难了
- 在Java 8及更高版本中使用Java流
- PVLAN全面解析 一个VLAN之中如何实现端口之间隔离?
- 钓鱼|钓鱼界的扫地僧!一根鱼竿外加钢筋当铅坠,大爷轻松实现了连杆
- 教育未来|汶川地震截肢女孩实现学医梦想:被成都中医药大学录取
- 中国联通|三大运营商忙提速降费!工信部:全国已实现县县通5G、市市通千兆
- Java|“年薪20万”VS“银行柜员”该怎么选?内部员工:无条件选后者
- 饵料|钓鱼界的发明家!云南一男子为实现钓鱼自由,独自设计打造床车