Delphi 阿里云短信控件需要实现的功能
控件源程序,控件使用文档以及Demo下载:下载 TAli_SMS_Component 源代码
- 可以进行参数设置;
- 实现阿里云短信的全部功能:
一、需要实现的函数列表:
序号 | 函数名称 | 函数功能 |
---|---|---|
1 | SendSms | 调用SendSms发送短信 |
2 | SendBatchSms | 调用SendBatchSms接口批量发送短信 |
3 | QuerySendDetails | 调用QuerySendDetails接口查看短信发送记录和发送状态 |
4 | AddSmsSign | 调用短信AddSmsSign申请短信签名 |
5 | DeleteSmsSign | 调用接口DeleteSmsSign删除短信签名 |
6 | ModifySmsSign | 调用接口ModifySmsSign修改未审核通过的短信签名,并重新提交审核 |
7 | QuerySmsSign | 调用接口QuerySmsSign查询短信签名申请状态 |
8 | AddSmsTemplate | 调用接口AddSmsTemplate申请短信模板 |
9 | DeleteSmsTemplate | 调用接口DeleteSmsTemplate删除短信模板 |
10 | ModifySmsTemplate | 调用接口ModifySmsTemplate修改未通过审核的短信模板 |
11 | QuerySmsTemplate | 调用接口QuerySmsTemplate查询短信模板的审核状态 |
二、调用以上函数需要的公共请求参数
序号 | 参数名称 | 必须 | 说明 |
---|---|---|---|
1 | Signature | 是 | 请求签名,即最终生成的签名结果值 |
2 | AccessKeyId | 是 | 访问密钥 ID。AccessKey 用于调用 API。。这个就是阿里云后台申请的参数。 |
3 | Action | 是 | API 的名称。这个就是上面列出的那些命令的名字,调用那个命令,就写那个名字。 |
4 | Format | 否 | 返回参数的语言类型。取值范围:json |
5 | RegionId | 否 | API支持的RegionID,如短信API的值为:cn-hangzhou。这个参数实测没有什么作用,可以随便写什么都可以。可选参数。 |
6 | SignatureMethod | 是 | 签名方式。取值范围:HMAC-SHA1。目前必须写这个值 |
7 | SignatureNonce | 是 | 签名唯一随机数。用于防止网络重放攻击,建议您每一次请求都使用不同的随机数。这个参数就是为了防止重复发送短信,同时也有安全作用,建议使用但是的时间(精确到毫秒)作为该值。该值使用过一次后就不能再使用,也就是说每一条短信的这个值是不能一样的。 |
8 | Timestamp | 是 | 请求的时间戳。按照ISO8601 标准表示,并需要使用UTC时间,格式为yyyy-MM-ddTHH:mm:ssZ。示例:2018-01-01T12:00:00Z 表示北京时间 2018 年 01 月 01 日 20 点 00 分 00 秒。Delphi 开发者需要注意,如果需要UTC时间,就需要在当前时间上减去8小时,否则会出现时间不正确,因为阿里后台允许的时间误差在15分钟之内。 |
9 | Version | 否 | API 的版本号,格式为 YYYY-MM-DD。取值范围:2017-05-25。这个值亲测也没有什么作用,可以随便填写,可选参数。 |
三、阿里云调用约定
短信服务支持基于URL发送HTTP/HTTPS请求。请求参数需要包含在URL中,请求及返回结果都使用 UTF-8 字符集编码。也就是说,所有的请求,无论是使用GET还是使用POST,参数都在URL中。
以下为一条SendSms未编码的URL请求示例:
https://dysmsapi.aliyuncs.com/?Action=SendSms&<公共请求参数>&<专有参数>
- https :指定了请求通信协议。
- dysmsapi.aliyuncs.com :指定了短信服务的服务接入地址(Endpoint)。
- Action=SendSms :指定了要调用的API名称为SendSms,表示发送短信。
- <公共请求参数> :是系统规定的其他公共参数。
- <专有参数> :表示某个命令的专有参数,每个命令参数是不一样的。在阿里云的文档中没有提及专有参数,这个需要注意,实际上请求时是有专有参数的。
四、阿里云请求签名算法说明
- 对于每一次HTTP或者HTTPS协议请求,阿里会根据访问中的签名信息验证访问请求者身份。具体由使用AccessKeyID和AccessKeySecret对称加密验证实现。其中AccessKeyID是访问者身份,AccessKeySecret是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。
- 把所有的参数按照URL请求的参数约定进行排序(按照Key值排序,不是按照整个参数字符串排序);
- 把排序后的字符串按照阿里规定的POP特殊编码 进行编码,然后按照Key=Value拼接;
- 把上面的通过POP特殊编码 编码拼接的字符串再按照* HTTPMethod + “&” + specialUrlEncode(“/”) + ”&” + specialUrlEncode(sortedQueryString)拼接;
- 对上述字符串进行HmacSHA1算法 + Base64编码,需要使用AccessKeySecret,生成的字符串作为Signature 拼接再URL参数之中即可。