ショートメッセージサービス-SMS
ショート メッセージ サービス (Short Message Service) は、法人顧客が携帯電話ユーザーにすばやく連絡できるようにするための優先通信機能であり、国内 SMS サービスと国際/香港、マカオ、台湾 SMS サービスに分けられます。API/SDKとコンソールからSMS送信機能を呼び出し、指定した情報を国内・海外の携帯電話番号に送信します。
適用シナリオ
- 検証コード
検証コードを含むテキスト メッセージを携帯電話番号に送信し、変数置換によるパーソナライズされたテキスト メッセージのカスタマイズをサポートします。
これは通常、アプリやウェブサイトのアカウント登録、アカウントへのログインやリモート ログイン時のセキュリティ リマインダー、パスワード取得時のセキュリティ検証、支払い認証、本人確認、携帯電話のバインド、クイック ログインなどのシナリオに使用されます。
- SMS通知
通知テキスト メッセージを携帯電話番号に送信し、変数置換によるパーソナライズされたテキスト メッセージのカスタマイズをサポートします。
通常、システム関連の情報を登録ユーザーに配信するために使用されます。これには、アップグレードやメンテナンス、サービスの有効化、価格調整、注文確認、物流の更新、消費確認、支払い通知などの一般的な通知メッセージが含まれます。
- プロモーション SMS
プロモーション情報を含むテキスト メッセージを携帯電話番号に送信します。テキスト メッセージの内容は、確認済みのテンプレートの内容です。変数置換によるパーソナライズされたテキスト メッセージのカスタマイズはサポートされていません。
通常、登録ユーザーおよび潜在顧客に、プロモーション活動の通知、ビジネス プロモーション、新製品の発表、メンバー ケア、および製品や活動に関するその他のプロモーション情報を含む、通知およびプロモーション情報を送信するために使用されます。製品や企業の人気。
- デジタル SMS
テキスト、画像、音声、動画を含むショート メッセージを携帯電話番号に送信します。ショート メッセージの内容は、レビュー済みのテンプレートの内容です。
通常、映画やテレビのメンバーのプロモーション、観光スポットの紹介、ライブ電子商取引のプロモーション、さまざまな消費財の紹介とプロモーションに使用されます.鮮やかで直感的なディスプレイは、ターゲットユーザーを効果的に引き付け、企業を支援します.市場競争でより大きな優位性を獲得します。
アリババ クラウド SMS サービスを有効にする
Aliyun 公式ウェブサイト: www.aliyun.com/
1. Alibaba Cloud SMS サービスに入る
2. クリックして無料で開く
3. バインディングテスト携帯電話番号
4. SMS を送信する呼び出し API のテスト
テキスト メッセージを送信するための API を見つけて呼び出す
お金を入れることを忘れないでください。1元は長期間使用でき、テキストメッセージには数セントかかります。
验证码 (0.045元/条);通知短信 (0.045元/条)
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)));
}
}
复制代码