七牛云发送短信验证码

近日在写app用户注册接口的时候,需要用到短信验证码,公司选择了七牛的短信验证码。在网上看了七牛的开发者文档,一脸茫然,百度了很久,发现网上阿里云的发送短信,但对于七牛的短信验证码没有具体的描述,困扰了一下午。最终在公司大佬和GitHub的帮助下,实现了该功能。


第一,首先需要导入七牛的jar包,方法如下图:

导入七牛的jar包有多种方法。第一种是直接复制下面的链接在浏览器中打开,就可直接下载jar包https://search.maven.org/remote_content?g=com.qiniu&a=qiniu-java-sdk&v=LATEST。 第二种方式是使用maven仓库,直接在pom.xml加入

<dependency>
  <groupId>com.qiniu</groupId>
  <artifactId>qiniu-java-sdk</artifactId>
  <version>[7.2.0, 7.2.99]</version>
</dependency>

即可。


第二,负责调用七牛云短信接口的util。如下图:

其中accessKey(AK),secretKey(SK),TemplateId(模板id)可以在申请七牛云短信时获取。map的存在是为了给短信模板添加动态内容。比如短信模板为:也熊的博客欢迎你,验证码为${code}map中的第一个参数的key="code",value="123456"。那么你接收到的信息内容为:也熊的博客欢迎你,验证码为123456。上面三行描述是对上面截图的描述。下面为代码:

import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.sms.SmsManager;
import com.qiniu.util.Auth;
import com.whl.project.properties.GlobalProperites;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

@Slf4j
@Component
public class SendMessageUtil {

    @Autowired
    private GlobalProperites globalProperites;

    /**
     * 发送手机验证码
     */
    public  Boolean sendMessageCheck(String[] phone, Map<String, String> map){

        String accessKey = "**********************";
        String secretKey = "**********************";
        Auth auth = Auth.create(accessKey, secretKey);
        SmsManager smsManager = new SmsManager(auth);
        try {
            Response resp = smsManager.sendMessage(TemplateId, phone , map);

            if(resp.statusCode == 200){
                return true;
            }else {
                return false;
            }
        } catch (QiniuException e) {
            log.info("发生短信异常 =======================" ,e);
        }
        return false;
    }

}
这里resp.statusCode == 200是把调用短信返回的状态码取出来了,如果等于200,说明发送成功。你也可以直接查看返回的参数resp。

第三,实现接口。如下图:

1是生成六位随机数,在这里不细说,有需要留言。

2是存放验证码。现在一般都存放在redis里,也可以存放在mysql数据库。建议存放在redis里。

3是调用七牛云短信接口的util。参数phone是个数据,可放多个手机号。map就是前面说的map,也可以放多个参数。

下面是代码:

/**
 * 发送短信验证码
 */
@RequestMapping(value = "/api/sendValidCode", method = RequestMethod.POST)
@Description(name = "发送短信验证码")
@ApiOperation("发送短信验证码")
public @ResponseBody
Response<Boolean> sendValidCode(@RequestParam("phone") String phone) throws Exception {
    //获取验证码
    String code= NumberUtil.getMessageCode();
    //存入redis
    redisService.set(WhlConstants.Redis.MESSAGECODE_PHONE + phone, code , 60*3L);

    Map<String , String> map = new HashMap<String , String>();
    map.put("code",code);

    Boolean rest = sendMessageUtil.sendMessageCheck(new String[]{phone},map);

    return Response.buildSuccess(rest);
}

到此七牛发送短信验证码的流程就说完了,检验验证码只需要把保存的验证码和用户输入的验证码对比即可。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值