下面我就详细讲解一下如何在Java Web项目中使用华为云短信服务,包括如何调用华为云短信服务SDK以及如何使用短信通知公共类发送短信。
首先,需要下载并导入华为云短信服务的Java SDK依赖。我们可以在华为云短信服务官网下载Java SDK的zip压缩包,解压后得到以下文件:
├── README.md
├── bin
│ ├── smn
│ ├── smn.bat
│ ├── smn.ps1
│ ├── smnpy
│ ├── smnpy.bat
│ └── smnpy.ps1
├── docs
│ ├── SMN-Function-Invocation-Reference.md
│ ├── SMN-SDK-for-Java-User-Guide.md
│ └── examples.md
└── lib
├── SMN-SDK-for-Java-1.0.11.jar
├── gson-2.3.1.jar
├── httpclient-4.5.2.jar
├── httpcore-4.4.4.jar
├── httpmime-4.5.2.jar
├── log4j-1.2.17.jar
├── slf4j-api-1.7.18.jar
└── slf4j-log4j12-1.7.18.jar
其中,lib目录下的SMN-SDK-for-Java-1.0.11.jar就是SDK的核心代码,我们需要将其导入我们的Java Web项目中。
短信通知公共类是一个封装了短信发送逻辑的Java类,方便我们在项目中使用。我们可以创建一个名为SmsUtil
的类,代码如下:
package com.example.utils;
import cn.hutool.core.util.RandomUtil;
import com.huawei.smn.model.request.sms.SmsPublishRequest;
import com.huawei.smn.model.request.sms.SmsPublishReqDto;
import com.huawei.smn.model.response.sms.SmsPublishResponse;
import com.huawei.smn.service.SendSmsService;
import com.huawei.smn.service.SmnServiceFactory;
public class SmsUtil {
private static final String DOMAIN_NAME = "eu-de-messaging.example.com";//短信服务的用户域名,请根据实际情况修改
private static final String PROJECT_ID = "your-project-id";//短信服务所在的项目ID,请根据实际情况修改
private static final String REGION = "eu-de";//短信服务所在的区域,请根据实际情况修改
private static final String ACCESS_KEY_ID = "your-access-key-id";//账号的Access Key,请根据实际情况修改
private static final String SECRET_ACCESS_KEY = "your-secret-access-key";//账号的Secret Access Key,请根据实际情况修改
private static final String SIGN_ID = "your-sign-id";//短信签名的ID,请根据实际情况修改
private static final String TEMPLATE_ID = "your-template-id";//短信模板的ID,请根据实际情况修改
public static SmsPublishResponse sendSms(String phoneNumber) {
//生成随机验证码
String verifyCode = RandomUtil.randomNumbers(6);
//创建短信发送请求对象
SmsPublishReqDto requestDto = new SmsPublishReqDto(SIGN_ID, TEMPLATE_ID, verifyCode, phoneNumber);
SmsPublishRequest request = new SmsPublishRequest();
request.setSmsPublishReqDto(requestDto);
request.setProjectId(PROJECT_ID);
//初始化短信服务Factory
SmnServiceFactory factory = new SmnServiceFactory();
factory.setAccessKeyId(ACCESS_KEY_ID);
factory.setSecretAccessKey(SECRET_ACCESS_KEY);
factory.setDomainName(DOMAIN_NAME);
factory.setRegion(REGION);
factory.setProjectId(PROJECT_ID);
//创建短信服务
SendSmsService smsService = factory.createSmsService();
//发送短信
SmsPublishResponse response = smsService.sendSms(request);
return response;
}
}
上述代码中,我们先定义了一些常量,如短信服务的用户域名、Access Key、短信签名ID、短信模板ID等。然后定义了一个sendSms
方法,该方法接受一个手机号码作为参数,生成一个6位数的随机验证码,然后使用短信发布请求对象和短信服务Factory创建短信服务,最后调用短信服务的sendSms
方法发送短信。
在我们需要发送短信的地方,可以直接调用SmsUtil.sendSms
方法即可发送短信。例如,在用户注册时需要发送短信验证码,可以在注册的控制器中添加如下代码:
package com.example.controller;
import com.example.utils.SmsUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/register")
public String register(@RequestParam String phoneNumber) {
//发送短信验证码
SmsUtil.sendSms(phoneNumber);
return "success";
}
}
上述代码中,我们在用户注册控制器中添加了一个register
方法,该方法接受一个手机号码作为参数,在注册时调用SmsUtil.sendSms
方法发送短信验证码。这样,用户在注册时就可以收到短信验证码了。
另一个示例是在用户找回密码时需要发送短信验证码,可以在找回密码的控制器中添加如下代码:
package com.example.controller;
import com.example.utils.SmsUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PasswordController {
@PostMapping("/forgot_password")
public String forgotPassword(@RequestParam String phoneNumber) {
//发送短信验证码
SmsUtil.sendSms(phoneNumber);
return "success";
}
}
类似地,在找回密码控制器中也调用了SmsUtil.sendSms
方法发送短信验证码。
通过上述步骤,我们可以很方便地在Java Web项目中使用华为云短信服务发送短信通知。我们创建了一个短信通知公共类SmsUtil
,并在需要发送短信的地方直接调用该类的sendSms
方法即可发送短信。
本文链接:http://task.lmcjl.com/news/14285.html