阿里云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 ")
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
时间需要传UTC时间,就是北京时间-8。
先看下文档吧 https://help.aliyun.com/zh/sdk/product-overview/rpc-mechanism?spm=a2c4g.11186623.0.0.5d8245c5Ni7AQw
此回答整理自钉群“阿里云 OpenAPI SDK 自签名服务群”