提前准备工作
2.已 购买 短信套餐包。
3.准备短信签名归属方资质证明文件
4.已获取短信应用的 SDKAppID。
主要获取这几个参数
secretId(秘钥id)
secretKey(秘钥key)
SmsSdkAppId(appId)
TemplateId(短信模板id)
目录
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.tencentcloudapigroupId>
- <artifactId>tencentcloud-sdk-java-commonartifactId>
- <version>LATESTversion>
- dependency>
- <dependency>
- <groupId>com.tencentcloudapigroupId>
- <artifactId>tencentcloud-sdk-java-smsartifactId>
- <version>LATESTversion>
- dependency>
-
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("验证失败");
- }