0

我们在无服务器 api 中有一个 POST 端点,它监听 Magento 2 集成激活回调并处理有效负载。此回调请求的 Content-Type 为application/x-www-form-urlencoded。但是,当我们尝试获取回调时,lambda 函数会立即完成执行,跳过整个函数体。我们在 Cloudwatch 日志中看到的仅此而已。甚至console.log不打印。(端点只向控制台打印一个字符串。没有异步操作。但这个问题仍然存在)

2020-12-12T12:24:47.012+05:30 START RequestId: 4afba03d-54ef-4b5e-bd44-157b0b7a9f9b Version: $LATEST
2020-12-12T12:24:47.050+05:30 END RequestId: 4afba03d-54ef-4b5e-bd44-157b0b7a9f9b
2020-12-12T12:24:47.050+05:30 REPORT RequestId: 4afba03d-54ef-4b5e-bd44-157b0b7a9f9b    Duration: 37.83 ms  Billed Duration: 38 ms  Memory Size: 128 MB Max Memory Used: 109 MB Init Duration: 893.79 ms    

当我们尝试使用 Content-Type: application/json 从 POSTMAN 访问相同的端点时,端点按预期工作。

因此,我们认为问题可能出在Content-Type标头上,并在某处读到添加请求映射模板可以解决此问题。application/x-www-form-urlencoded因此,我们甚至不时在 lambda 方法的集成请求中添加了内容类型的映射模板,内容如下。但不幸的是,我们的问题并没有解决。

"{ "body": "$util.base64Decode($input.body)" }"
{
"formparams" : $input.json('$')
}
{
    "body" : $input.json('$')
}

我的问题是:我们如何设置端点来打印 POST 请求有效负载,防止它立即退出? 一周以来,我们一直在寻找解决此问题的方法。如果有人能输入他们有用的、有价值的建议来解决这个问题,那将是一个很大的帮助。提前致谢

4

1 回答 1

0

由于Content-TypeMagento 2 集成激活回调的 是application/x-www-form-urlencoded,该 POST 请求的 lambda 事件是这样的。

console.log(event) -> {body: "a=var&b=other_var&c=another_var"}

端点甚至没有打印任何东西,因为我放了console.log(JSON.parse(event. body)). 这会导致 JSON 解析错误,并且端点会立即完成执行。

当我开始解析查询参数事件体而不是 时JSON.parse(),问题就解决了。

于 2021-01-05T01:46:38.490 回答