近日在写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);
}
到此七牛发送短信验证码的流程就说完了,检验验证码只需要把保存的验证码和用户输入的验证码对比即可。