短信服务 Api 介绍|学习笔记

本文涉及的产品
短信服务,200条 3个月
短信服务,100条 3个月
简介: 快速学习短信服务 Api 介绍

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第四阶段短信服务 Api 介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/686/detail/11915


短信服务 Api 介绍


研究短信文档 Api 的使用,打开帮助文档。

image.png

 SDK 参考新版开发指南旧版,使用的是旧版文档。

image.png

需要关注的有两部分,第一部分是 API 文档,具体的定义了每个 API的详细参数以及返回值

第二个是 SDK 以及 DEMO

如果 API 文档看不特别清楚,可以下载相关的 DEMO 进行查看。

首先来关注一下API文档,选择 Java,里面有 API 短信发送,短信查询,短信消息以及批量发送。

API文档

HTTP协议及签名

JAVA

短信发送APl(SendSms)-- -JAVA

短信查询

API(QuerySendDetalls)--- JAVA

短信消息API---JAVA

短信批量发送

API(SendBatchSms)

PHP

1、短信发送 API (SendSms)---Java

调用 SendSms 发送短信

(1)请求参数

第一部分是 API 的名称、怎么调用,第二部分是给 API 传递、打成参数,第三个是 API 会给哪些响应,如何根据响应来判断 API 是否调用成功,入参、出参就是返回值。

第一个是手机号,第二个是签名,第三个是模板 code 。

image.png

模板是取得模板 code 码,因为已经明确说明要的是 template  code

image.png

最后一个叫 TemplateParam 模板参数,申请模板的时候常见模板库是有变量的,需要给变量传递实际的值,这是存在的意义,需要 JSON,调用方法需要传递的请求参数。

image.png

中间两个已经准备好,上面手机号和下面手机号需要用的时候再来准备好。

(2)返回数据

返回数据第一个叫回执的ID,也是短信发送以后在内部的流水号,可以关注也可以不关注,意义不是特别大。第二个是 Code 代码比较重要,OK 是成功,如果不是 OK 就有问题,Message 一般用在当出现错误的时候,根据具体的消息来判断错误原因。后边还有request ID 是请求时的一个内部的 ID 号,意义也不是特别大,主要关注的是 code 码和 message 码。

2、短信查询(QuerySendDetails)

调用 QuerySendDetails 接口查看短信发送记录和发送状态。

短信查询也有详细的介绍

(1)请求参数

前两个跟分页相关,短信查询会涉及到很多,手机号发送时间还有流水号,流水号可以根据某一条流水具体查询一条短信,如果不想用流水号,可以用时间来查询,查询某一个时间段的短信

(2)返回数据

返回数据里面前两个是返回的状态,下面是返回的具体信息,包括采购 ID,短信的明细还有一段时间发送的总条数,明细是一个数组,里面是一个个的发送出去短信的具体信息。

关于短信消息 API---Java、短信批量发送两个 API,可以参照学习方式了解。

3、功能测试

第1步:引入阿里云服务依赖

com.alibaba.cloud

spring-cloud-alicloud-sms


第2步:使用阿里云提供的 Demo 测试短信发送

