网站或者APP的新用户注册环节,基本上会用到用户手机号验证功能,该功能是否安全、稳定会直接影响新注册用户的转化率。
企业使用新用户注册功能,通常会遇到以下两方面的问题:
一、短信接口被刷
1、产生原因
因为新用户注册页面暴露在公开的网络环境中,任何人都可以调用该功能;部分违规软件会利用这一特点,会模拟人工大量获取短信验证码;
2、不利后果
因为软件可以高并发循环请求短信,所以会导致如下一些不利后果:
1)贵公司的的短信被大量恶意消耗;
2)因为短信是以贵公司名义发出的,所以会对贵公司的品牌造成一定的负面影响;
3)被骚扰的用户可能会进行投诉,会对贵公司的短信正常发送、短信通道安全稳定造成一定影响。
3、解决方案
除了贵公司在新用户注册页面做好必要防护之外,短信平台也提供了如下一系列功能,帮助您降低短信验证码接口被刷的风险:
1)异常发送拦截:实时分析接口提交的每条短信的发送特征,如遇异常立即执行实时拦截,为您节约大量短信成本。
2)最大发送量设置:根据业务实际情况,设置账户每日最大短信发送量,达到设置的阈值后,系统暂停短信发送,并给管理员推送短信通知。
3)每号码每日最大发送量:可对单一手机号码的最大日发送量进行限制。
二、部分用户收不到或延迟收到验证码短信
1、产生原因
因用户退订、投诉、运营商通道故障、通道拥堵、用户手机问题等因素,导致一部分客户无法收到验证码短信,从而影响贵公司的推广转化。
2、不利后果
新注册用户收不到验证码短信,会产生如下影响:
1)因用户收不到注册验证短信导致客户流失;
2)部分收不到短信的用户,会向公司客服反馈,增加售后工作压力;
3)对公司品牌的认可度降低。
3、短信平台解决方案
为了最大限度的提升验证码短信的到达率,短信接口还提供如下增值服务:
1)失败自动补发:实时侦测短信送达状态,如遇失败,系统实时自动使用另一条短信通道进行补发;
2)异常自动补发:针对某些特殊情况,如遇客户未在10秒内(时间可设置)收到注册验证短信,系统会自动调用另外一条短信通道重发一条;
3)语音自动补呼:可设置用户在第三次点击获取验证码短信按钮时,系统以电话语音的方式给客户播报验证码数字。
代码示例
//接口类型:互亿无线触发短信接口,支持发送验证码短信、订单通知短信等。
// 账户注册:请通过该地址开通账户http://user.ihuyi.com/?9vXc7
// 注意事项:
//(1)调试期间,请使用用系统默认的短信内容:您的验证码是:【变量】。请不要把验证码泄露给其他人。
//(2)请使用 APIID 及 APIKEY来调用接口,可在会员中心获取;
//(3)该代码仅供接入互亿无线短信接口参考使用,客户可根据实际需要自行编写;
//开启SESSION
session_start();
header("Content-type:text/html; charset=UTF-8");
//请求数据到短信接口,检查环境是否 开启 curl init。
function Post($curlPost,$url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
$return_str = curl_exec($curl);
curl_close($curl);
return $return_str;
}
//将 xml数据转换为数组格式。
function xml_to_array($xml){
$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches)){
$count = count($matches[0]);
for($i = 0; $i < $count; $i++){
$subxml= $matches[2][$i];
$key = $matches[1][$i];
if(preg_match( $reg, $subxml )){
$arr[$key] = xml_to_array( $subxml );
}else{
$arr[$key] = $subxml;
}
}
}
return $arr;
}
//random() 函数返回随机整数。
function random($length = 6 , $numeric = 0) {
PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);
if($numeric) {
$hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));
} else {
$hash = '';
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghjkmnpqrstuvwxyz';
$max = strlen($chars) - 1;
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
}
return $hash;
}
//短信接口地址
$target = "http://106.ihuyi.com/webservice/sms.php?method=Submit";
//获取手机号
$mobile = $_POST['mobile'];
//获取验证码
$send_code = $_POST['send_code'];
//生成的随机数
$mobile_code = random(4,1);
if(empty($mobile)){
exit('手机号码不能为空');
}
//防用户恶意请求
if(empty($_SESSION['send_code']) or $send_code!=$_SESSION['send_code']){
exit('请求超时,请刷新页面后重试');
}
$post_data = "account=用户名&password=密码&mobile=".$mobile."&content=".rawurlencode("您的验证码是:".$mobile_code."。请不要把验证码泄露给其他人。");
//查看用户名 登录用户中心->验证码通知短信>产品总览->API接口信息->APIID
//查看密码 登录用户中心->验证码通知短信>产品总览->API接口信息->APIKEY
$gets = xml_to_array(Post($post_data, $target));
if($gets['SubmitResult']['code']==2){
$_SESSION['mobile'] = $mobile;
$_SESSION['mobile_code'] = $mobile_code;
}
echo $gets['SubmitResult']['msg'];