您的位置:首页 > 数据库 > Redis

使用阿里大于发送短信验证码并存储到redis中

2017-05-10 15:50 671 查看

maven项目使用阿里大于发送短信验证码并存储到redis中

1. 下载阿里大鱼SDK

在官网就可以下载,下载完以后,解压后我们看见: 



2.我们接下来需要做的,就是将本地的这两个文件,加入本地仓库
3.Pom文件添加配置依赖:

<!-- 阿里大于短信 -->
<dependency>
<groupId>com.taobao</groupId>
<artifactId>dayu</artifactId>
<version>1.0.0</version>
</dependency>
4.因maven库中没有该插件,所以需要手动下载插件,然后包装成maven依赖,执行命令:

mvn install:install-file -DgroupId=com.taobao -DartifactId=dayu -Dversion=1.0.0 -Dpackaging=jar -Dfile=D:\.m2\repository\com\taobao\dayu\1.0.0\taobao-sdk-java-auto_1455552377940-20160607.jar

或:

mvn install:install-file -Dfile=d:\****.jar -DgroupId=com.taobao -DartifactId=dayu -Dversion=1.0.0 -Dpackaging=jar

5.发送短信代码:

import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.AlibabaAliqinFcSmsNumSendRequest;
import com.taobao.api.response.AlibabaAliqinFcSmsNumSendResponse;
import com.liyang.common.http.OperationCode;
import com.liyang.common.http.ResponseEntityBody;
import com.liyang.util.MathUtil;
import com.liyang.util.RegexUtil;
import com.liyang.view.common.SmsCodeView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.concurrent.TimeUnit;

/**
* Author: 李阳
* Date: 16/03/2017
* Version: 1.0
* Description:
*/
@Controller
@RequestMapping(value = "/sms/alidayu")
public class SmsSender {
private static final Logger logger = LoggerFactory.getLogger(SmsSender.class);

@Autowired
private RedisTemplate redisTemplate;

@Value("${alidayu.url}")
private String url;

@Value("${alidayu.appKey}")
private String appkey;

@Value("${alidayu.appSecret}")
private String secret;

@Value("${alidayu.validation.smsTemplateCode}")
private String smsTemplateCode;

@Value("${alidayu.validation.smsFreeSignName}")
private String smsFreeSignName;

@Value("${redis.expiration}")
private int redisExpiration;
private final String smsType = "normal";

/**
* 发送短信验证码
*/
@RequestMapping(method = RequestMethod.POST, value = "/sender")
@ResponseBody
public ResponseEntityBody send(@RequestBody SmsCodeView smsCodeView) {
ResponseEntityBody responseEntityBody = new ResponseEntityBody();

String phone = smsCodeView.getMobile();
AlibabaAliqinFcSmsNumSendResponse rsp = null;
String code = null;

try {
if (RegexUtil.isMobile(phone)) {
if (redisTemplate.hasKey(phone)) {
responseEntityBody.setOperationCode(OperationCode.SMS_SENT);
} else {
code = MathUtil.generateAuthCode(6);
TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
AlibabaAliqinFcSmsNumSendRequest req = new AlibabaAliqinFcSmsNumSendRequest();
req.setExtend("extend info");              //扩展信息
req.setSmsType(smsType);                   //短信类型 “normal”
req.setSmsFreeSignName(smsFreeSignName);   //短信签名
req.setSmsParamString("{\"code\":\"" + code + "\",\"product\":\"逗逼橙用户登录的\"}");//短信参数
req.setRecNum(phone);                      //短信通知的手机号
req.setSmsTemplateCode(smsTemplateCode);   //短信模板
rsp = client.execute(req);                 //发送短信

//短信发送成功,将验证码保存到redis中
if (rsp.isSuccess()) {
redisTemplate.opsForValue().set(phone, code, redisExpiration, TimeUnit.SECONDS);
}

responseEntityBody.setOperationCode(OperationCode.SUCCESS);
}
} else {
responseEntityBody.setOperationCode(OperationCode.ERR_PHONE);
}
responseEntityBody.setBody(rsp);
} catch (ApiException e) {
logger.error(e.getMessage());
}
return responseEntityBody;
}

}


public class MathUtil {

/**
* 生成验证码
*
* @param num 位数
* @return 纯数字验证码
*/
public static String generateAuthCode(int num) {
String chars = "0123456789";
char[] rands = new char[num];
for (int i = 0; i < num; i++) {
int rand = (int) (Math.random() * 10);
rands[i] = chars.charAt(rand);
}
return new String(rands);
}
}

alidayu配置信息:

##=====================================  配置 alidayu  =====================================
alidayu.url=http://gw.api.taobao.com/router/rest
alidayu.appKey=23666474
alidayu.appSecret=f36e3407a2d18a5a7f03d32cddf67831
# 阿里大于通知短信模版编码
alidayu.notify.smsTemplateCode=SMS_52330022
# 阿里大于验证短信模版编码
alidayu.validation.smsTemplateCode=SMS_52330024
# 阿里大于信息变更短信模版编码
alidayu.infoChange.smsTemplateCode=SMS_52330017
# 阿里大于卡挂失,解挂或注销成功后通知短信模版编码
alidayu.cardNotify.smsTemplateCode=SMS_58245027
# 阿里大于短信签名
alidayu.validation.smsFreeSignName=逗逼橙

spring-boot项目中,在spring上下文中读取配置文件出现中文乱码,需要添加如下配置:

#配置spring上下使用spring-boot默认的utf-8字符编码
spring.http.encoding.force=true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息