本人个人博客地址https://www.lightingsui.com
介绍
最近由于项目的业务需要,想使用验证码登录系统,所以要找一个短信平台,第一目标就是阿里云的短信服务平台,说实话,之前在阿里云买过很多东西了,例如云ECS服务器、云mysql、SSL证书、域名,那就再次为阿里云做出点贡献吧,我的钱不是通过淘宝送给马云的!!!
这里我直接给出阿里云短信服务的地址:https://www.aliyun.com/product/sms?utm_content=se_1003099122
开通我就不说了,我先来说一下费用的问题,刚开始我就在费用这犹豫了,并不了解阿里云短信服务的收费机制,以为要先购买,所以拉倒底部发现购买只能购买套餐,但是我们的使用量小,不想购买套餐,想使用按条收费的。
所以刚开始我都打算放弃阿里云了,强制用户购买套餐?其实并不是,阿里云是这么收费的,可以不购买套餐,只需直接使用就可以了,根据你当月发送了多少条,月底进行收费,但是在你的阿里云账户里需要有余额(为了防止你月底不清账吗,所以先让你存点),所以充好钱等着自动扣费就行了。乖乖等着吧!
收费是有阶梯制度的,发送的短信数量越多是越便宜的。阿里云这有好几种短信类型:验证码短信、短信通知、推广短信、还有港澳台的,常用的也就是前三个吧,我是用的就是验证类短信。就是专门发验证码的短信通知。
使用详情
使用阿里云短信服务需要以下几个步骤:
- 申请AccessKey和AccessKey Secret。
- 注册签名。
- 注册模板。
- 代码使用
1、AccessKey和AccessKey Secret
这个AccessKey和AccessKey Secret是什么呢,其实就是账号密码,咱们登录阿里云官网的账号和密码并不能在代码中使用,在代码中想要登录阿里云就需要使用AccessKey和AccessKey Secret了,它和密码同等重要,所以不要告诉别人。AccessKey就相当于阿里云账号,AccessKey Secret就是密码,只不过这两个是在代码中的账号与密码,与我们网站登录的账号和密码没什么两样。
没有用过短信服务的应该没有下面的那一条,因为我已经使用了,所以大家自动忽略,看箭头所指的方向,点击去创建AccessKey和AccessKey Secret。
2、签名
签名可能大家都是特别熟悉,但是不是你想的那种签名,这种签名就相当于短信开头的LOGO,例如
【阿里云】就是签名,这个申请完了每次发送短信的时候会自动加上的,不用我们手动去加,添加签名:
这里面需要注意的一点就是在填写这个表的时候,不要加【】,这个系统会自动为我们加的。
审核也是比较快的,大概一个小时左右就能审核完了。
3、模板
模板又是什么呢,模板就是短信的内容,只不过模板中可以指定一些变量,我们使用的时候可以给这些变量赋值,还是挺灵活的呢。
例如我使用了code这个变量,那么这个变量名就一定要记住,一会代码中是要使用的,我们需要用实际的值去替换这个变量。添加完了之后等待审核就可以了。
4、java的应用
阿里的短信服务我是应用web中的,所以我此次以java代码举例,其实阿里为好多种编程语言都配备了使用案例,文档地址:https://help.aliyun.com/product/44282.html?spm=5176.12207334.0.0.7e281cbeln5j0I
当使用maven管理jar包时,需要导入下面的依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.3</version>
</dependency>
先来看代码
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
public class SendSms {
public static void main(String[] args) throws JsonProcessingException {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou",
"accessKeyID", "accessKey Secret");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", "photo_number");
request.putQueryParameter("SignName", "Repository");
request.putQueryParameter("TemplateCode", "SMS_178766379");
Map<String, String> map = new HashMap<String, String>(2);
map.put("code", "123321");
request.putQueryParameter("TemplateParam", new ObjectMapper().writeValueAsString(map));
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
我们刚才使用的模板为尊敬的用户,您的注册会员动态密码为:${code},请勿泄漏于他人!
此时,就需要将code进行赋值了,putQueryParameter
这个api的最后一个参数就是进行参数的赋值,但是接收的是一个json格式的字符串,所以我们先将code作为键(键的名字要和模板中的变量名对应上),变量值作为value放在map中,然后使用jackson将map转化为json字符串。有几个变量就可以将几个变量的名字作为key放在map中。
注意:如果putQueryParameter
最后一个参数只是放了普通字符串,那么返回结果中将提示
{"Message":"JSON参数不合法","RequestId":"89BB2BDB-2B91-4B5A-AB0E-67860C8E9C03","Code":"isv.INVALID_JSON_PARAM"}
接下来就是修改accessKey和accessKey secret
将此处的两个换成你刚才申请到的就可以了。cn-hangzhou
参数不用动。
第一处就是给哪个手机号发送,填上对应的手机号即可,第二处就是模板的名称。与下图的对应,想用哪个模板就使用哪个编号
Sign
表示的是使用的签名名称,这个名称个人账户只允许申请一个,所以应该好找
接下来执行,手机即可收到短信。