[ツール] Spring Boot は Alibaba Cloud SMS-SMS を統合します

ショートメッセージサービス-SMS

ショート メッセージ サービス (Short Message Service) は、法人顧客が携帯電話ユーザーにすばやく連絡できるようにするための優先通信機能であり、国内 SMS サービスと国際/香港、マカオ、台湾 SMS サービスに分けられます。API/SDKとコンソールからSMS送信機能を呼び出し、指定した情報を国内・海外の携帯電話番号に送信します。

適用シナリオ

  • 検証コード

検証コードを含むテキスト メッセージを携帯電話番号に送信し、変数置換によるパーソナライズされたテキスト メッセージのカスタマイズをサポートします。

これは通常、アプリやウェブサイトのアカウント登録、アカウントへのログインやリモート ログイン時のセキュリティ リマインダー、パスワード取得時のセキュリティ検証、支払い認証、本人確認、携帯電話のバインド、クイック ログインなどのシナリオに使用されます。

  • SMS通知

通知テキスト メッセージを携帯電話番号に送信し、変数置換によるパーソナライズされたテキスト メッセージのカスタマイズをサポートします。

通常、システム関連の情報を登録ユーザーに配信するために使用されます。これには、アップグレードやメンテナンス、サービスの有効化、価格調整、注文確認、物流の更新、消費確認、支払い通知などの一般的な通知メッセージが含まれます。

  • プロモーション SMS

プロモーション情報を含むテキスト メッセージを携帯電話番号に送信します。テキスト メッセージの内容は、確認済みのテンプレートの内容です。変数置換によるパーソナライズされたテキスト メッセージのカスタマイズはサポートされていません。

通常、登録ユーザーおよび潜在顧客に、プロモーション活動の通知、ビジネス プロモーション、新製品の発表、メンバー ケア、および製品や活動に関するその他のプロモーション情報を含む、通知およびプロモーション情報を送信するために使用されます。製品や企業の人気。

  • デジタル SMS

テキスト、画像、音声、動画を含むショート メッセージを携帯電話番号に送信します。ショート メッセージの内容は、レビュー済みのテンプレートの内容です。

通常、映画やテレビのメンバーのプロモーション、観光スポットの紹介、ライブ電子商取引のプロモーション、さまざまな消費財の紹介とプロモーションに使用されます.鮮やかで直感的なディスプレイは、ターゲットユーザーを効果的に引き付け、企業を支援します.市場競争でより大きな優位性を獲得します。

アリババ クラウド SMS サービスを有効にする

Aliyun 公式ウェブサイト: www.aliyun.com/

SMS サービス Java SDK の使用方法と例

1. Alibaba Cloud SMS サービスに入る

image-20230416140310825

2. クリックして無料で開く

image-20230416140919885

image-20230416141001913

3. バインディングテスト携帯電話番号

image-20230416141352354

4. SMS を送信する呼び出し API のテスト

テキスト メッセージを送信するための API を見つけて呼び出す

お金を入れることを忘れないでください。1元は長期間使用でき、テキストメッセージには数セントかかります。验证码 (0.045元/条);通知短信 (0.045元/条)

image-20230416141534706

SpringBoot は Alibaba Cloud SMS を統合します

デモアドレス: 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

おすすめ

転載: juejin.im/post/7222575963564687416