代码之家  ›  专栏  ›  技术社区  ›  sigur7

编辑主体映射模板以将Woocommerce webhooks传递给API网关

  •  0
  • sigur7  · 技术社区  · 7 年前

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

    当使用标准webhook主体时,主体数据使用AWS Lambda中的测试事件输出良好,例如 http://myjson.com/18afwp

    这是我的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\U order\u 5a64ab355c2b2”和控制台日志2018-01-22T21:45:22.560Z 8c417061-ffgd-11e7-805b-f57d6e6be228 wc\U order\u 5a64ab355c2b2

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

    在Cloudwatch中,当发送Woocommerce webhook时,日志返回为未定义

    1 回复  |  直到 7 年前
        1
  •  0
  •   sigur7    7 年前

    经过多次尝试,下面显示了成功的主体映射模板,该模板将标题和主体数据传递给Lambda。然后可以使用访问这些对象 event.body.order_key 总体安排

    我最初尝试将Woocommerce admin中显示的每一行标题添加到显示Webhook输出的Webhooks下。但是,如果您查看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
    }
    }
    

    这使用 请求正文传递 选项

    When there are no templates defined (recommended)