提前准备工作
2.已 购买 短信套餐包。
3.准备短信签名归属方资质证明文件
4.已获取短信应用的 SDKAppID。
主要获取这几个参数
secretId(秘钥id)
secretKey(秘钥key)
SmsSdkAppId(appId)
TemplateId(短信模板id)
目录
1.获取验证码、缓存
1.1参考腾讯云对接腾讯云接口文档短信 如何实现短信验证码功能-最佳实践-文档中心-腾讯云
1.2使用腾讯云在线调试,先做调试,可以正确获取短信后,生成java代码
下面附上代码,供大家参考
/**
* 获取腾讯云手机短信验证码
*
* @param phone
* @return
*/
@Override
public ResponseResult getPhoneNumberVerify(String phone) {
Object p = CacheUtils.get("phoneVerifyCode", phone);
if (StringUtils.isEmpty(phone)){
return null;
}
if(null != p && !String.valueOf(p).isEmpty()){
return ResponseResultUtils.genErrorResult("请勿重复获取验证码");
}
String regex = "^1[3,4,5,6,7,8,9][0-9]{9}$";
if (!phone.matches(regex)){
return ResponseResultUtils.genErrorResult("手机号格式不正确");
}
try{
// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
Credential cred = new Credential("秘钥id", "秘钥keyb");
// 实例化一个http选项
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("sms.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
SendSmsRequest req = new SendSmsRequest();
String[] phoneNumberSet1 = {phone};
req.setPhoneNumberSet(phoneNumberSet1);
req.setSmsSdkAppId("SmsSdkAppId");
req.setSignName("签名内容(这个参数不是不填)");
req.setTemplateId("短信模板id");
Random random = new Random();
int randomNumber = random.nextInt(999999);
String[] templateParamSet1 = {String.valueOf(randomNumber)};
req.setTemplateParamSet(templateParamSet1);
// 返回的resp是一个SendSmsResponse的实例,与请求对象对应
SendSmsResponse resp = client.SendSms(req);
// 输出json格式的字符串回包
System.out.println("--->"+SendSmsResponse.toJsonString(resp));
SendStatus[] sendStatusSet = resp.getSendStatusSet();
JSONObject jsonObject = JSONObject.from(sendStatusSet[0]);
if ("Ok".equals(jsonObject.getString("Code"))){
CacheUtils.put("phoneVerifyCode",phone,randomNumber,60000);
return ResponseResultUtils.genResult("发送成功");
}
} catch (TencentCloudSDKException e) {
System.out.println(e.toString());
}
return ResponseResultUtils.genErrorResult("发送失败");
}
此外还需要在pom.xml加上包依赖
<!--腾讯云短信登录获取验证码-->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-common</artifactId>
<version>LATEST</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-sms</artifactId>
<version>LATEST</version>
</dependency>
<!--end-->
2.从缓存中获取验证码、校验
2.1校验验证码就很简单啦,从缓存中根据手机号获取验证码,我用的是系统自带缓存,使用redis的话,根据收据号手机号key,获取value
/**
* 验证腾讯云手机短信验证码
*
* @param code
* @param phone
* @return
*/
@Override
public ResponseResult verifyPhoneVerifyCode(String code, String phone) {
String verifyCode = CacheParamUtils.getParmValue("phone.verify.code");
if (verifyCode.equals(code)){
return ResponseResultUtils.genResult("验证成功");
}
Object p = CacheUtils.get("phoneVerifyCode", phone);
if (null == p && StringUtils.isEmpty(String.valueOf(p))){
return ResponseResultUtils.genErrorResult("验证码失效");
}
if (String.valueOf(p).equals(code)){
return ResponseResultUtils.genResult("验证成功");
}
return ResponseResultUtils.genErrorResult("验证失败");
}