提前准备工作
1.已 注册腾讯云 账号,并完成 企业实名认证。
2.已 购买 短信套餐包。
3.准备短信签名归属方资质证明文件
4.已获取短信应用的 SDKAppID。
主要获取这几个参数
secretId(秘钥id)
secretKey(秘钥key)
SmsSdkAppId(appId)
TemplateId(短信模板id)
目录
1.获取验证码、缓存
2.从缓存中获取验证码、校验
1.获取验证码、缓存
1.1参考腾讯云对接腾讯云接口文档短信 如何实现短信验证码功能-最佳实践-文档中心-腾讯云
1.2使用腾讯云在线调试,先做调试,可以正确获取短信后,生成java代码
下面附上代码,供大家参考
/*** 获取腾讯云手机短信验证码** @param phone* @return*/@Overridepublic 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*/@Overridepublic 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("验证失败");}