SMS工具類

import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.ClientException;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class SMSUtils {

    private SMSUtils() {
    }

    //定義日誌
    private static final Logger log = LoggerFactory.getLogger(SMSUtils.class);

    private static String regionId;
    private static String accessKeyId;
    private static String secret;
    private static String signName;//必須在線上配置好的
    private static String templateCode;//必須在線上配置好的

    private volatile static DefaultProfile profile;
    private volatile static IAcsClient client;
    private static final String ALIYUN_DOMAIN = "dysmsapi.aliyuncs.com";
    private static final String ALIYUN_VERSION = "2017-05-25";
    private static final String ALIYUN_SENDSMS = "SendSms";
    private static final String ALIYUN_SENDBATCHSMS = "SendBatchSms";
    private static CommonRequest request = new CommonRequest();
    private static ResultUtils<Map<String, Object>> result = new ResultUtils<>();

    @Value("${sms.regionId}")
    public void setRegionld(String regionId) {
        this.regionId = regionId;
    }

    @Value("${sms.accessKeyId}")
    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }

    @Value("${sms.secret}")
    public void setSecret(String secret) {
        this.secret = secret;
    }

    @Value("${sms.signName}")
    public void setSignName(String signName) {
        this.signName = signName;
    }

    @Value("${sms.templateCode}")
    public void setTemplateCode(String templateCode) {
        this.templateCode = templateCode;
    }

    public static IAcsClient getClient() {
        if (Strings.isEmpty(client)) {
            synchronized (SMSUtils.class) {
                if (Strings.isEmpty(client)) {
                    try {
                        profile = DefaultProfile.getProfile(regionId, accessKeyId, secret);
                        client = new DefaultAcsClient(profile);
                    } catch (Exception e) {
                        log.error("sms初始化失敗!請檢查配置文件" + e.getMessage());
                    }

                }
            }
        }
        return client;
    }


    /**
     * @param mobile        手機號
     * @param templateCode  模板code  yml中配置默認
     * @param templateParam 參數 {"code":"786523"}
     * @param signName      簽名  yml中配置默認
     * @return
     */
    public static ResultUtils<Map<String, Object>> sendSms(Long mobile, String templateCode, String templateParam, String signName) {
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(ALIYUN_DOMAIN);
        request.setSysVersion(ALIYUN_VERSION);
        request.setSysAction(ALIYUN_SENDSMS);
        request.putQueryParameter("RegionId", regionId);
        request.putQueryParameter("PhoneNumbers", String.valueOf(mobile));
        request.putQueryParameter("TemplateCode", Strings.isEmpty(templateCode)? SMSUtils.templateCode:templateCode);
        request.putQueryParameter("TemplateParam", templateParam);
        request.putQueryParameter("SignName", Strings.isEmpty(signName)? SMSUtils.signName:signName);
        try {
            CommonResponse response = getClient().getCommonResponse(request);
            Map<String, Object> map = JSONObject.parseObject(response.getData(), Map.class);
            if (map == null) {
                result.setMsg(ResultUtils.MSG_1111);
                result.setCode(ResultUtils.CODE_1111);
                return result;
            }
            result.setCode("OK".equalsIgnoreCase(String.valueOf(map.get("Code"))) ? ResultUtils.CODE_0000 : ResultUtils.CODE_1111);
            result.setMsg(map.get("Message").toString());
        } catch (ClientException e) {
            e.printStackTrace();
        } catch (com.aliyuncs.exceptions.ServerException e) {
            e.printStackTrace();
        } catch (com.aliyuncs.exceptions.ClientException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * @param phoneNumberJson   手機號 ["手機號1","手機號2"]
     * @param templateCode      模板code
     * @param templateParamJson 參數 [{"name":"TemplateParamJson",{"name":"TemplateParamJson"}]
     * @param signNameJson      簽名  ["簽名1","簽名2"]
     * @return
     */
    public static ResultUtils<Map<String, Object>> sendBatchSms(String phoneNumberJson, String templateCode, String templateParamJson, String signNameJson) {
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(ALIYUN_DOMAIN);
        request.setSysVersion(ALIYUN_VERSION);
        request.setSysAction(ALIYUN_SENDBATCHSMS);
        request.putQueryParameter("RegionId", regionId);
        request.putQueryParameter("PhoneNumberJson", phoneNumberJson);
        request.putQueryParameter("TemplateCode", templateCode);
        request.putQueryParameter("TemplateParamJson", templateParamJson);
        request.putQueryParameter("SignNameJson", signNameJson);
        try {
            CommonResponse response = getClient().getCommonResponse(request);
            Map<String, Object> map = JSONObject.parseObject(response.getData(), Map.class);
            if (map == null) {
                result.setMsg(ResultUtils.MSG_1111);
                result.setCode(ResultUtils.CODE_1111);
                return result;
            }
            result.setCode("OK".equalsIgnoreCase(String.valueOf(map.get("Code"))) ? ResultUtils.CODE_0000 : ResultUtils.CODE_1111);

            result.setMsg(map.get("Message").toString());
        } catch (ClientException e) {
            e.printStackTrace();
        } catch (com.aliyuncs.exceptions.ServerException e) {
            e.printStackTrace();
        } catch (com.aliyuncs.exceptions.ClientException e) {
            e.printStackTrace();
        }
        return result;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章