首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >非常古老的系统,嵌入腾讯云短信碰到的问题,我哪做错了?

非常古老的系统,嵌入腾讯云短信碰到的问题,我哪做错了?

提问于 2021-08-16 15:02:40
回答 0关注 0查看 62

wendell,您好:

先说声谢谢,主要怕您没有耐心看到最后,我觉得您能看就很高兴了。

首先吐槽一句,通过腾讯云助手来找到一个人来回答我的疑问,是一件困难的事情,所以在网络上找到相关的文件,然后才找到您,希望您能有空告诉我,在哪出现问题了。第二再吐槽一句,API帮助文档写的,那真的是书呆子写的东西,我是看不懂。

言归正传,我碰到如下问题:

我需要在一个非常古老的系统(vb6.0)里面嵌入腾讯云短信的功能,就是事件触发了,给某个手机发一封短信即可,需求很简单,我仔细看了您们的帮助文档,基本上了解了一个大概,我先说一下我理解的如何使用这个API:

1)获得必要的各种key,id等信息:

这些我已经获得了,我申请的SignName=PlusStock,我已经通过API Exproler成功的,给我的手机发送了测试短信,应该是我已经具备了发短信的条件。

2) 获得签名串

通过HMAC-SHA1算法,对签名串进行转换,我使用的是V3.0 版本一,拼装签名串格式类似于下面的,除了Timestamp和Nonce两个参数需要每次变化外,其它的我把最关键改动了一些:

POSTsms.tencentcloudapi.com/?Action=SendSms&Language=zh-CN&Nonce=2741&PhoneNumberSet.0=+8613901xxxxx&Region=ap-

beijing&SecretId=AKIDZy7yYrte7KGuHMBjzyh9JCpXXXXXXX&SignName=PXXXtock&SmsSdkAppId=14XXXX5445&TemplateId=9XXXX05&TemplateParamSet.0=xxxx&TemplateParamSet.1=yyyy&Timestamp=162XXXX0725&Version=2021-01-11

最后得到类似下面的签名字符串:

P02NbSHN2zA1PeAJhxD04J53rhU=

编码后:

P02NbSHN2zA1PeAJhxD04J53rhU%3D

我在本地生成的签名串,与API Explorer中的对照,一样的,说明我生成签名字符串功能是对的。

3)把签名串,与上面其它的参数拼装,通过post或者get方法,发到主机:https://sms.tencentcloudapi.com/,然后服务器返回给我一个json格式的字符串,告诉我成功,或者不成功。

我现在获得的回复是:{"Response":{"Error":{"Code":"AuthFailure.SignatureFailure","Message":"请求签名验证失败,请检查您的签名计算是否正确。"},"RequestId":"a77c7f83-ad4a-45ef-a109-d90793da58c0"}}

我的疑问: 1)我对如何调用API理解是否有误?是不是在post或者get方法之前,只要把签名串加进去,组装成如下形式的body即可?

Action=SendSms&Language=zh-CN&Nonce=2741&PhoneNumberSet.0=+8613901xxxxx&Region=ap-beijing&SecretId=AKIDZy7yYrte7KGuHMBjzyh9JCpXXXXXXX&SignName=PXXXtock&SmsSdkAppId=14XXXX5445&TemplateId=9XXXX05&TemplateParamSet.0=xxxx&TemplateParamSet.1=yyyy&Timestamp=162XXXX0725&Version=2021-01-11&Signature=ytVhc4K1qnDAxyM51jF7%2F6YXHWs%3D

2)我的源代码可能太老了,可能不认识,我大概说一下就是:

Dim objXML As New MSXML2.XMLHTTP

'打开链接对象信息

objXML.Open "POST", sHost, False //sHost=https://sms.tencentcloudapi.com/

'设置头部

objXML.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"

'发送请求,此处body,就是上面的1)中的内容,做了utf-8转换,最后结果就是1)中的样子

sBody = StrConv(EncodeToBytes(sQueryString), vbUnicode)

objXML.Send sBody

If objXML.Status <> 200 Then '判断文档是否已经解析完,以做客户端接受返回消息

'失败

sResult = ""

Else

'成功

'返回文本内容的信息

sResult = objXML.ResponseText

End If

'关闭对象

Set objXML = Nothing

'输出结果

debug.print sResult

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档