关键词

javaweb如何使用华为云短信通知公共类调用

下面我就详细讲解一下如何在Java Web项目中使用华为云短信服务,包括如何调用华为云短信服务SDK以及如何使用短信通知公共类发送短信。

1. 下载并导入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项目中。

2. 创建短信通知公共类

短信通知公共类是一个封装了短信发送逻辑的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方法发送短信。

3. 调用短信通知公共类发送短信

在我们需要发送短信的地方,可以直接调用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

展开阅读全文