开发者社区 问答 正文

阿里云OpenAPI这个问题怎么解决?

阿里云OpenAPI这个问题怎么解决?我已有核过的短信签名丶短信模板,在工作台调用API发送验证码短信,也成功了。。但是,我的软件是用VBA语言开发的,用VBA代码调用APl发送短信,却一直不能发送短信。Function ByteArrayToHexString(arrData() As Byte) As String
Dim i As Long
Dim strHex As String
For i = LBound(arrData) To UBound(arrData)
strHex = strHex & Right("0" & Hex(arrData(i)), 2)
Next i
ByteArrayToHexString = strHex
End Function
Function URLEncode(ByVal str As String) As String
Dim i As Integer
Dim strTemp As String
Dim strChar As String
Dim byteTemp() As Byte

strTemp = ""
For i = 1 To Len(str)
    strChar = Mid(str, i, 1)
    Select Case strChar
        Case "0" To "9", "A" To "Z", "a" To "z", "-", "_", ".", "~"
            strTemp = strTemp & strChar
        Case Else
            byteTemp = StrConv(strChar, vbFromUnicode)
            strTemp = strTemp & "%" & Right("0" & Hex(byteTemp(0)), 2)
    End Select
Next i

URLEncode = strTemp

End Function
Function Base64Encode(ByVal str As String) As String
Dim objXML As Object
Dim objNode As Object

Set objXML = CreateObject("MSXML2.DOMDocument")
Set objNode = objXML.createElement("b64")

objNode.DataType = "bin.base64"
objNode.nodeTypedValue = Stream_StringToBinary(str)

Base64Encode = objNode.Text

End Function
Function Stream_StringToBinary(ByVal str As String) As Byte()
Dim objStream As Object

Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 2 ' adTypeText
objStream.Charset = "utf-8"
objStream.Open
objStream.WriteText str
objStream.Position = 0
objStream.Type = 1 ' adTypeBinary
Stream_StringToBinary = objStream.Read
objStream.Close

End Function
Function HMACSHA1(ByVal strText As String, ByVal strKey As String) As Byte()
Dim objEncoder As Object
Dim objHMAC As Object
Dim objSHA1 As Object

Set objEncoder = CreateObject("System.Text.UTF8Encoding")
Set objHMAC = CreateObject("System.Security.Cryptography.HMACSHA1")
Set objSHA1 = CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider")

objHMAC.Key = objEncoder.GetBytes_4(strKey)
objHMAC.ComputeHash_2 objEncoder.GetBytes_4(strText)

HMACSHA1 = objHMAC.Hash

End Function
Function EncodeBase64(ByRef arrData() As Byte) As String
Dim objXML As Object
Dim objNode As Object

Set objXML = CreateObject("MSXML2.DOMDocument")
Set objNode = objXML.createElement("b64")

objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.Text

End Function
Sub SendSMS()
Dim requestUrl As String
Dim http As Object
Dim response 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

' 阿里云短信API的请求地址
requestUrl = "https://dysmsapi.aliyuncs.com/"

' 阿里云账号的Access Key ID和Access Key Secret
accessKeyId = "LTAxxxx"
accessKeySecret = "wxxxxxxxx"

' 接收短信的手机号码
phoneNumbers = "1392888xxx9"

' 短信签名
signName = "xx软件"

' 短信模板CODE
templateCode = "SMS_故意隐藏。"

' 短信模板变量
templateParam = "{""code"":""123789""}"

' 创建HTTP请求对象
Set http = CreateObject("MSXML2.XMLHTTP")

' 构造请求参数
requestUrl = requestUrl & "?Action=SendSms"
requestUrl = requestUrl & "&Format=JSON"
requestUrl = requestUrl & "&Version=2017-05-25"
requestUrl = requestUrl & "&AccessKeyId=" & accessKeyId
requestUrl = requestUrl & "&SignatureMethod=HMAC-SHA1"
requestUrl = requestUrl & "&SignatureVersion=1.0"
requestUrl = requestUrl & "&SignatureNonce=" & WorksheetFunction.RandBetween(1000000000, 9999999999#)
requestUrl = requestUrl & "&Timestamp=" & Format(Now, "yyyy-mm-ddThh:mm:ssZ")
Dim signature As String
signature = EncodeBase64(HMACSHA1("GET&%2F&" & URLEncode(requestUrl), accessKeySecret & "&"))
requestUrl = requestUrl & "&Signature=" & URLEncode(signature)
requestUrl = requestUrl & "&PhoneNumbers=" & URLEncode(phoneNumbers)
requestUrl = requestUrl & "&SignName=" & URLEncode(signName)
requestUrl = requestUrl & "&TemplateCode=" & URLEncode(templateCode)
requestUrl = requestUrl & "&TemplateParam=" & URLEncode(templateParam)

' 发送HTTP GET请求
http.Open "GET", requestUrl, False
http.Send

' 获取响应结果
response = http.responseText

' 处理响应结果
MsgBox response

End Sub
报错如下:Microsoft Excel
IRequestld ”E2E28DB8-91FB-5BOF-B786-2329298D2D9CE97, Message " Sp
ecified time stamp or date value is
expired .”” Recommend :https://api.aliyun.cn.com/troubleshoot?q=lnvalidTi
meStamp . Expired & product = Dysmsapi & i & requestld =E2E28DB8-91FB-5BOF-
B786-23298D2D9CE97, Hostld ":dysmsapi.aliyuyuncs.com’ Code ?“ InvalidT
meStampExpired ")

展开
收起
三分钟热度的鱼 2023-12-20 18:50:31 100 分享 版权
1 条回答
写回答
取消 提交回答
问答分类:
问答地址: