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

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

1.       下载阿里大鱼SDK

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

175926_6z84_2757387.png

 

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

转载于:https://my.oschina.net/kevin2kelly/blog/860115

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值