短信验证码是企业的刚需,不管是用户注册还是用户通知,作用总是不可代替。快速的短信验证码,可以明显提升用户体验,也可以给用户留下一个好印象。下面给大家介绍一下提升短信验证码速度方法。
第一、服务器相应速度,验证码是属于触发类型,一般来说更看重的是合作短信平台的服务器,虽说自身服务器也会产生一定的影响,但是基本是可以忽略不计的。
短信平台的服务器对请求处理不及时,这就导致短信验证码的延时发送,导致的现象就是用户收到验证码的速度很慢。
应对方法:找一个能进行接口测试的短信平台,例如,如下截图,切记勿听销售人员的忽悠,实践才是检验真理的唯一标准。
第二、看合作的短信平台是否接入的是直连通道。
太多的公司都是接入的二手甚至是三手通道资源,一个请求需要经过两三个服务器才能到达运营商进行验证码下发,一看知道是拖慢了验证码速度。提升方法还是需要依赖短信供应商,这里给大家说明一下三大运营商的质量通道接口:移动CMPP接口、联通SGIP接口、电信SMGP接口,这些接口接入起来复杂、繁琐,一般的短信平台都会整合成标准的HTTP接口,方便技术人员接入。
那么,有人要问了,如何判断是不是直连通道
目前是无法通过接口代码进行判断,但是可以记住这句话:没有增值电信业务经营许可证和工信部号码资质证书的企业基本都是没有一手短信通道。
其次是价格,看最低价格,一般来说都是看发送量,发送量越大,价格越优惠,当然,二手通道中间有人赚差价,价格方面和一手通道资源比不了。
最后就是压力测试,测试平台能承受的最大发送量和并发量,最好是联系上短信平台技术,得出一个结论。建议在选择的时候多选几家对比。
最后附上一家可以在线测试接口的短信验证码的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();
}
}
}