发表于: 2020-07-16 23:39:20
1 1410
- 今天完成的事情:学习短信调用和系统结构。今天状态不佳,下雨天屋内闷闷的,头昏昏的。
明天计划的事情:详解下短信服务,做小课堂,学习系统结构
遇到的问题:暂无
收获:
url在数据库中最佳字段设置
1. 不同浏览器和web服务器对URL支持的长度不同,IE浏览器最大限制2083字符,谷歌8182字符,Apache(Server)支持8182字符。
2.Ascll码,一个字母一个字节,一个汉字等于2个字节。utf-8码,一个字母等于1个字节,一个汉字等于3个字节。Unicode码,一个字母2个,汉字也是2个。
3.http://codingdict.com/questions/20557
VARCHAR列中的值是可变长度的字符串。 在MySQL
5.0.3之前,长度可以指定为0到255之间的值,而在5.0.3和更高版本中,长度可以指定为0到65535之间的值。在MySQL
5.0.3及更高版本中,VARCHAR的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和所使用的字符集。
小于MySQL 5.0.3版本使用 TEXT
大于等于MySQL 5.0.3使用 VARCHAR(2083)
按照师兄的说的,我自己也修改了数据库的url长度。
SDK和API的区别
API即应用编程接口,是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。
SDK软件开发工具包,软件开发工具包一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。软件开发工具包括广义上指辅助开发某一类软件的相关文档、范例和工具的集合。
为了便于理解,我们就再举个不完全恰当的例子。你想吃面包,而你家对街有一家面包店卖面包和烤面包机。API方式是你经过马路去这家面包店买了一个面包。API就是买面包。而SDK方式是,你向面包店买了一个烤面包机,在自己家里安装好,然后烤了一个面包。SDK是这个面包机和配料。
选择API
优势:API开发成本低,对接比较简单,可以快速验证商业模式和用户体验。
劣势:API会经过对接平台,厂商可以获取对接平台相关数据信息。
选择SDK
优势:SDK对接后的功能比较稳定,响应速度快,而且对接平台相关数据不会被获取。
劣势:需要开发的环节较多,开发工作量大,对接周期略长。
使用阿里云的短信服务
https://help.aliyun.com/document_detail/101874.html?spm=a2c4g.11186623.6.648.17521a81ZXtZjT
参考官方文档学习使用API
1. maven中手动导入jar包,两个一个aliyun-java-sdk-core包,另外一个是alicom-dysms-api包
<!--阿里云java sdk库-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ecs</artifactId>
<version>4.19.9</version>
</dependency>
其中DgroupId是组名,DartifactId是jar包的名字,Dversion是版本号,Dpackaging是jar的形式。
mvn install:install-file -Dfile=E:/download/aliyun-java-sdk-core-4.5.1.jar
-DgroupId=com.aliyun
-DartifactId=aliyun-java-sdk-core
-Dversion=4.5.1
-Dpackaging=jar
mvn install:install-file -Dfile=E:/download/aliyun-java-sdk-ecs-4.19.9.jar -DgroupId=com.aliyun -DartifactId=aliyun-java-sdk-ecs -Dversion=4.19.9 -Dpackaging=jar
2. API代码
/**
* 发送短信
*/
public class SendSmsDemo {
// 设置公共请求参数,初始化Client。
private DefaultProfile profile = DefaultProfile.getProfile(
"your-regionId",// API支持的地域ID,如短信API的值为:cn-hangzhou。
"your-accessKeyId",// 您的AccessKey ID。
"your-accessKeySecret");// 您的AccessKey Secret。
private IAcsClient client = new DefaultAcsClient(profile);
private static void log_print(String functionName, Object result) {
Gson gson = new Gson();
System.out.println("-------------------------------" + functionName + "-------------------------------");
System.out.println(gson.toJson(result));
}
/**
* 添加短信模板
*/
private String addSmsTemplate() throws ClientException {
CommonRequest addSmsTemplateRequest = new CommonRequest();
addSmsTemplateRequest.setSysDomain("dysmsapi.aliyuncs.com");
addSmsTemplateRequest.setSysAction("AddSmsTemplate");
addSmsTemplateRequest.setSysVersion("2017-05-25");
// 短信类型。0:验证码;1:短信通知;2:推广短信;3:国际/港澳台消息
addSmsTemplateRequest.putQueryParameter("TemplateType", "0");
// 模板名称,长度为1~30个字符
addSmsTemplateRequest.putQueryParameter("TemplateName", "测试短信模板");
// 模板内容,长度为1~500个字符
addSmsTemplateRequest.putQueryParameter("TemplateContent", "您正在申请手机注册,验证码为:${code},5分钟内有效!");
// 短信模板申请说明
addSmsTemplateRequest.putQueryParameter("Remark", "测试");
CommonResponse addSmsTemplateResponse = client.getCommonResponse(addSmsTemplateRequest);
String data = addSmsTemplateResponse.getData();
// 消除返回文本中的反转义字符
String sData = data.replaceAll("'\'", "");
log_print("addSmsTemplate", sData);
Gson gson = new Gson();
// 将字符串转换为Map类型,取TemplateCode字段值
Map map = gson.fromJson(sData, Map.class);
Object templateCode = map.get("TemplateCode");
return templateCode.toString();
}
/**
* 发送短信
*/
private String sendSms(String templateCode) throws ClientException {
CommonRequest request = new CommonRequest();
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
// 接收短信的手机号码
request.putQueryParameter("PhoneNumbers", "156xxxxxxxx");
// 短信签名名称。请在控制台签名管理页面签名名称一列查看(必须是已添加、并通过审核的短信签名)。
request.putQueryParameter("SignName", "阿里云通信");
// 短信模板ID
request.putQueryParameter("TemplateCode", templateCode);
// 短信模板变量对应的实际值,JSON格式。
request.putQueryParameter("TemplateParam", "{\"code\":\"8888\"}");
CommonResponse commonResponse = client.getCommonResponse(request);
String data = commonResponse.getData();
String sData = data.replaceAll("'\'", "");
log_print("sendSms", sData);
Gson gson = new Gson();
Map map = gson.fromJson(sData, Map.class);
Object bizId = map.get("BizId");
return bizId.toString();
}
/**
* 查询发送详情
*/
private void querySendDetails(String bizId) throws ClientException {
CommonRequest request = new CommonRequest();
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("QuerySendDetails");
// 接收短信的手机号码
request.putQueryParameter("PhoneNumber", "156xxxxxxxx");
// 短信发送日期,支持查询最近30天的记录。格式为yyyyMMdd,例如20191010。
request.putQueryParameter("SendDate", "20191010");
// 分页记录数量
request.putQueryParameter("PageSize", "10");
// 分页当前页码
request.putQueryParameter("CurrentPage", "1");
// 发送回执ID,即发送流水号。
request.putQueryParameter("BizId", bizId);
CommonResponse response = client.getCommonResponse(request);
log_print("querySendDetails", response.getData());
}
public static void main(String[] args) {
SendSmsDemo sendSmsDemo = new SendSmsDemo();
try {
// 创建短信模板
String templateCode = sendSmsDemo.addSmsTemplate();
// 使用刚创建的短信模板发送短信
String bizId = sendSmsDemo.sendSms(templateCode);
// 根据短信发送流水号查询短信发送情况
sendSmsDemo.querySendDetails(bizId);
} catch (ClientException e) {
e.printStackTrace();
}
}
}
系统结构知识内容
评论