编辑Body Mapping模板以将Woocommerce webhooks传递给API Gateway

问题描述 投票:0回答:1

我一直试图让Woocommerce webhook通过API网关并输出控制台中输出的各个数据。问题是,我只是无法正确配置Body Mapping模板以将正文传递给Lambda函数。我最终想要将这些事件对象传递给DynamoDB,但我现在只是在控制台中记录它们。

使用标准webhook主体时,使用http://myjson.com/18afwp等示例,使用AWS Lambda中的测试事件正常输出正文数据

这是我的Lambda代码

exports.handler = (event, context, callback, err) => {
callback(null, event.order_key);
if (err) console.log('JSON Pass Fail');  // an error occurred
else     console.log(event.order_key); // successful response
};

显示结果:“wc_order_5a64ab355c2b2”并再次在控制台日志中2018-01-22T21:45:22.560Z 8c417061-ffgd-11e7-805b-f57d6e6be228 wc_order_5a64ab355c2b2

对于身体映射模板,我尝试了一些变体,但确定了标准方法请求Passthrough,但我认为身体部分只需要调整以允许身体通过。以下是标准人体映射模板https://pastebin.com/gjZaxBTW的内容

在Cloudwatch中,当发送Woocommerce webhook时,日志会以未定义的形式返回

amazon-web-services woocommerce aws-lambda aws-api-gateway webhooks
1个回答
0
投票

经过多次尝试,成功的人体映射模板如下所示,它将标题和正文数据传递给Lambda。然后可以使用event.body.order_key格式访问这些对象。

我最初尝试在Webhooks下添加Woocommerce管理员中显示的每一行标题,显示Webhook输出。但是,如果您查看Cloudwatch日志,您会看到Cloudfront添加了额外的标题,而且Wordpress中列出的标题更多。

{
"body" : $input.json('$'),
"headers": {
    #foreach($header in $input.params().header.keySet())
    "$header": "$util.escapeJavaScript($input.params().header.get($header))" #if($foreach.hasNext),#end

    #end
}
}

这使用Request Body Passthrough选项

When there are no templates defined (recommended)
© www.soinside.com 2019 - 2024. All rights reserved.