200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Java阿里云发送短信

Java阿里云发送短信

时间:2020-05-26 08:47:26

相关推荐

Java阿里云发送短信

文章目录

前言准备工作短信服务API介绍阿里云api发送短信传送门

前言

短信服务,是阿里云为客户提供的一种通信服务的能力。

准备工作

需要申请一个阿里云账号

开通短信服务

添加签名和模板(需要保证签名和模板的审核状态通过,才能进行短信服务的调用)

申请AccessKey密钥

注意如果没有短信包额度,将无法发送。

如果是个人学习使用,建议在阿里云市场低价短信。

或者阿里云免费试用产品专区,可能会有免费的短信服务包用于学习和测试。

短信服务API介绍

阿里云短信发送:/document_detail/419273.html

短信服务API介绍,可以直接点击调试,生成代码,稍作修改即可使用。

当然也可以进行短信详情的查询和统计。

阿里云api发送短信

引入依赖

<!--springboot项目阿里云发送短信--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alicloud-sms</artifactId><version>2.2.0.RELEASE</version></dependency>

或者

<!--maven项目阿里云发送短信--><dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi0525</artifactId><version>2.0.18</version></dependency>

或者其它java项目,直接引入如下两个jar包

编写代码(demo来自阿里云api)

package com.lcz.util;import java.text.SimpleDateFormat;import java.util.Date;import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.dysmsapi.model.v0525.QuerySendDetailsRequest;import com.aliyuncs.dysmsapi.model.v0525.QuerySendDetailsResponse;import com.aliyuncs.dysmsapi.model.v0525.SendSmsRequest;import com.aliyuncs.dysmsapi.model.v0525.SendSmsResponse;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.profile.DefaultProfile;import com.aliyuncs.profile.IClientProfile;/*** 国内短信发送** @author Administrator**/public class SmsUtil {// 产品名称:云通信短信API产品,开发者无需替换static final String product = "Dysmsapi";// 产品域名,开发者无需替换static final String domain = "";// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)private static final String accessKeyId = "<aliyunsms.AccessKeyId>";//需要替换private static final String accessKeySecret = "<aliyunsms.AccessKeySecret>";//需要替换// 签名private static final String signName = "<aliyunsms.signName>";//需要替换/*** 发送短信验证码* @param phoneNum* @param verifyCode* @param templateCode* @return* @throws ClientException*/public static SendSmsResponse sendVerifyCode(String phoneNum, String verifyCode, String templateCode)throws ClientException {// 可自助调整超时时间System.setProperty(".client.defaultConnectTimeout", "10000");System.setProperty(".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(phoneNum);// 必填:短信签名-可在短信控制台中找到request.setSignName(signName);// 必填:短信模板-可在短信控制台中找到request.setTemplateCode(templateCode);// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam("{code:" + verifyCode + "}");// 选填-上行短信扩展码(无特殊需求用户请忽略此字段)// request.setSmsUpExtendCode("90997");// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者//request.setOutId("yourOutId");// hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);return sendSmsResponse;}/*** 查询消息的发送状态* @param phoneNum* @param bizId 发送回执id,调用发送短信api时,会返回* @return* @throws ClientException*/public static QuerySendDetailsResponse querySendDetails(String phoneNum, String bizId) throws ClientException {// 可自助调整超时时间System.setProperty(".client.defaultConnectTimeout", "10000");System.setProperty(".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(phoneNum);// 可选-流水号request.setBizId(bizId);// 必填-发送日期 支持30天内记录查询,格式yyyyMMddSimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");request.setSendDate(ft.format(new Date()));// 必填-页大小request.setPageSize(10L);// 必填-当前页码从1开始计数request.setCurrentPage(1L);// hint 此处可能会抛出异常,注意catchQuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);return querySendDetailsResponse;}public static void main(String[] args) throws ClientException, InterruptedException {// 发验证码短信SendSmsResponse response = sendVerifyCode("15900000000", "123456","SMS_123456789");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());//消息回执idThread.sleep(3000L);// 查明细if (response.getCode() != null && response.getCode().equals("OK")) {QuerySendDetailsResponse querySendDetailsResponse = querySendDetails("15900000000", 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());}}}

编写测试用例发送短信,并运行测试用例

@SpringBootTestpublic class SendSmsDemo {@Testpublic void testSendSms(){System.out.println("----------测试短信发送--------");try {SendSmsResponse response= SmsUtil.sendVerifyCode("15900000000", "123456","SMS_123456789");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());//消息回执idThread.sleep(3000L);// 查明细if (response.getCode() != null && response.getCode().equals("OK")) {System.out.println("-------------------查看短息发送状态--------------");QuerySendDetailsResponse querySendDetailsResponse = SmsUtil.querySendDetails("15900000000", 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());}} catch (Exception e) {e.printStackTrace();}}}

发送短信后,response的code等于OK,即表示发送成功(后面查看投递状态只是演示,可以不调用)。

传送门

如果是springboot项目,可以直接使用其提供好的starter进行短信发送。

springboot基础(63):Springboot整合阿里云短信发送

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。