短信服务-SMS

短信服务(Short Message Service)是广阔企业客户快速触达手机用户所优选运用的通信能力,分为国内短信服务和国际/港澳台短信服务。经过 API/SDK、控制台调用短信发送能力,将指定信息发送至国内或境外手机号码。

应用场景

  • 验证码

向手机号码发送包含验证码的短信,支撑经过变量替换完成特性短信定制。

一般用于APP、网站的账号注册;登录账户、异地登录时的安全提示;找回密码时的安全验证;付出认证、身份校验、手机绑定、快捷登录等场景。

  • 短信告诉

向手机号码发送告诉类短信,支撑经过变量替换完成特性短信定制。

一般用于向注册用户下发体系相关信息,包含升级或维护、服务注册、价格调整、 订单确认、物流动态、消费确认、 付出告诉等普通告诉短信。

  • 推行短信

向手机号码发送包含推行信息的短信,短信内容为经过审阅的模板内容,不支撑经过变量替换完成特性短信定制。

一般用于向注册用户和潜在客户发送告诉和推行信息,包含促销活动告诉、业务推行、新产品宣讲、会员关心等产品与活动的推行信息,能够增加企业产品曝光率、进步产品和企业的知名度。

  • 数字短信

向手机号码发送包含文本、图片、音频、视频的短信,短信内容为经过审阅的模板内容。

一般用于影视会员推行、旅游景点介绍、直播电商推行以及各类消费产品的介绍推行等,生动直观的展示,有效招引目标用户,帮助企业在市场竞争中获取更大的优势。

注册阿里云短信服务

阿里云官方网址:www.aliyun.com/

短信服务Java SDK的运用方法及示例

1.进入阿里云短信服务

【工具篇】Spring Boot 整合阿里云短信-SMS

2.点击免费注册

【工具篇】Spring Boot 整合阿里云短信-SMS

【工具篇】Spring Boot 整合阿里云短信-SMS

3.绑定测验手机号码

【工具篇】Spring Boot 整合阿里云短信-SMS

4.测验调用API发送短信

找到调用 API 发短信

记住充点钱在里面,1块钱就能够用很久了,一条短信几分钱。验证码 (0.045元/条);告诉短信 (0.045元/条)

【工具篇】Spring Boot 整合阿里云短信-SMS

SpringBoot 整合 阿里云短信

Demo 地址:mingyue-springboot-aliyun-sms

1.增加依赖

<!--  阿里云短信依赖  -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.16</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>2.1.0</version>
</dependency>

2.修正配置文件

aliyun:
  sms:
    sms-access-key-id: xxx
    sms-access-key-secret: xxx
    sms-endpoint: dysmsapi.aliyuncs.com
    sms-template-code: SMS_154950909
    sms-sign-name: 阿里云短信测验

3.编写短信推送服务

import cn.hutool.json.JSONUtil;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import java.util.Objects;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Service;
/**
 * 阿里云短信配置
 *
 * @author: Strive
 * @date: 2023/4/16 16:38
 */
@Slf4j
@Data
@Service
@ConfigurationProperties("aliyun.sms")
public class AliyunSmsService {
  private String smsAccessKeyId;
  private String smsAccessKeySecret;
  private String smsEndpoint;
  private String smsSignName;
  private String smsTemplateCode;
  /**
   * 运用 AK&ASK 初始化账号 Client
   *
   * @param accessKeyId
   * @param accessKeySecret
   * @return Client
   * @throws Exception 短信推送反常
   */
  public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint)
      throws Exception {
    Config config =
        new Config()
            // 必填,您的 AccessKey ID
            .setAccessKeyId(accessKeyId)
            // 必填,您的 AccessKey Secret
            .setAccessKeySecret(accessKeySecret);
    // 拜访的域名
    config.endpoint = endpoint;
    return new com.aliyun.dysmsapi20170525.Client(config);
  }
  /**
   * 发送短信验证码
   *
   * @param phone 电话号码
   * @throws Exception 短信推送反常
   */
  public boolean sendCode(String phone, String code) throws Exception {
    // 工程代码泄露可能会导致 AccessKey 泄露,并要挟账号下一切资源的安全性。以下代码示例仅供参考,主张运用更安全的 STS
    Client client = createClient(this.smsAccessKeyId, this.smsAccessKeySecret, this.smsEndpoint);
    SendSmsRequest sendSmsRequest =
        new SendSmsRequest()
            .setSignName(this.smsSignName)
            .setTemplateCode(this.smsTemplateCode)
            .setPhoneNumbers(phone)
            .setTemplateParam("{\"code\":\"" + code + "\"}");
    try {
      log.info("发送短信入参: " + JSONUtil.toJsonStr(sendSmsRequest));
      // 仿制代码运转请自行打印 API 的返回值
      SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
      log.info("发送短信成果: " + JSONUtil.toJsonStr(sendSmsResponse));
      if (Objects.nonNull(sendSmsResponse) && sendSmsResponse.getBody().code.equals("OK")) {
        return Boolean.TRUE;
      }
    } catch (TeaException error) {
      // 如有需要,请打印 error
      log.error("短信推送反常成果: " + error.message);
      return Boolean.FALSE;
    } catch (Exception e) {
      TeaException error = new TeaException(e.getMessage(), e);
      // 如有需要,请打印 error
      com.aliyun.teautil.Common.assertAsString(error.message);
      log.error("短信推送反常成果: " + error.message);
      return Boolean.FALSE;
    }
    return Boolean.FALSE;
  }
}

4.编写短信推送接口


/**
 * 短信推送接口
 *
 * @author Strive
 * @date 2023/4/16 10:48
 */
@RestController
@RequestMapping("/sms")
@RequiredArgsConstructor
public class SmsController {
  private final AliyunSmsService smsService;
  @GetMapping("/send")
  public ResponseEntity<Boolean> send(String phone) throws Exception {
    return ResponseEntity.ok(smsService.sendCode(phone, RandomUtil.randomNumbers(4)));
  }
}

测验发送短信

调用接口:http://127.0.0.1:8080/sms/send