public class smsDemo {

//产品名称:云通信短信API产品,开发者无需替换

static final String product = "Dysmsapi";

//产品域名,开发者无需替换

static final String domain ="dysmsapi.aliyuncs.com";

//TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)

static final string accessKeyId = "yourAccessKeyId";

static final string accessKeySecret="yourAccessKeySecret":

//产品名称:云通信短信 API 产品,开发者无需替换

static final String domain ="dysmsapi.aliyuncs.com".

//TODO 此处需要替换成开发者自己的 AK(在阿里云访问控制台寻找)

static final string accessKeyId ="yourAccesskeyId";

static final string accessKeySecret="yourAccessKeySecret":

//短信发送

public static SendSmsResponse sendSmsO throws

clientExcep tion {

//可自助调整超时时间

System.setProperty("sun.net.client.defaultConnectTimeout","10000");

System.setProperty("sun.net.client.defaultReadTimeout","10000");

//初始化 acsc1ient,暂不支持 region 化

IclientProfile profile =DefaultProfile.getProfile("cn-hangzhou ",accessKeyId,

accessKeySecret);

DefaultProfile.addEndpoint("cn-hangzhou","cn-hangzhou",product,domain);

IAcsClient acsClient=new DefaultAcsClient(profile);

//组装请求对象-具体描述见控制台-文档部分内容

SendSmsRequest request=newSendSmsRequest;

//必填:待发送手机号

request.setPhoneNumbers(150000000”;)

//必填:短信签名-可在短信控制台中找到 request.setsignName("云通信");//必填:短信模板-可在短信控制台中找到

request.setTemplateCode("SMS_100000);

//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时。此处的值为

request.setTemplateParam("{\"name":\"Tom ",\"code ": "123\"}");

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

//request.setSmsUpExtendCode("90997");

//可选:outid为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者

request.setoutId("youroutId");

//hint 此处可能会抛出异常.注意 catch

SendSmsResponse sendSmsResponse=acsclientqetAcsRespon se(request);

return sendsmsResponse:

}

//短信查询

public static QuerySendDetailsResponse auerySendDetails

(Strina bizid) throws clientException{

//可自助调整超时时间

system.setProperty("sun.net.client.defaultConnectTimeout","10000");

System.setProperty("sun.net.client.defaultReadTimeout","10000");

//初始化 acsc1ient,暂不支持 region 

IclientProfile profile=DefaultProfile.getProfile("cn-hangzhou",accessKeyId

accessKeySecret);

DefaultProfile.addEndpoint("cn-hangzhou","cn-hangzhou",product,domain);

IAcsclient acsclient=newDefaultAcsClient(profile):

//组装请求对象

QuerySendDetailsRequest request=new

QuerySendDetailsReq uest);

//必填-号码

request.setPhoneNumber(15000);

//可选-流水号

request.setBizId(bizId);

//必填-发送日期 支持30天内记录查询,格式yyyyMMdd

SimpleDateFormat

ft=newSimpleDateFormat("yyyyMMdd");

request.setSendDate(ft.format(newDate0));

//必填-页大小

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 {

//发短信

SendSmsResponse response=sendSms);

System.out.print1n("短信接口返回的数据----------------");

System.outprint1n("Code="+responsegetCode());

system.out.print1n("Message="+response.getMessage());System.out.print1n("RequestId="+response.getRequestIdo)

:System.outprint1n("BizId="+response.getBizIdO));

Thread.s1eep(3000L);

//查明细

if(response.getCode()!

=nu11&&responsegetCode().equa1s("OK")){

QuerySendDetailsResponse querySendDetailsResponse=

querySendDetails(responsegetBizId());

System.out.print1n("短信明细查询接口返回数据----------------");

System.out.print1n("Code="+querySendDetai1sResponsegetCode());

system.out.print1n("Message="+

querySendDetailsResponsegetMessage());

int i =0;

for(QuerySendDetai1sResponse.SmsSendDetai1DTO smsSendDetai1DTO:

querysendDetailsResponsegetSmsSendDetai1DTOs())

{

System.out.print1n("SmsSendDetai1DTo["+i+"]:");

SystemLout.print1n("Content="+smsSendDetai1DTo.getContent());

System.out.print1n("ErrCode="+smsSendDetai1DOgetErrCode());

System.out.print1n("OutId="+

smsSendDetailDTo.getutid());

System.out.print1n("phoneNum="+

smsSendDetailDTOgetPhoneNum(());

System.out.print1n("ReceiveDate="+smsSendDetailo.aetReceiveDate)):

System.out.print1n("SendDate="+smsSendDetai1DogetsendDate());

System.out.print1n("Sendstatus="+smsSendDetailDo.getSendStatus()):

System.out.print1n("Template="+smsSendDetai1DTogetTemplateCode());}

System.out.print1n("TotalCount="+querySendDetai1sResponsegetTotalCount())

System.out.print1n("RequestId="+querySendDetailsResponsegetRequestid());

}

}

}

