开发者社区> 问答> 正文

通过阿里云OpenAPI发送短信该如何构造字符串?

v3签名里,有关于规范化查询字符串的构造方法,没有关于payload body的字符串构造方法,如果我用的是post方法,content-type 是json,通过阿里云OpenAPI发送短信该如何构造字符串?

展开
收起
三分钟热度的鱼 2024-04-25 08:40:11 24 0
2 条回答
写回答
取消 提交回答
  • 是个只会写bug的程序媛啊!!!

    阿里云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请求发送的部分代码
    
    2024-04-26 11:19:44
    赞同 展开评论 打赏
  • POST方法字段也可放在query,不需要body,建议先用GET,POST的难度会更高。此回答整理自钉群“阿里云 OpenAPI SDK 自签名服务群”

    2024-04-25 09:04:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云云原生 Serverless 技术实践营 PPT 演讲 立即下载
阿里云产品十月刊 立即下载
基于阿里云构建博学谷平台实时湖仓 立即下载