Java整合阿里大鱼

萝らか妹 提交于 2020-03-27 18:15:14

3 月,跳不动了?>>>

接着上一篇的知识 我们入门学习了阿里大鱼的短信服务

本篇将其融入代码中

1. 使用API进行发送短信

  • 步骤一:查看帮助文档

阿里大鱼API

https://help.aliyun.com/product/44282.html?spm=5176.12212976.0.0.15b31cbeK3Pm5Y

帮助文档

  • 步骤二:确定到Java开发中的代码

示例demo

https://help.aliyun.com/document_detail/101893.html?spm=a2c4g.11174283.6.651.62c72c42nxOfdH

示例demo

  • 步骤三:搜索到sendsms

sendSms

  • 步骤四:选项详解

代码生成

2. 使用工具类发送短信

  • 步骤一:修改pom.xml文件,添加 阿里大鱼 SDK依赖
  • 步骤二:拷贝工具类
  • 步骤三:调用工具类,进行短信发送

步骤一:修改pom.xml文件,添加 阿里大鱼 SDK依赖

pom依赖

下面提供Maven坐标

	<!--短信-->
    <dependency>
        <groupId>com.aliyuncs</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.aliyuncs.dysmsapi</groupId>
        <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    </dependency>

步骤二:拷贝工具类

工具类

	package com.czxy.utils;

	import java.text.SimpleDateFormat;
	import java.util.Date;
	import java.util.Random;

	import com.aliyuncs.DefaultAcsClient;
	import com.aliyuncs.IAcsClient;
	import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
	import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
	import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
	import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
	import com.aliyuncs.exceptions.ClientException;
	import com.aliyuncs.profile.DefaultProfile;
	import com.aliyuncs.profile.IClientProfile;
	/**
	 * Created on 17/6/7.
	 * 短信API产品的DEMO程序,工程中包含了一个SmsDemo类,直接通过
	 * 执行main函数即可体验短信产品API功能(只需要将AK替换成开通了云通信-短信产品功能的AK即可)
	 * 工程依赖了2个jar包(存放在工程的libs目录下)
	 * 1:aliyun-java-sdk-core.jar
	 * 2:aliyun-java-sdk-dysmsapi.jar
	 *
	 * 备注:Demo工程编码采用UTF-8
	 * 国际短信发送请勿参照此DEMO
	 */
	public class SmsUtil {

		//产品名称:云通信短信API产品,开发者无需替换
		static final String product = "Dysmsapi";
		//产品域名,开发者无需替换
		static final String domain = "dysmsapi.aliyuncs.com";

		// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
	//    static final String accessKeyId = "LTAIjJJe67SlCCLL";//
	//    static final String accessKeySecret = "B3BZSQDnuUnfZXf22bbovyPaJmCNDt";
		static final String accessKeyId = "LTAIlefATxsjTNoL";//
		static final String accessKeySecret = "zhzDVzH1KjqeZZVOHsTsqfjApi0HJJ";

		public static SendSmsResponse sendSms(String telephone,String name, String code ,String address , String phone) throws ClientException {

			//可自助调整超时时间
			System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
			System.setProperty("sun.net.client.defaultReadTimeout", "10000");

			//初始化acsClient,暂不支持region化
			IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
			DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
			IAcsClient acsClient = new DefaultAcsClient(profile);

			//组装请求对象-具体描述见控制台-文档部分内容
			SendSmsRequest request = new SendSmsRequest();
			//必填:待发送手机号
			request.setPhoneNumbers(telephone); 		//15000000000
			//必填:短信签名-可在短信控制台中找到
			request.setSignName("桐叔老司机");			//老袁a洗脚6
			//必填:短信模板-可在短信控制台中找到
			request.setTemplateCode("SMS_130929218"); 	//SMS_85550034
			//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
			//${name}您好,请凭取件码:${code},至${address}取件,若有问题请咨询${phone}。
			request.setTemplateParam("{\"name\":\""+name+"\",\"code\":\""+code+"\",\"address\":\""+address+"\",\"phone\":\""+phone+"\"}");

			//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
			//request.setSmsUpExtendCode("90997");

			//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
			request.setOutId("yourOutId");

			//hint 此处可能会抛出异常,注意catch
			SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

			return sendSmsResponse;
		}


		public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException {

			//可自助调整超时时间
			System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
			System.setProperty("sun.net.client.defaultReadTimeout", "10000");

			//初始化acsClient,暂不支持region化
			IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
			DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
			IAcsClient acsClient = new DefaultAcsClient(profile);

			//组装请求对象
			QuerySendDetailsRequest request = new QuerySendDetailsRequest();
			//必填-号码
			request.setPhoneNumber("15151772559");
			//可选-流水号
			request.setBizId(bizId);
			//必填-发送日期 支持30天内记录查询,格式yyyyMMdd
			SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
			request.setSendDate(ft.format(new Date()));
			//必填-页大小
			request.setPageSize(10L);
			//必填-当前页码从1开始计数
			request.setCurrentPage(1L);

			//hint 此处可能会抛出异常,注意catch
			QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);

			return querySendDetailsResponse;
		}


		public static void main(String[] args) throws ClientException, InterruptedException {
			/**生成验证码*/
			//String snumber = RandomStringUtils.random(4); // 有bug
			String number = getNumber();
			/**发送的电话号*/
			String telephone = "13699282444";
			//发短信
			SendSmsResponse response = sendSms(telephone,"张先生", number , "上海花园" ,"110");
			System.out.println("短信接口返回的数据----------------");
			System.out.println("Code=" + response.getCode());
			System.out.println("Message=" + response.getMessage());
			System.out.println("RequestId=" + response.getRequestId());
			System.out.println("BizId=" + response.getBizId());

			Thread.sleep(3000L);

			//查明细
			if(response.getCode() != null && response.getCode().equals("OK")) {
				QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId());
				System.out.println("短信明细查询接口返回数据----------------");
				System.out.println("Code=" + querySendDetailsResponse.getCode());
				System.out.println("Message=" + querySendDetailsResponse.getMessage());
				int i = 0;
				for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs())
				{
					System.out.println("SmsSendDetailDTO["+i+"]:");
					System.out.println("Content=" + smsSendDetailDTO.getContent());
					System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());
					System.out.println("OutId=" + smsSendDetailDTO.getOutId());
					System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());
					System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());
					System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());
					System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());
					System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());
				}
				System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());
				System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());
			}

		}
		/** 随机生成4位验证码*/
		public static String getNumber(){
			int number;//定义两变量
			Random ne = new Random();//实例化一个random的对象ne
			number = ne.nextInt(9999-1000+1)+1000;//为变量赋随机值1000-9999
			System.out.println("产生的随机数是:"+number);//输出
			return String.valueOf(number);
		}
	}

此处需要特别注意

第一点:工具类中的AccessKey 需要获取自己的专属AK值

  • AK查看

AK管理

第二点:方法中的相关参数需要修改为自己的(签名......)

方法参数

小结: 此处连接一共需要改以下几个地方
1.accessKeyId 和 accessKeySecret
2,短信签名 以及短信签名的 SMS code 
3,最后根据模板内容删除不必要的变量值

步骤三:调用工具类,进行短信发送

短信发送

此处测试OK 使用ajax连接前端的验证请求 将会成功发送短信

在开发阶段免不了出现各种问题,此处赠送大家短信接口错误状态码 方便自行解决

点击前往:☞ 短信接口错误调用码

点击前往:☞短信发送状态回执错误码


如果本篇对您有帮助 请点赞关注噢~

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!