Demo 来自 SDK 及 DEMO 下载,里面提供好了 Demo 案例,只需要下载对应的版本

找到用户微服务 pom.xml 加入依赖:

org.springtramework.boot/groupia>

spring-boot-starter-web


com.itheima

shop-common1.0-SNAPSHOT


com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery


org.apache.rocketmq

rocketmq-spring-boot-starter2.0.2


org.apache.rocketmgrocketma-client4.4.0


com.alibaba.cloud

spring-cloud-alicloud-sms



新建一个 Demo

image.png

import com.aliyuncs.DefaultAcsClient; import

com.alivuncs. IAcsclient;

import

com.aliyuncs.dysmsapimodelv20170525.uerySendDetailsRequest;

import

com.aliyuncs.dysmsapi.modelv20170525.QuerySendD

etailsResponse

import

com.aliyuncs.dysmsapi.modelv20170525.SendSmsRequest

; import

com.aliyuncs.dysmsapi.model.v20170525.SendsmsR

esponse;

import com.aliyuncs.profile.DefaultProfile;

import com.aliyuncs.profileIclientProfile;

import iava.text.SimpleDateFormat;

public class SmsDemoTest {

//产品名称:云通信短信API产品,开发者无需替换

static final String product = "Dysmsapi";

//产品域名,开发者无需替换

static final String domain ="dysmsapi.aliyuncs.com";

//TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)

static final string accessKeyId = "yourAccessKeyId";

static final string accessKeySecret="yourAccessKeySecret":

//产品名称:云通信短信 API 产品,开发者无需替换

static final String domain ="dysmsapi.aliyuncs.com".

//TODO 此处需要替换成开发者自己的 AK(在阿里云访问控制台寻找)

static final string accessKeyId ="yourAccesskeyId";

static final string accessKeySecret="yourAccessKeySecret":

//短信发送

public static SendSmsResponse sendSmsO throws

clientExcep tion {

//可自助调整超时时间

System.setProperty("sun.net.client.defaultConnectTimeout","10000");

System.setProperty("sun.net.client.defaultReadTimeout","10000");

//初始化 acsc1ient,暂不支持 region 化

IclientProfile profile =DefaultProfile.getProfile("cn-hangzhou ",accessKeyId,

accessKeySecret);

DefaultProfile.addEndpoint("cn-hangzhou","cn-hangzhou",product,domain);

IAcsClient acsClient=new DefaultAcsClient(profile);

//组装请求对象-具体描述见控制台-文档部分内容

SendSmsRequest request=newSendSmsRequest;

//必填:待发送手机号

request.setPhoneNumbers(150000000”;)

//必填:短信签名-可在短信控制台中找到 request.setsignName("云通信");//必填:短信模板-可在短信控制台中找到

request.setTemplateCode("SMS_100000);

//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时。此处的值为

request.setTemplateParam("{\"name":\"Tom ",\"code ": "123\"}");

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

//request.setSmsUpExtendCode("90997");

//可选:outid为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者

request.setoutId("youroutId");

//hint 此处可能会抛出异常.注意 catch

SendSmsResponse

sendSmsResponse=acsclientqetAcsRespon se(request);

return sendsmsResponse:

}

//短信查询

public static QuerySendDetailsResponse auerySendDetails 

(Strina 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);

Acsclient acsclient=newDefaultAcsClient(profile):

//组装请求对象

QuerySendDetailsRequest request=new QuerySendDetailsReq uest);

//必填-号码

request.setPhoneNumber(15000);

//可选-流水号

request.setBizId(bizId);

//必填-发送日期 支持30天内记录查询,格式yyyyMMdd

SimpleDateFormat ft=newSimpleDateFormat("yyyyMMdd");

request.setSendDate(ft.format(newDate());

//必填-页大小

request.setPageSize(10L);

//必填-当前页码从1开始计数

request.setCurrentPage(1L);

//hint 此处可能会抛出异常,注意 catch

QuerySendDetailsResponse querySendDetailsResponse

acscli ent.getAcsResponse(request);

return querySendDetailsResponse;

}

public static void main(String[] args) throws

clientException, InterruptedException {

//发短信

SendSmsResponse response=sendSms);

System.out.print1n("短信接口返回的数据----------------");

System.outprint1n("Code="+responsegetCode());

system.out.print1n("Message="+response.getMessage());System.out.print1n("RequestId="+response.getRequestIdo)

:System.outprint1n("BizId="+response.getBizIdO));

Thread.s1eep(3000L);

//查明细

if(response.getCode()!

=nu11&&responsegetCode().equa1s("OK")){

QuerySendDetailsResponse querySendDetailsResponse=

querySendDetails(responsegetBizId());

System.out.print1n("短信明细查询接口返回数据----------------");

System.out.print1n("Code="+querySendDetai1sResponsegetCode());

system.out.print1n("Message="+

querySendDetailsResponsegetMessage());

int i =0;

for(QuerySendDetai1sResponse.SmsSendDetai1DTO

smsSendDetai1DTO:

querysendDetailsResponsegetSmsSendDetai1DTOs())

{

System.out.print1n("SmsSendDetai1DTo["+i+"]:");

SystemLout.print1n("Content="+smsSendDetai1DTo.getContent());

System.out.print1n("ErrCode="+smsSendDetai1DOgetErrCode());

System.out.print1n("OutId="+

smsSendDetailDTo.getutid());

System.out.print1n("phoneNum="+smsSendDetailDTOgetPhoneNum(());

System.out.print1n("ReceiveDate="+smsSendDetailo.aetReceiveDate)):

System.out.print1n("SendDate="+smsSendDetai1DogetsendDate());

System.out.print1n("Sendstatus="+smsSendDetailDo.getSendStatus()):

System.out.print1n("Template="+smsSendDetai1DTogetTemplateCode());}

System.out.print1n("TotalCount="+querySendDetai1sResponsegetTotalCount())

System.out.print1n("RequestId="+querySendDetailsResponsegetRequestid());

}

}

}

第一个是短信发送,第二个是短信查询,有几个变量需要注意,前两个变量是阿里云内部的一些东西,不需要改默认就可以,下边两个是认证的密钥、ID以及密钥,做申请的时候申请了三部分东西,只用到了两个,第一个认证秘钥没有使用

image.png

可以通过输入手机号显示出来,把一对密钥拷过来,然后把一段替换掉就可以,一定替换成自己的。

接下来是发送短信,发送短信需要大家填入的东西都在一块,手机号填一下、模板的 code 填一下,签名填,需要设置的模板里面的参数,比如 code 代码需要自己写一下,主要替换掉就可以其他的不用管,这是短信发送 API 的使用,接下来短信查询也很简单的,提供了一个参数,按照要按照流水 ID查,不想用流水 ID 查,可以通过手机号、时间段进行简修改解锁条件。

4、下单之后发送短信

1在shop-user模块中加入sms依赖

com.alibaba.cloud

spring-cloud-alicloud-sms

dependency>

2将阿里短信给出的 demo 封装成工具类

public class Smsutil {

//替换成自己申请的accessKeyId

private static string accessKeyId ="xxxxxxxxxx";//

替换成自己申请的accessKeySecret

private statiq string accesskeysecret =

"xxxxxxxxxxxxx";

static final string product = "Dysmsapi";

static final string domain ="dysmsapi.aliyuncs.com";

/**

*发送短信

*

* @param phoneNumbers 要发送短信到哪个手机号

* @param signName 短信签名[必须使用前面申请的]

* @param templateCode 短信短信模板 ID[必须使用前面申请的]

*@param param 模板中${ code }位置传递的内容

*/public static void sendsms(string phoneNumbers, String

signName, String templateCode, String param) {

try {

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=newDefaultAcsclient(profile);

SendSmsRequest request=new SendSmsRequest);

request.setPhoneNumbers(phoneNumbers); request.setsignName(signName);

request.setTemplateCode(templateCode);

request.setTemplateParam(param);

request.setoutId("yourOutId");

SendSmsResponse

sendSmsResponse=acsc1ientgetAcsRespo nse(request);

if (!"ok".equa1s(sendSmsResponse.getCode())){

throw new

RuntimeException(sendSmsResponsegetMessage ());}

} catch (Exception e) {

e.printstackTrace();

throw new RuntimeException("发送短信失败")

}

}

}

(3)修改短信发送的服务

//发送短信的服务

@s1f4j

@Service

@RocketMQMessageListener(consumerGroup ="shop",topic = "order-topic")

public class SmsService implements RocketMQListener{

@Override

public void onMessage(Order order){

log.info("收到一个订单信息{},接下来发送短信",

JSON.toJSONString(order));

//这里可以调用 userDao 查询出 user 的 telephone

SmsUti1.sendSms("telephone","黑马旅游网","SMS_170836451 ","{\"code\":\"验证码

\"}");

}

}

拷过来,新建一个工具类放在 user 里面,new 一个包

image.png

包里面放一个 Sms

image.png

package com.itheima.utils;

import com.aliyuncs.DefaultAcsClient;

importcom.aliyuncs.IAcsclient;

import

com.alivuncs.dvsmsapimodel.v20170525.SendmsRec uest;

import

com.aliyuncs.dysmsapimodelv20170525.SendSmsResp onse;

import com.aliyuncs.profile.DefaultProfile 

import com.aliyuncs.profile.IclientProfile;

@slf4j

public class Smsutil {

//替换成自己申请的accessKeyId

private static string accessKeyId ="xxxxxxxx";//

替换成自己申请的accessKeySecret

private statiq string accesskeysecret =

"xxxxxxxxxxxxxxxxx";

static final string product = "Dysmsapi";

static final string domain ="dysmsapi.aliyuncs.com";

/**

*发送短信

*

* @param phoneNumbers 要发送短信到哪个手机号

* @param signName 短信签名[必须使用前面申请的]

* @param templateCode 短信短信模板 ID[必须使用前面申请的]

*@param param 模板中${ code }位置传递的内容

*/public static void sendsms(string phoneNumbers, String

signName, String templateCode, String param) {

try {

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=newDefaultAcsclient(profile);

SendSmsRequest request=new SendSmsRequest);

request.setPhoneNumbers(phoneNumbers);

request.setsignName(signName);

request.setTemplateCode(templateCode);

request.setTemplateParam(param);

request.setoutId("yourOutId");

SendSmsResponse

sendSmsResponse=acsc1ientgetAcsRespo nse(request);

if (!"ok".equa1s(sendSmsResponse.getCode())){

log.info(“发送短信失败,{},sendSmsResponse);

throw new

RuntimeException(sendSmsResponsegetMessage ());

}

} catch (Exception e) {

log.info(“发送短信失败,{},e);

throw new RuntimeException("发送短信失败")

}

}

}

发送短信的 API 进行了抽取,因为本次要演示的只有发送,而对于查询可以自己去抽一下把必须要填的或者查询条件放在位置,上面有标识,要发送到哪个手机号,短信签名是社么,短信模板是什么以及模板要传递的内容是什么,把规定查询的参数往上翻,把这些东西变成了一些参数放在方法请求里面,如果返回值不是 OK 直接抛了一个异常,如果比较正规的话里面要打一个日志出来,如果发送成功没有任何异常触发。

第一个把密钥替换成自己的,第二个是要调用方法把四个参数传进来,四个参数手机号自己定签名用申请的模板、param 自己

相关文章
|
JavaScript Java API
如何接入阿里云短信服务 (完整指南)
如何接入阿里云短信服务 (完整指南)
58916 1
|
存储 SQL Oracle
Oracle使用expdp/impdp实现全库导入导出的整体流程
Oracle的全库导入,首先一点必须先创建数据库,创建了数据库,才能往该数据库导入所有数据。相对来说,使用Oracle进行数据导入导出还很有些“麻烦”的,大多数资料上来就是......
14405 0
Oracle使用expdp/impdp实现全库导入导出的整体流程
|
11月前
|
人工智能 供应链 安全
未来电商趋势:API技术在智能供应链中的应用
随着电商蓬勃发展,供应链管理正借助API技术实现智能化升级。本文解析API作为电商生态“粘合剂”的作用,探讨其在库存管理、物流协同和风险预测中的关键应用,以及对AI融合、区块链安全和实时生态的推动。API不仅提升效率与用户体验,更重塑电商未来格局,成为企业竞争的核心优势。拥抱API集成,将是应对市场复杂性的关键策略。
251 4
|
安全 Java API
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
阿里云短信服务提供API/SDK和控制台调用方式,支持验证码、通知、推广等短信类型。需先注册阿里云账号并实名认证,然后在短信服务控制台申请资质、签名和模板,并创建AccessKey。最后通过Maven引入依赖,使用工具类发送短信验证码。
7731 3
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
|
11月前
|
安全 测试技术 API
电商API接口开发:基础架构搭建全攻略
本文详细解析了电商API接口从零搭建基础架构的全流程。首先通过需求分析明确业务功能与接口规范,选定数据格式(如JSON)及通信方式(如RESTful)。接着在架构设计阶段选择合适的技术栈、数据库方案,并引入API网关实现统一管理。开发实现部分涵盖认证授权、数据访问、日志记录与异常处理等核心功能。安全防护则强调数据加密、传输安全及速率限制策略。测试优化阶段包括单元测试、集成测试、性能与安全测试,确保接口稳定性。最后通过工具生成清晰的API文档并实施版本控制,为开发者提供便利。整体流程系统化、模块化,助力打造高效、安全的电商API接口。
|
11月前
|
存储 监控 安全
电商API接口安全防护全流程详解:认证加密筑牢安全防线
本文深入解析电商API接口安全防护,涵盖认证、授权、数据加密及其他安全措施,探讨如何构建全方位的安全体系,保障电商平台数据与业务安全。
|
11月前
|
供应链 监控 数据挖掘
电商API接口:开启供应链管理高效协同与价值提升新通道
电商API接口作为连接电商平台与供应链各环节的关键桥梁,通过实时库存管理、订单自动化、物流追踪、供应商协同等应用,显著提升供应链效率与协同能力,助力企业实现数字化转型与高效运营。
|
11月前
|
安全 搜索推荐 数据挖掘
聚焦跨境业务:电商API接口应用与挑战全解析
电商API接口在跨境业务中实现数据互通、流程自动化及功能扩展,提升运营效率与用户体验,但面临数据安全、合规性及技术兼容等挑战,需通过安全加固、合规管理及技术优化等策略应对。
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
13273 4
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
安全 Java API
阿里云短信简介和接入流程
准备阿里云短信服务:1. 注册阿里云账号并实名,建议使用企业实名,个人无法接入短信发送API。2. 购买短信,可选验证码、通知、推广等类型。3. 设置短信签名和模板,签名用于短信前缀,模板包含具体短信内容,需审核。4. 创建并配置子用户AccessKey,仅分配短信权限,确保安全。5. 如有泄露,禁用或删除AccessKey。6. 开发阶段,参考官方文档和SDK进行代码接入。