1
0
mirror of https://gitee.com/mirrors/Spring-Cloud-Alibaba.git synced 2021-06-26 13:25:11 +08:00

204 lines
6.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.alicloud.sms;
import java.text.ParseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.alicloud.context.AliCloudProperties;
import com.alibaba.alicloud.context.sms.SmsProperties;
import com.alibaba.alicloud.sms.base.DefaultAlicomMessagePuller;
import com.alibaba.alicloud.sms.endpoint.EndpointManager;
import com.alibaba.alicloud.sms.endpoint.ReceiveMessageEntity;
import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsResponse;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
/**
* @author pbting
*/
public final class SmsServiceImpl extends AbstractSmsService {
private static final Logger log = LoggerFactory.getLogger(SmsServiceImpl.class);
/**
* will expose user to call this method send sms message
* @param sendSmsRequest
* @return
*/
private SmsProperties smsProperties;
private AliCloudProperties aliCloudProperties;
public SmsServiceImpl(AliCloudProperties aliCloudProperties,
SmsProperties smsProperties) {
this.aliCloudProperties = aliCloudProperties;
this.smsProperties = smsProperties;
}
@Override
public SendSmsResponse sendSmsRequest(SendSmsRequest sendSmsRequest)
throws ClientException {
return sendSmsRequest(sendSmsRequest, aliCloudProperties.getAccessKey(),
aliCloudProperties.getSecretKey());
}
/**
* 因为阿里云支持多个
* accessKeyId/accessKeySecret,当不想使用默认的配置accessKeyId/accessKeySecret时可以使用这个方法来支持额外
* 的accessKeyId/accessKeySecret 发送
* @param sendSmsRequest
* @param accessKeyId
* @param accessKeySecret
* @throws ServerException
* @throws ClientException
* @return SendSmsResponse
*/
@Override
public SendSmsResponse sendSmsRequest(SendSmsRequest sendSmsRequest,
String accessKeyId, String accessKeySecret)
throws ServerException, ClientException {
EndpointManager.addSendSmsRequest(sendSmsRequest);
// hint 此处可能会抛出异常注意catch
return getHangZhouRegionClientProfile(accessKeyId, accessKeySecret)
.getAcsResponse(sendSmsRequest);
}
/**
*
* @param smsReportMessageListener
* @return boolean
*/
@Override
public boolean startSmsReportMessageListener(
SmsReportMessageListener smsReportMessageListener) {
// 短信回执SmsReport短信上行SmsUp
String messageType = "SmsReport";
String queueName = smsProperties.getReportQueueName();
return startReceiveMsg(messageType, queueName, smsReportMessageListener);
}
/**
*
* @param smsUpMessageListener
* @return boolean
*/
@Override
public boolean startSmsUpMessageListener(SmsUpMessageListener smsUpMessageListener) {
// 短信回执SmsReport短信上行SmsUp
String messageType = "SmsUp";
String queueName = smsProperties.getUpQueueName();
return startReceiveMsg(messageType, queueName, smsUpMessageListener);
}
/**
*
* @param messageType
* @param queueName
* @param messageListener
* @return boolean
*/
private boolean startReceiveMsg(String messageType, String queueName,
SmsMessageListener messageListener) {
String accessKeyId = aliCloudProperties.getAccessKey();
String accessKeySecret = aliCloudProperties.getSecretKey();
boolean result = true;
try {
new DefaultAlicomMessagePuller().startReceiveMsg(accessKeyId, accessKeySecret,
messageType, queueName, messageListener);
EndpointManager.addReceiveMessageEntity(
new ReceiveMessageEntity(messageType, queueName, messageListener));
}
catch (ClientException e) {
log.error("start sms report message listener cause an exception", e);
result = false;
}
catch (ParseException e) {
log.error("start sms report message listener cause an exception", e);
result = false;
}
return result;
}
/**
*
* @param sendBatchSmsRequest
* @throws ServerException
* @throws ClientException
* @return SendBatchSmsResponse
*/
@Override
public SendBatchSmsResponse sendSmsBatchRequest(
SendBatchSmsRequest sendBatchSmsRequest)
throws ServerException, ClientException {
return sendSmsBatchRequest(sendBatchSmsRequest, aliCloudProperties.getAccessKey(),
aliCloudProperties.getSecretKey());
}
/**
*
* @param sendBatchSmsRequest
* @param accessKeyId
* @param accessKeySecret
* @throws ClientException
* @return SendBatchSmsResponse
*/
@Override
public SendBatchSmsResponse sendSmsBatchRequest(
SendBatchSmsRequest sendBatchSmsRequest, String accessKeyId,
String accessKeySecret) throws ClientException {
EndpointManager.addSendBatchSmsRequest(sendBatchSmsRequest);
return getHangZhouRegionClientProfile(accessKeyId, accessKeySecret)
.getAcsResponse(sendBatchSmsRequest);
}
/**
*
* @param request
* @param accessKeyId
* @param accessKeySecret
* @throws ClientException
* @return QuerySendDetailsResponse
*/
@Override
public QuerySendDetailsResponse querySendDetails(QuerySendDetailsRequest request,
String accessKeyId, String accessKeySecret) throws ClientException {
return getHangZhouRegionClientProfile(accessKeyId, accessKeySecret)
.getAcsResponse(request);
}
/**
*
* @param request
* @throws ClientException
* @return QuerySendDetailsResponse
*/
@Override
public QuerySendDetailsResponse querySendDetails(QuerySendDetailsRequest request)
throws ClientException {
return querySendDetails(request, aliCloudProperties.getAccessKey(),
aliCloudProperties.getSecretKey());
}
}