利用阿里云给手机发送短信验证码
第一步:登录阿里云
输入自己账号或者注册账号使用阿里云。
第二步:
登录过后,开通并使用短信服务。鼠标悬停在“产品”上,会出现阿里云提供的产品服务,在搜索框中搜索“短信服务”,搜索框显示出来,点击进去。
第三步:
开通短信服务,点击免费开通,开通服务。新账号可以免费领取100条的短信额度。
第四步:
申请签名和模板一下签名和模板是什么。
申请的签名会出现在短信开头,如此图中,“教师管理系统”便是签名。后面的内容便是模板,是我们在申请签名成功后需要申请的。模板中可变的字符为模板参数(比如说4-6位随机码),是在申请模板中进行配置的,后面可以通过代码动态给模板参数赋值。所以只要配置好签名和模板,我们的短信格式可以确定。
进入短信验证服务后,点击快速学习和测试,第一步是申请资质,这里需要用到身份证,因为防止有人发短信做坏事,个人使用的话,审核还是挺快的,一般也就几十分钟,然后将五个步骤完成,就可以得到自己申请好的签名和模板。
第五步:
RAM申请及权限配置
RAM介绍
RAM (Resource Access Management) 是阿里云提供的资源访问控制服务。RAM用户是代表任意的通过控制台或OpenAPI操作阿里云资源的人、系统或应用程序。RAM允许您在云账号下创建并管理多个用户,每个用户都有唯一的用户名、登录密码或访问密钥。
云账户与RAM用户是一种主子关系。
云账户(主账号):
1)阿里云资源归属、资源使用计量计费的基本主体
RAM用户(子账号):
1)只能存在于某个云账户下的RAM实例中
2)不拥有资源,在被授权操作时所创建的资源归属于主账户
3)RAM用户不拥有账单,被授权操作时所发生的费用也计入主账户账单。
原文链接:https://blog.csdn.net/guochen1314/article/details/110392499
(1)新建用户
鼠标悬停在右上角的头像上,然后进入AccessKey管理,
然后选择使用子账户
进入之后新建一个用户组,然后按要求填写即可
接着创建一个用户,按要求填写内容,勾选编程访问;
该步骤注意,创建完成后会得到会得到AccessKey(id,密码),一定一定一定要保存下来,这个后面会用到,并且出现一次后不会再出现,下载下来。
(2)分配权限
这里就是给RAM用户分配权限,根据我们的需要选择分配,由于我们的功能是短信验证码,我们分配以下三种权限。我当时因为没有分配权限,在JAVA代码中一直无法实现功能,所以这个要注意一下。
AliyunDysmsFullAccess (管理短信服务(SMS)的权限)
AliyunRAMFullAccess (管理访问控制(RAM)的权限,即管理用户以及授权的权限)
AliyunSTSAssumeRoleAccess (调用STS服务AssumeRole接口的权限)
第六步
在JAVA中使用
(1)导入依赖坐标
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>2.2.1</version>
</dependency>
(2)调用API
快速学习界面往下面划,调用API
将API中的SDK实例复制下来,粘贴到JAVA项目中,配置信息改为自己的,这里的AccessKey填上面新建用户之后保存的ID和Secret。
// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* 使用AK&SK初始化账号Client
* @return Client
* @throws Exception
*/
public static com.aliyun.teaopenapi.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
config.endpoint = "dysmsapi.aliyuncs.com";
return new com.aliyun.teaopenapi.Client(config);
}
/**
* API 相关
* @param path params
* @return OpenApi.Params
*/
public static com.aliyun.teaopenapi.models.Params createApiInfo() throws Exception {
com.aliyun.teaopenapi.models.Params params = new com.aliyun.teaopenapi.models.Params()
// 接口名称
.setAction("SendSms")
// 接口版本
.setVersion("2017-05-25")
// 接口协议
.setProtocol("HTTPS")
// 接口 HTTP 方法
.setMethod("POST")
.setAuthType("AK")
.setStyle("RPC")
// 接口 PATH
.setPathname("/")
// 接口请求体内容格式
.setReqBodyType("json")
// 接口响应体内容格式
.setBodyType("json");
return params;
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.teaopenapi.Client client = Sample.createClient();
com.aliyun.teaopenapi.models.Params params = Sample.createApiInfo();
// query params
java.util.Map<String, Object> queries = new java.util.HashMap<>();
queries.put("PhoneNumbers", "手机号");
queries.put("SignName", "签名");
queries.put("TemplateCode", "短信模板CODE");
queries.put("TemplateParam", "{\"code\":\"1234\"}");
// runtime options
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
com.aliyun.teaopenapi.models.OpenApiRequest request = new com.aliyun.teaopenapi.models.OpenApiRequest()
.setQuery(com.aliyun.openapiutil.Client.query(queries));
// 复制代码运行请自行打印 API 的返回值
// 返回值为 Map 类型,可从 Map 中获得三类数据:响应体 body、响应头 headers、HTTP 返回的状态码 statusCode。
client.callApi(params, request, runtime);
}
}
运行main方法即可成功运行。