生成腾讯云的鉴权签名的 Python 代码,一直验证失败,有没有使用过的大佬帮忙看一下?

2018-05-05 14:10:56 +08:00
 Nick2VIPUser

根据文档提供的方法生成签名后,请求 API 一直返回 4100-验证失败。
有没有用过的大佬帮忙看看哪里出了问题?
参考的文档是这个: https://cloud.tencent.com/document/api/271/2053

谢谢

import requests
import os
import time
import random
import urllib.parse
import hashlib
import hmac
import base64


# HmacSHA256 加密算法
def Hmac_SHA256(string, key):
    string_b = bytes(string, encoding="utf-8")
    key_b = bytes(key, encoding="utf-8")
    signature = base64.b64encode(hmac.new(key=key_b, msg=string_b, digestmod=hashlib.sha256).digest())
    return signature.decode("utf-8")


# 请求 API
def req_api():
    # 生成通用参数
    nonce = str(random.randint(1, 65535))
    timestamp = str(int(time.time()))
    region = "sz"
    action = "TextSentiment"
    # 密钥
    TX_SecretKey = os.getenv("TX_SecretKey")
    TX_SecretId = os.getenv("TX_SecretId")
    # 请求方式
    method = "GET"

    # 组合字符串
    url = "wenzhi.api.qcloud.com/v2/index.php"
    params = {
        "Action": action,
        "Nonce": nonce,
        "Region": region,
        "SecretId": TX_SecretId,
        "SignatureMethod": "HmacSHA256",
        "Timestamp": timestamp,
    }
    params_string = urllib.parse.urlencode(params)
    src_string = "{}{}?{}".format(method, url, params_string)
    print(src_string)
    # 使用 hamxsha256+base64 生成签名
    sign_string = Hmac_SHA256(src_string, TX_SecretKey)
    print("Signature is {}".format(sign_string))

    url = "https://wenzhi.api.qcloud.com/v2/index.php"
    params = {
        "Action": action,
        "Nonce": nonce,
        "Region": region,
        "SecretId": TX_SecretId,
        "Timestamp": timestamp,
        "Signature": sign_string,
        "content": "双万兆服务器就是好,只是内存小点",
    }

    response = requests.get(url, params=params, verify=False)
    print(response.text)

if __name__ == '__main__':
    req_api()
5710 次点击
所在节点    云计算
8 条回复
tencentcloud
2018-05-05 16:03:22 +08:00
楼主您好,收到您的反馈啦,如您方便,关于报错 4100-验证失败的问题,欢迎您登录官网控制台提交工单,会有专家为您高效解决。感谢您的反馈与支持。
Nick2VIPUser
2018-05-05 16:31:37 +08:00
@tencentcloud 好的,谢谢🙏
GoLand
2018-05-05 16:43:10 +08:00


用文档里给的数据试了下。参数排序那步你就漏了。
zyxbcde
2018-05-05 17:54:19 +08:00
腾讯云有 sdk 啊,好像用起来挺简单的。
Nick2VIPUser
2018-05-05 20:51:32 +08:00
@GoLand 谢谢!确实漏掉了,我再试一下!
Nick2VIPUser
2018-05-05 20:51:50 +08:00
@zyxbcde 我去看下,谢谢哈
zjp
2018-05-05 22:29:33 +08:00
前几个星期刚写过
注意文档示例里对参数排序是不区分公共参数和接口参数的,但我发现翻译接口需要分开排序。如果还是始终签名不对,可以试试
StatLee
2018-05-07 13:10:08 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/452337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX