java实现阿里云云通信短信通知发送

在之前博客中介绍了阿里云短信通知,但是自从2017年7月后阿里大于搬家规划给阿里云云通信,故短信通知接口改变,新注册的短信通知模板用阿里大于不再使用,必须调用阿里云云通信接口才可以。以下介绍下阿里云云通信实现短信通知发送。

准备工作:

环境:eclipse4.5-x64,jdk1.7,maven3

maven环境添加短信通知依赖:

<!-- 新版本阿里云云通信短信通知接口 -->
		<dependency>
		  <groupId>com.yirui</groupId>
		  <artifactId>aliyun-java-sdk-core</artifactId>
		  <version>3.3.1</version>
		</dependency>
		<dependency>
		  <groupId>com.yirui</groupId>
		  <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
		  <version>1.0.0</version>
		</dependency> 

短信通知工具类:SmsUtil.java

package com.qianjiang.util.sms;

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.AlibabaAliqinFcSmsNumSendRequest;
import com.taobao.api.response.AlibabaAliqinFcSmsNumSendResponse; 

/**
 * @class:SmsUtil
 * @descript:该案例是阿里云发送短信通知:
 * 注意从2017年6月30后阿里大于升级成功阿里云-云通信故短信通知接口变更
 * 旧版本:阿里大于
 * 工程依赖jar包:alipay-sdk-java-20170607114101.jar
 * 参考API:https://api.alidayu.com/docs/api.htm?apiId=25450
 * 新版本:阿里云云通信
 * 工程依赖jar包:aliyun-java-sdk-core.jar,aliyun-java-sdk-dysmsapi.jar
 * 参考API:https://help.aliyun.com/document_detail/55284.html?spm=5176.doc59210.6.555.comFKg
 * Demo工程编码采用UTF-8
 * @date:2017年3月7日 下午2:47:38
 * @author sang
 */
public class SmsUtil {
    
    /**
     * 新版本:阿里云云通信发送短信通知
     * @param smsAppKey  TOP分配给应用的AppKey,即创建的签名
     * @param smsSerect  短信签名AppKey对应的secret值
     * @param smsSign    短信签名,传入的短信签名必须是在阿里大于“管理中心-短信签名管理”中的可用签名
     * @param smsModelId 短信模板ID,传入的模板必须是在阿里大于“管理中心-短信模板管理”中的可用模板。示例:SMS_585014
     * @param smsModelType oss模板类型1表示验证码类2表示通知类型
     * @param modelParam   模板内容里面的变量
     * @param phone   用户手机号码
     * @return boolean true成功false失败 
     */
    public static boolean sendSms(String smsAppKey,String smsSerect,String smsSign,String smsModelId,JSONObject modelParam,String smsModelType,String phone){
    	//验证发送失败
    	boolean result=false;
    	try {
    		//设置超时时间,可自行调整
    		System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
    		System.setProperty("sun.net.client.defaultReadTimeout", "10000");
    		//初始化acsClient,暂不支持region化
    		IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", smsAppKey, smsSerect);
    		DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", SMSConstants.PRODUCT, SMSConstants.DOMAIN);
    		IAcsClient acsClient = new DefaultAcsClient(profile);
            //组装请求对象
            SendSmsRequest request = new SendSmsRequest();
            //使用post提交
            request.setMethod(MethodType.POST);
            //待发送手机号:支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
            request.setPhoneNumbers(phone);
            //短信签名
            request.setSignName(smsSign);
            //短信模板ID
            request.setTemplateCode(smsModelId);
            //短信通知参数json格式
            SmsParam smsParamVo = new SmsParam();
            //设置短信通知模板里面的变量值
        	if("1".equals(smsModelType)){
            	//短信验证码中的变量${number}
            	smsParamVo.setNumber(modelParam.getString("code"));
            }else if("2".equals(smsModelType)){
            	//短信通知中订单号变量${ordernumber}
            	smsParamVo.setOrdernumber(modelParam.getString("code"));
            }else if("21".equals(smsModelType)){
            	smsParamVo.setDisname(modelParam.getString("disname"));
            	smsParamVo.setGoodsinfoname(modelParam.getString("goodsinfoname"));
            	smsParamVo.setOfollowprice(modelParam.getString("ofollowprice"));
            	smsParamVo.setNfollowprice(modelParam.getString("nfollowprice"));
            }else if("211".equals(smsModelType)){
            	smsParamVo.setBsetname(modelParam.getString("bsetname"));
            	smsParamVo.setGoodsinfoname(modelParam.getString("goodsinfoname"));
            }else if("212".equals(smsModelType)){
            	smsParamVo.setGoodsinfoname(modelParam.getString("goodsinfoname"));
            }else if("213".equals(smsModelType)){
            	
            }
        	String smsParam = JSONObject.toJSONString(smsParamVo);
            System.out.println("新版本短信通知参数smsParam:"+smsParam);
            //模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            request.setTemplateParam(smsParam);
            //调用阿里云云通信短信接口
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            System.out.println("短信接口返回 Code=" + sendSmsResponse.getCode());
            System.out.println("短信接口返回 Message=" + sendSmsResponse.getMessage());
            //接口返回结果
            if(sendSmsResponse.getCode() != null && "OK".equals(sendSmsResponse.getCode())) {
            	//设置返回结果
        		result=true;
            }
		} catch (ClientException e) {
			e.printStackTrace();
		}
    	return result;
    }
    
    
    /**
     * 随机生成6位数字作为验证码
     * @return
     */
    public static String getCode(){
    	int code=(int)(Math.random()*9000+100000);
    	return code + "";
    }
    
    //测试
    public static void main(String[] args) {

    	//新版本测试
    	String smsAppKey="LTAIHmc******AzC";
    	String smsSerect="lVeVM3qsj9FmO3hvy**********lG5";
    	String smsSign="国商健翔";
    	String smsModelId="SMS_105475***";
    	JSONObject modelParam=new JSONObject();
    	modelParam.put("code", getCode());
    	String smsModelType="1";
    	String phone="183******12";
        sendSms(smsAppKey,smsSerect,smsSign,smsModelId,modelParam,smsModelType,phone);
    	 
	}
    
    
}

短信通知常量类:SMSConstants.java

package com.qianjiang.util.sms;
/**
 * @class:SMSConstants
 * @descript:java 使用阿里大于短信通知验证码模板常量类
 * @date:2017年3月7日 上午10:53:12
 * @author sang
 */
public class SMSConstants {
	
	//新版本:阿里云云通信调用短信接口需要的参数:
	//产品名称:短信API产品名称(短信产品名固定,无需修改)
    public static final String PRODUCT = "Dysmsapi";
    //产品域名:短信API产品域名(接口地址固定,无需修改)
    public static final String DOMAIN = "dysmsapi.aliyuncs.com";
	
	//短信通知模板类型:1验证码类2通知类
	//千匠用户注册发送短信验证码
	public static final String SMS_MODEL_TYPE1="1";
	//千匠用户下发订单发送订单通知
	public static final String SMS_MODEL_TYPE2="2";
	//千匠用户商品价格变动通知1
	public static final String SMS_MODEL_TYPE21="21";
	//千匠用户商品价格变动通知2
	public static final String SMS_MODEL_TYPE211="211";
	//千匠用户商品到货通知1
	public static final String SMS_MODEL_TYPE212="212";
	//千匠用户商品到货通知2
	public static final String SMS_MODEL_TYPE213="213";
	
}

控制台执行结果:


接受到的短信通知:



  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值