nacos配置:software.amazon.awssdk pinpoint software.amazon.awssdk bom 2.17.100 pom import
aws:
pinpoint:
messageType: TRANSACTIonAL #发送的短信类型 指定 TRANSACTIonAL 或 PROMOTIONAL
registeredKeyword: xxxx #与原始短代码相关联的注册关键字。
senderId: Test #发送者ID
appId: xxxx #aws的pinpoint项目的 projectId / applicationId
originationNumber: xxxx #发送源的手机号码
accessKeyId: XXXXXX #accessKeyId
secretAccessKey: XXXXXX #secretAccessKey
region: xxx #区域 一定要看清楚那个区
template: Your verification code is:%s #短信模板
发短信工具类:
package com.oneplus.common.util.aws;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.pinpoint.PinpointClient;
import software.amazon.awssdk.services.pinpoint.model.*;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Component
public class AwsSNSUtils {
@Value("${aws.pinpoint.messageType}")
public String messageType;
@Value("${aws.pinpoint.registeredKeyword}")
public String registeredKeyword;
@Value("${aws.pinpoint.senderId}")
public String senderId;
@Value("${aws.pinpoint.appId}")
public String appId;
@Value("${aws.pinpoint.originationNumber}")
public String originationNumber;
@Value("${aws.pinpoint.accessKeyId}")
public String accessKeyId;
@Value("${aws.pinpoint.secretAccessKey}")
public String secretAccessKey;
@Value("${aws.pinpoint.region}")
public String region;
@Value("${aws.pinpoint.template}")
public String template;
public boolean sendMessage(String destinationNumber,Integer code){
try {
String message = String.format(template,code);
sendMessage(destinationNumber,message);
return true;
} catch (PinpointException e) {
log.info("发短信报错====>:" + e.awsErrorDetails().errorMessage());
return false;
} catch (Exception e) {
log.info("Exception====>:" + e.getMessage());
e.printStackTrace();
return false;
}
}
private void sendMessage(String destinationNumber, String message) {
PinpointClient pinpoint = PinpointClient.builder()
.credentialsProvider(AwsCredentialsProviderChain.builder()
.addCredentialsProvider(new AwsCredentialsProvider() {
@Override
public AwsCredentials resolveCredentials() {
return AwsBasicCredentials.create(accessKeyId, secretAccessKey);
}
}).build())
.region(Region.of(region))
.build();
sendSmsMessage(pinpoint, message, appId, originationNumber, destinationNumber);
pinpoint.close();
}
private void sendSmsMessage(PinpointClient pinpoint, String message, String appId, String originationNumber, String destinationNumber) {
log.info("进入,发送短信接口");
Map addressMap = new HashMap();
AddressConfiguration addConfig = AddressConfiguration.builder()
.channelType(ChannelType.SMS)
.build();
addressMap.put(destinationNumber, addConfig);
SMSMessage smsMessage = SMSMessage.builder()
.body(message)
.messageType(messageType)
.originationNumber(originationNumber)
.senderId(senderId)
.keyword(registeredKeyword)
.build();
// Create a DirectMessageConfiguration object
DirectMessageConfiguration direct = DirectMessageConfiguration.builder()
.smsMessage(smsMessage)
.build();
MessageRequest msgReq = MessageRequest.builder()
.addresses(addressMap)
.messageConfiguration(direct)
.build();
// create a SendMessagesRequest object
SendMessagesRequest request = SendMessagesRequest.builder()
.applicationId(appId)
.messageRequest(msgReq)
.build();
SendMessagesResponse response = pinpoint.sendMessages(request);
MessageResponse msg = response.messageResponse();
Map map = msg.result();
//Write out the result of sendMessage
map.forEach((k, v) -> log.info((k + ":" + v)));
log.info("发送短信成功!");
}
}
详细文档路径:
https://docs.aws.amazon.com/zh_cn/zh_cn/sdk-for-java/latest/developer-guide/examples-pinpoint.html
https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/pinpoint/src/main/java/com/example/pinpoint/SendMessage.java



