填写类型表时签名令牌出错

error with signature token when filling a typeform

我正在学习 Python 并尝试使用 Python 请求填写类型表单,但是我收到此错误响应:

{"code":"VALIDATION_ERROR","description":"The provided body is malformed.","details":[{"code":"INVALID_PAYLOAD","description":"signature mismatch","in":"BODY","field":".signature"}]}

但是,当我将 token.text 值手动输入 data 时,它起作用了。以编程方式将令牌添加到有效负载时,我无法使其正常工作,即使尝试使用 str() 也无法正常工作。

代码如下:

import requests
import time

epochTime = int(time.time())
token = requests.get("https://mehdikhireddine.typeform.com/app/form/result/token/OcotDC/default")
final = token.text
print(token.text)
data = { "signature": final,
         "form_id": "OcotDC",
         "landed_at": epochTime,""
         "answers": [
        {
            "field": {
                "id": "nDoisfzMsrBP",
                "type": "short_text"
            },
            "type": "text",
            "text": "mehdilemoi"
        },
        {
            "field": {
                "id": "iCW4s6Fc37OL",
                "type": "legal"
            },
            "type": "boolean",
            "boolean": True
        }

    ]
}
r = requests.post("https://mehdikhireddine.typeform.com/app/form/submit/OcotDC", json=data)
print(r.text)

如果您在从 HTTPS 响应中获取 token 之前存储 epochTime,就会出现此问题,可能是因为服务器无法匹配签名和时间,导致 "signature mismatch" .

您可以通过在收到 token 响应后 当前时间 来解决此问题,即:

token = requests.get("https://mehdikhireddine.typeform.com/app/form/result/token/OcotDC/default")
epochTime = int(time.time())

输出:

{"message":"success"}

请注意,如果在获得响应和获得 epochTime 之间的时间过长,这可能仍会间歇性地失败。