我们在做项目中,经常遇见接入一下第三方接口的场景,比如手机号码归属地查询、天气预报、二维码生成、货币汇率、短信验证码以及邮编查询等各种api接口,其中短信验证码是每个项目中几乎是必备的一个第三方接口。
接入验证码分为前端和后端,这里都给列出详细的代码
前端代码
后端代码
HttpSession session = req.getSession();
// TODO 验证码有效时间
session.setMaxInactiveInterval(600);
try {
Integer num = RandNumber.getNum();
// TODO 发送验证码通道
Sendsms.Send(num, phone);
session.setAttribute(phone, num);
return R.ok();
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
return R.error("fasle");
}
import java.io.Exception;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
public class Sendsms {
private static String Url = "https://vip.veesing.com/smsApi/verifyCode";
// 发送短信验证码
public static void Send(Integer num, String mobile) {
try {
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");
NameValuePair[] data = {
new NameValuePair("appId", "*********"),
new NameValuePair("appKey", "**********"),
new NameValuePair("templateId", "*******"),
new NameValuePair("mobile", "*******"),
new NameValuePair("variables", "*******")
};
method.setRequestBody(data);
client.executeMethod(method);
String submitResult = method.getResponseBodyAsString();
System.out.println(submitResult);
} catch (Exception e) {
e.printStackTrace();
}
}
}
HttpSession session = req.getSession();
String yzm = String.valueOf(session.getAttribute(username));
logger.info(yzm);
if (yzm == null) {
return R.error("验证码错误");
}
if (yzm != null && !verifycode.equals(yzm)) {
return R.error("验证码错误");
}
真正意义上的能调用是需要获取短信平台的appId和appKey ,如下所示,当然不同平台的appId和appKey的获取方式不同,大家可以随机应变。
验证码demo
package com.veesing.test;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import com.alibaba.fastjson.JSONObject;
import com.veesing.utils.Config;
/**
* 短信验证码
* @author MWH
*
*/
public class SmsCodeTest {
public static void main(String[] args) {
// 获取连接
HttpClient client = new HttpClient();
// 短信验证码API接口地址
PostMethod method = new PostMethod("https://vip.veesing.com/smsApi/verifyCode");
// 设置编码
client.getParams().setContentCharset("UTF-8");
method.setRequestHeader("ContentType", "application/x-www-form-urlencoded;charset=utf-8");
// 手机号码,一次只能提交一个手机号码
String phone = "15080929435";
//模板ID(如没有模板ID请先在平台上新增并提交验证码模板,审核通过即可使用)
String templateId = "36";
// 验证码变量(随机数)
Integer num = (int)((Math.random()*9+1)*1000);
String variables = num.toString();
System.out.println("验证码是:"+variables);
// 拼接参数
NameValuePair[] data = {
new NameValuePair("appId", Config.appid),
new NameValuePair("appKey", Config.appkey),
new NameValuePair("phone", phone),
new NameValuePair("templateId", templateId),
new NameValuePair("variables", variables) };
method.setRequestBody(data);
try {
client.executeMethod(method);
String result = method.getResponseBodyAsString();
// 返回结果
System.out.println(result);
JSONObject jsonObject = JSONObject.parseObject(result);
// 返回2000则发送成功(逻辑操作请根据接口文档返回参数自行判断)
if (jsonObject.get("returnStatus").equals("2000")) {
System.out.println("成功!");
} else {
System.out.println("失败!");
}
// 释放连接
method.setRequestHeader("Connection", "close");
method.releaseConnection();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
验证码选择很重要,选择合适的短信平台不仅可以给项目加分,更能给用户更好的体验,可以用作验证码注册、短信提醒通知,开通服务通知以及扣款通知等场景。