您的位置:首页 > 其它

调用阿里云短信服务平台API实现ERP系统短信发送功能

2016-12-29 19:43 1086 查看
调用阿里云短信服务平台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有点迷惑
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  阿里云 短信
相关文章推荐