1.下载redis准备
- 运行redis-server:redis-server.exe redis.windows.conf
- 再开一个命令行窗口,进入redis目录运行redis-cli.exe命令
2.注册阿里云服务(并申请一个模板和签名写程序有用,发送验证码要收钱往自己账户里充点钱)
3.添加依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
public static String getVerifyCode(){
Random random=new Random();
StringBuilder stringBuilder=new StringBuilder();
for(int i=0;i<6;i++){
stringBuilder.append(String.valueOf(random.nextInt(10)));
}
return stringBuilder.toString();
}
package com.spring.jianyueapi.util;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
public class SMSUtil {
public static String send(String mobile){
DefaultProfile profile=DefaultProfile.getProfile("cn-hangzhou","LTAIL4bn0wGEtnsG","KMwPoHxc95LnRAfmaIL6sAVJ4M9PGc");
IAcsClient client=new DefaultAcsClient(profile);
CommonRequest request=new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", mobile);
request.putQueryParameter("SignName", "jianyuesms");
request.putQueryParameter("TemplateCode", "SMS_162732247");
String verifyCode = StringUtil.getVerifyCode();
request.putQueryParameter("TemplateParam","{\"code\":"+verifyCode+"}");
CommonResponse response= null;
try {
response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ClientException e) {
e.printStackTrace();
}
return verifyCode;
}
}
void signUp(UserDTO userDTO);
@Override
public void signUp(UserDTO userDTO) {
User user1=new User();
user1.setMobile(userDTO.getMobile());
user1.setPassword(StringUtil.getBase64Encoder(userDTO.getPassword()));
user1.setNickname("新用户");
user1.setAvatar("http://ppeto2k90.bkt.clouddn.com/avatar/default.png");
user1.setRegtime(new Date());
user1.setStatus((short)1);
userMapper.insert(user1);
}
@PostMapping(value = "/verify")
public ResponseResult getVerifyCode(@RequestParam("mobile") String mobile){
User user=userService.getUserByMobile(mobile);
if (user!=null){
return ResponseResult.error(StatusConst.MOBILE_EXIST,MsgConst.MOBILE_EXIST);
}else{
//SMSUtil.send(mobile);
String verifyCode= SMSUtil.send(mobile);
System.out.println(verifyCode);
redisService.set(mobile,verifyCode);
return ResponseResult.success();
}
}
@PostMapping(value = "/check")
public ResponseResult checkVerifyCode(@RequestParam("mobile") String mobile,@RequestParam("verifyCode") String verifyCode){
String code=redisService.get(mobile).toString();
System.out.println(code+"---");
System.out.println(verifyCode);
if(code.equals(verifyCode)){
return ResponseResult.success();
}else {
return ResponseResult.error(StatusConst.VERIFYCODE_ERROR,MsgConst.VERIFYCODE_ERROR);
}
}
@PostMapping(value = "/sign_up")
public ResponseResult signUp(@RequestBody UserDTO userDTO){
userService.signUp(userDTO);
return ResponseResult.success();
}
前端
<template>
<view class="content">
<view class="box"><input type="number" class="phone" v-model="mobile" placeholder="请输入手机号" required="required"/></view>
<view class="box"><input type="text" class="code" v-model="verifyCode" placeholder="请输入短信验证码" required="required" />
<button class="accept" @tap="!safety.state ? getVerifyCode():''">{{!safety.state&&'获取'||(safety.time+' s')}}</button>
</view>
<button @tap="checkCode" class="register"><text class="rightnow">下一步</text></button>
</view>
</template>
<script>
export default {
data() {
return {
mobile:'',
verifyCode:'',
safety:{
time:60,
state:false,
interval:''
}
};
},
onLoad() {
},
onShow() {
},
methods: {
getVerifyCode:function(){
var _this=this;
uni.request({
url:this.apiServer+'/user/verify',
method:'POST',
header:{
'content-type':'application/x-www-form-urlencoded'
},
data:{
mobile:_this.mobile
},
success:res =>{
//成功后倒计时60s后可在点击
this.safety.state=true;
//倒计时
this.safety.interval=setInterval(() =>{
if(this.safety.time-- <=0){
this.safety.time=60;
this.safety.state=false;
clearInterval(this.safety.interval);
}
},1000);
if(res.data.code===0){
uni.showToast({
title:'验证码已发送'
});
_this.disabled=true;
console.log(_this.disabled);
}else{
uni.showModal({
title:'提示',
content:res.data.msg
});
}
}
})
},
checkCode:function(){
var _this=this;
console.log(_this.verifyCode);
uni.request({
url: this.apiServer + '/user/check',
method:'POST',
header:{
'content-type':'application/x-www-form-urlencoded'
},
data:{
mobile:_this.mobile,
verifyCode:_this.verifyCode
},
success: res =>{
console.log(res.data);
if(res.data.code===0){
uni.navigateTo({
url:'../register_psd/register_psd?mobile='+_this.mobile
});
}else{
uni.showModal({
title:'提示',
content:res.data.msg
});
}
}
});
}
}
};
</script>
<template>
<view class="content">
<view class="box"><input type="text" password class="password" v-model="password" placeholder="请输入密码" required="required"/></view>
<navigator class="register" @tap="signUp(userDTO)"><button class="rightnow">立即注册</button></navigator>
</view>
</template>
<script>
export default {
data() {
return {
mobile:'',
password:''
};
},
onLoad:function(option) {
//option为object类型,会序列化上个页面传递的参数
console.log(option.mobile);
this.mobile=option.mobile;
},
onShow() {
},
methods: {
signUp:function(userDTO){
var _this=this;
uni.request({
url:this.apiServer+'/user/sign_up',
method:'POST',
header:{'content-type': 'application/json'},
data:{
mobile:_this.mobile,
password:_this.password
},
success:res =>{
if(res.data.code===0){
uni.showModal({
title:'提示',
content:'注册成功'
})
uni.navigateTo({
url:'../signin/signin'
});
}else{
uni.showModal({
title:'提示',
content:res.data.msg
});
}
}
});
}
}
};
</script>