調用阿里雲短信服務平臺API實現ERP系統短信發送功能

調用阿里雲短信服務平臺API實現ERP系統短信發送功能
1,發送短信工具類 SendSMSUtil

package sms;

import java.util.List;

/**
 * 應用策略模式,方便以後擴展短信發送功能
 * @title SendSMSUtil
 * @description 阿里雲短信發送util
 * @author RenYY
 */
public class SendSMSUtil {
    /**
     * @description 短信發送接口
     * @param sendSMS
     * @return
     * @author RenYY
     * @date 2016年12月29日
     */
    public static boolean sendSMS(ISendSMS sendSMS){
        return sendSMS.sendSMS();
    }

}

2,發送短信接口 ISendSMS

package sms;

import java.util.List;

/**
 * @title ISendSMS
 * @description 阿里雲短信服務平臺  發送短信接口
 * @author RenYY
 */
public interface ISendSMS {
    public boolean sendSMS();

}

3,發送短信實現類 SendSMS

package sms;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;

import org.apache.log4j.Logger;

import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.sms.model.v20160927.SingleSendSmsRequest;
import com.aliyuncs.sms.model.v20160927.SingleSendSmsResponse;
import com.pxjy.puxin.kernel.utils.LoadProperties;
/**
 * @title SendSMS
 * @description 短信發送實現類,完成短信發送動作
 * @author RenYY
 */
public class SendSMS implements ISendSMS {
    private final static Logger log = Logger.getLogger(SendSMS.class);

    private static String aliyun_sms_region_id = "";    //阿里雲regionId
    private static String aliyun_sms_access_key_id = "";    //阿里雲 accessKeyId
    private static String aliyun_sms_access_key_secret = "";    //阿里雲 accessKeySecret
    private static String aliyun_sms_end_point_name = "";   //阿里雲end_point_name
    private static String aliyun_sms_product = "";  //阿里雲產品
    private static String aliyun_sms_domain = "";   //阿里雲調用短信服務平臺接口域名

    private String signName;    //阿里雲短信簽名
    private String templateCode;    //阿里雲短信模板Code
    private String paramString; //阿里雲短信模板參數字符串
    private String recNum;  //發送短信手機號


    static{
        aliyun_sms_region_id = LoadProperties.readValue("aliyun_sms_region_id");
        aliyun_sms_access_key_id = LoadProperties.readValue("aliyun_sms_access_key_id");
        aliyun_sms_access_key_secret = LoadProperties.readValue("aliyun_sms_access_key_secret");
        aliyun_sms_end_point_name = LoadProperties.readValue("aliyun_sms_end_point_name");
        aliyun_sms_product = LoadProperties.readValue("aliyun_sms_product");
        aliyun_sms_domain = LoadProperties.readValue("aliyun_sms_domain");
    }
    /**
     * @description 方法描述
     * @param signName  如果signName爲null或者空串,則取集團短信簽名; 否則取signName值
     * @param templateId    1:驗證短信模板, 2:通知短信模板, 3:推廣短信模板
     * @param paramMap  短信模板中參數名爲key,參數值爲value
     * @param phoneNum  手機號數組,例:{"18888888888","19999999999"}
     * @author RenYY
     * @date 2016年12月29日
     */
    public SendSMS(String signName, int templateId,Map<String, String> paramMap, String[] phoneNum) {
        super();
        //短信簽名: 如果signName爲null或者空串,則取集團短信簽名; 否則去signName值
        this.signName = (null == signName || "".equals(signName)) ? DictSMS.SIGN_NAME_PUXIN : signName;
        //短信模板
        switch (templateId) {
            case 1: this.templateCode = DictSMS.TEMPLATE_CODE_OF_VALIDATE; break;//驗證短信模板
            case 2: this.templateCode = DictSMS.TEMPLATE_CODE_OF_INFORM; break;//通知短信模板
            case 3: this.templateCode = DictSMS.TEMPLATE_CODE_OF_PROMOTION; break;//推廣短信模板
            default:this.templateCode = DictSMS.TEMPLATE_CODE_OF_PROMOTION; break;//以上三種均不匹配時,默認爲  推廣短信模板
        }
        //模板參數
        this.paramString = JSON.toJSONString(paramMap);
        //構造手機號字符串,多個手機號之間逗號分隔
        StringBuffer recNumSB = new StringBuffer();
        for(int i = 0; i < phoneNum.length; i++){
            if(i == phoneNum.length -1){
                recNumSB.append(phoneNum[i]);
            }else{
                recNumSB.append(phoneNum[i] + ",");
            }
        }
        this.recNum = recNumSB.toString();
    }
    /**
     * @description 發送短信
     * @return 發送成功返回 true,否則返回 false
     * @author RenYY 
     * @date 2016年12月29日
     */
    @Override
    public boolean sendSMS() {
        boolean isSendSuccess = false;
        try {
            IClientProfile profile = DefaultProfile.getProfile(aliyun_sms_region_id, aliyun_sms_access_key_id, aliyun_sms_access_key_secret);
            DefaultProfile.addEndpoint(aliyun_sms_end_point_name, aliyun_sms_region_id, aliyun_sms_product,aliyun_sms_domain);
            IAcsClient client = new DefaultAcsClient(profile);
            SingleSendSmsRequest request = new SingleSendSmsRequest();
            request.setSignName(signName);
            request.setTemplateCode(templateCode);
            request.setParamString(paramString);
            request.setRecNum(recNum);
            SingleSendSmsResponse response = client.getAcsResponse(request);//短信發送
            isSendSuccess = true;
        } catch (Exception e) {
            e.printStackTrace();
            log.error("*aliyun_sms_begin*");
            log.error(e.getMessage());
            log.error("*aliyun_sms_end*");
        }finally{
            return isSendSuccess;
        }
    }

}

4,短信簽名及短信模板CODE字典類

package com.pxjy.puxin.kernel.sms;

public class DictSMS {
    public final static String SIGN_NAME_PUXIN = "SIGN_NAME_PUXIN"; //集團短信簽名
    public final static String TEMPLATE_CODE_OF_VALIDATE = "TEMPLATE_CODE_OF_VALIDATE"; //驗證短信模板CODE
    public final static String TEMPLATE_CODE_OF_INFORM = "TEMPLATE_CODE_OF_INFORM"; //通知短信模板CODE
    public final static String TEMPLATE_CODE_OF_PROMOTION = "TEMPLATE_CODE_OF_PROMOTION";   //推廣短信模板CODE
}

5,項目屬性文檔讀取工具類

package utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * 配置文件讀取類
 * @title LoadProperties
 * @description 描述
 * @author RenYY
 */
public class LoadProperties {
    /**
     * 通過key值獲取配置文件中value值
     * @description 方法描述
     * @param key 配置文件中key值
     * @return
     * @author xuzihu
     * @date 2015年9月9日
     */
    public static String readValue(String key) {
        String fileName = "/application.properties";
        Properties props = new Properties();
        InputStream in = null;
        String value = "";
        try {
            in = LoadProperties.class.getResourceAsStream(fileName);
            props.load(in);
            value = props.getProperty(key);
            return value;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return value;
    }
}

6,項目屬性配置文檔 application.properties

#### 阿里雲短信服務平臺   begin add by RenYY,20161227 ####
aliyun_sms_region_id=cn-hangzhou
aliyun_sms_access_key_id=aliyunsmsaccesskeyid
aliyun_sms_access_key_secret=aliyunsmsaccesskeysecret
aliyun_sms_end_point_name=cn-hangzhou
aliyun_sms_product=Sms
aliyun_sms_domain=sms.aliyuncs.com
#### 阿里雲短信服務平臺      end  add by RenYY,20161227 ####

7,引入阿里雲依賴jar包
添加maven庫

    <repositories>
            <repository>
                    <id>sonatype-nexus-staging</id>
                    <name>Sonatype Nexus Staging</name>
                    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                    <releases>
                            <enabled>true</enabled>
                    </releases>
                    <snapshots>
                            <enabled>true</enabled>
                    </snapshots>
            </repository>
    </repositories>

添加依賴jar包

            <dependencies>
                <dependency>
                    <groupId>com.aliyun</groupId>
                    <artifactId>aliyun-java-sdk-core</artifactId>
                    <version>2.4.2</version>
                </dependency>
                <dependency>
                    <groupId>com.aliyun</groupId>
                    <artifactId>aliyun-java-sdk-sms</artifactId>
                    <version>3.0.0-rc1</version>
                </dependency>
            <dependencies>

8,接口調用中拋出異常信息: java.lang.RuntimeException: Unsupported algorithm: HmacSHA1
解決方案爲:修改項目依賴 JDK 版本爲 1.6或1.7,至於爲什麼目前不支持1.8有點迷惑

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