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