对于短信验证码的实现,作为新手肯定都觉得很难,但实际上短信验证码其实就是调用别人写好的接口,操作简单,觉得难可能是没有接触过或者逻辑上还没有理通,才会产生一种无从下手的感觉。由于阿里云和腾讯云等已经不再支持个人开发者使用短信服务,这里我使用的是互亿科技的短信服务,该平台提供一个学生套餐,10元166条短信,用于调试完全足够,模板是固定的,不允许进行任何更改,否则发送不出去。进去注册之后,会提示一个学生套餐,点击进去购买即可。
进去之后,找到图中的指示进行操作
找到三步和第四步的APIID和APIKEY,这是发送短信验证的核心,必须记住,找到下面的提示。
点击下载即可,将下载号的压缩包进行解压,官方支持的语言很多,找到对应的语言进行打开即可,我这里使用的是Java,下面是发送短信验证码的DOM
public class SendSmsUtf8 {
//提交的地址
private static String Url = "http://106.ihuyi.cn/webservice/sms.php?method=Submit";
//短语验证地址
public Integer send(String tel){
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(Url);
client.getParams().setContentCharset("UTF-8");
method.setRequestHeader("ContentType", "application/x-www-form-urlencoded;charset=UTF-8");
//随机验证码
int mobile_code = (int) ((Math.random() * 9 + 1) * 100000);
String content = "您的验证码是:" + mobile_code + "。请不要把验证码泄露给其他人。";
NameValuePair[] data = {//提交短信
new NameValuePair("account", "这里是AIPID"), //查看用户名是登录用户中心->验证码短信->产品总览->APIID
new NameValuePair("password", "这里是APIKEY"), //查看密码请登录用户中心->验证码短信->产品总览->APIKEY
//new NameValuePair("password", util.StringUtil.MD5Encode("密码")),
new NameValuePair("mobile", tel),//接收验证码的手机
new NameValuePair("content", content),//官方默认模板,个人不支持更改
};
method.setRequestBody(data);
try {
client.executeMethod(method);
String SubmitResult = method.getResponseBodyAsString();
//System.out.println(SubmitResult);
Document doc = DocumentHelper.parseText(SubmitResult);
//响应码如果为2,则发送成功
if ("2".equals(doc.getRootElement().elementText("code"))) {
return mobile_code;
}
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//这是我自己定义的响应码,为发送失败,可能是号码有误或者短信服务欠费
return 500;
}
}
可以直接通过main函数进行调式,因为这个我封装到了web应用中,所有没有直接打开,官方的接口文档中,有四个重要的jar,即官方的API
如果直接使用官方的例子,不需要导入自己的项目,否则必须复制导入自己的项目,否则不可用。
懒得写的可以直接克隆项目进行调试
gitee地址:Java实现短信验证码