在阿里云OpenAPI中ⅤBA调用阿里云APl发送验证码短信的完整代码示例可以发一下吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云OpenAPI中,使用VBA调用阿里云API发送验证码短信需要通过HTTP请求的方式实现。由于VBA本身不直接支持阿里云SDK,因此需要手动构造HTTP请求并处理签名机制。以下是完整的代码示例和步骤说明:
在调用API之前,请确保完成以下准备工作: - AccessKey ID 和 AccessKey Secret:获取您的阿里云访问密钥。 - 短信签名和模板:确保已在阿里云控制台创建并通过审核的短信签名和模板。 - 服务地址:使用dysmsapi.aliyuncs.com
作为API的服务地址。
以下是一个完整的VBA代码示例,用于调用阿里云API发送验证码短信:
Sub SendSmsViaAliyun()
' 定义变量
Dim url As String
Dim accessKeyId As String
Dim accessKeySecret As String
Dim phoneNumbers As String
Dim signName As String
Dim templateCode As String
Dim templateParam As String
Dim http As Object
Dim response As String
' 配置参数
url = "https://dysmsapi.aliyuncs.com/"
accessKeyId = "your-access-key-id" ' 替换为您的AccessKey ID
accessKeySecret = "your-access-key-secret" ' 替换为您的AccessKey Secret
phoneNumbers = "1390000****" ' 接收短信的手机号码
signName = "阿里云短信测试" ' 短信签名名称
templateCode = "SMS_15495****" ' 短信模板Code
templateParam = "{""code"":""1234""}" ' 模板变量,JSON格式
' 构造请求参数
Dim queryString As String
queryString = "Action=SendSms" & _
"&PhoneNumbers=" & phoneNumbers & _
"&SignName=" & signName & _
"&TemplateCode=" & templateCode & _
"&TemplateParam=" & templateParam & _
"&Version=2017-05-25" & _
"&Format=JSON" & _
"&AccessKeyId=" & accessKeyId & _
"&SignatureMethod=HMAC-SHA1" & _
"&Timestamp=" & Format(Now(), "yyyy-mm-ddThh:mm:ssZ") & _
"&SignatureVersion=1.0" & _
"&SignatureNonce=" & GenerateNonce()
' 生成签名
Dim signature As String
signature = GenerateSignature(queryString, accessKeySecret)
queryString = queryString & "&Signature=" & signature
' 发送HTTP请求
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url & "?" & queryString, False
http.Send
' 获取响应
response = http.responseText
MsgBox response
End Sub
' 生成随机字符串(用于SignatureNonce)
Function GenerateNonce() As String
GenerateNonce = Replace(Mid(CreateObject("Scriptlet.TypeLib").GUID, 2, 36), "-", "")
End Function
' 生成签名
Function GenerateSignature(queryString As String, accessKeySecret As String) As String
Dim hmac As Object
Set hmac = CreateObject("System.Security.Cryptography.HMACSHA1")
hmac.Key = StrConv(accessKeySecret & "&", vbFromUnicode)
Dim hashBytes() As Byte
hashBytes = hmac.ComputeHash_2((queryString))
GenerateSignature = Base64Encode(hashBytes)
End Function
' Base64编码
Function Base64Encode(bytes() As Byte) As String
Dim xml As Object
Set xml = CreateObject("MSXML2.DOMDocument").createElement("b64")
xml.DataType = "bin.base64"
xml.nodeTypedValue = bytes
Base64Encode = xml.Text
End Function
Timestamp
参数需为UTC时间,格式为yyyy-MM-ddTHH:mm:ssZ
。通过以上代码和步骤,您可以成功使用VBA调用阿里云API发送验证码短信。如果需要进一步优化或扩展功能,可以参考阿里云官方文档中的签名机制和API说明。