v3签名里,有关于规范化查询字符串的构造方法,没有关于payload body的字符串构造方法,如果我用的是post方法,content-type 是json,通过阿里云OpenAPI发送短信该如何构造字符串?
阿里云API文档会有具体的示例,下面我用python语言举一个例子,你可以看一下:
import urllib.parse
# 假设这是你的AccessKeyId和AccessKeySecret
access_key_id = 'your_access_key_id'
access_key_secret = 'your_access_key_secret'
# 短信API参数
params = {
'Action': 'SendSms',
'SignatureMethod': 'HMAC-SHA1',
'SignatureNonce': 'unique_value',
'SignatureVersion': '1.0',
'AccessKeyId': access_key_id,
'PhoneNumbers': '138xxxxxxxx',
'SignName': 'your_signature_name',
'TemplateCode': 'your_template_code',
'TemplateParam': '{"code":"123456"}'
}
# 需要按照key的字典序对参数进行排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 将排序后的参数列表转换为query string
query_string = '&'.join(['%s=%s' % (urllib.parse.quote(k, safe=''), urllib.parse.quote(v, safe='-_.~')) for k, v in sorted_params])
# 最终的请求字符串是:
# Action=SendSms&PhoneNumbers=138xxxxxxxx&SignatureMethod=HMAC-SHA1&SignatureNonce=unique_value&SignatureVersion=1.0&AccessKeyId=your_access_key_id&SignName=your_signature_name&TemplateCode=your_template_code&TemplateParam=%7B%22code%22%3A%22123456%22%7D
# 计算签名并添加到查询参数中
# 这里省略签名计算的部分代码
# 构造最终的URL
url = 'https://dysmsapi.aliyuncs.com/?' + query_string + '&Signature=your_signature'
# 发送HTTP请求
# 这里省略HTTP请求发送的部分代码
POST方法字段也可放在query,不需要body,建议先用GET,POST的难度会更高。此回答整理自钉群“阿里云 OpenAPI SDK 自签名服务群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。