调用阿里云短信服务平台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 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-stagingid>
                    <name>Sonatype Nexus Stagingname>
                    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/url>
                    <releases>
                            <enabled>trueenabled>
                    releases>
                    <snapshots>
                            <enabled>trueenabled>
                    snapshots>
            repository>
    repositories>

添加依赖jar包

            <dependencies>
                <dependency>
                    <groupId>com.aliyungroupId>
                    <artifactId>aliyun-java-sdk-coreartifactId>
                    <version>2.4.2version>
                dependency>
                <dependency>
                    <groupId>com.aliyungroupId>
                    <artifactId>aliyun-java-sdk-smsartifactId>
                    <version>3.0.0-rc1version>
                dependency>
            <dependencies>

8,接口调用中抛出异常信息: java.lang.RuntimeException: Unsupported algorithm: HmacSHA1
解决方案为:修改项目依赖 JDK 版本为 1.6或1.7,至于为什么目前不支持1.8有点迷惑

你可能感兴趣的:(Java)