发表于: 2020-07-16 23:39:20

1 1410


  1. 今天完成的事情:学习短信调用和系统结构。今天状态不佳,下雨天屋内闷闷的,头昏昏的。

明天计划的事情:详解下短信服务,做小课堂,学习系统结构
遇到的问题:暂无
收获:

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>
  1. 其中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();
}
}
}


系统结构知识内容


返回列表 返回列表
评论

    分享到