Google 表格未从 Woocommerce Webhook 正确接收 json 数据

Posted

技术标签:

【中文标题】Google 表格未从 Woocommerce Webhook 正确接收 json 数据【英文标题】:Google Sheets not receiving json data properly from Woocommerce Webhook 【发布时间】:2021-08-26 23:35:07 【问题描述】:

希望你们今天过得愉快。

我在我的 woocommerce 中设置了一个 webhook,用于将 JSON 数据发送到 Google 表格。 webhook 几个月来一直运行良好,就在今天,我遇到了一些麻烦。我已在接收 JSON 数据的 google 表格中跟踪问题,但我不知道为什么会发生这种情况。

让我解释一下。

https://docs.google.com/spreadsheets/d/18G-yVDjYeccl6kznpZgSuRTysRMAu57pwY2oGf6-KWI/edit?usp=sharing

这是谷歌表格,当它获取 Woocommerce JSON 数据时,它会填充一个新行。

问题

有时 google 表格在收到新订单时不会填充该行。问题不在于 woocommerce,因为我已经使用 reqbin 检查了 woocommerce,并且每个订单都会触发 webhook。

此外,当我从 reqbin.com 向我的工作表发送请求时,工作表在 10 次中成功执行了 5-6 次操作。其他时候它会显示错误。

错误

该错误是由于 google sheet 无法解析 JSON 数据,因为它收到的 JSON 数据 10 次中有 5 次不是正确的 JSON 数据。其他 5 次,就应该如此。如果工作表无法解析 JSON,我已经放置了一条 catch 语句。它不是用解析的数据附加新行,而是将接收到的原始数据附加到工作表中。

现在很明显,处理 JSON 数据的 google 表格存在一些问题,因为当相同的数据从 reqbin.com 发送到 webhook.site 时,它​​应该是完美的 10/10 次。

如何重现问题

打开这个谷歌表格。 https://docs.google.com/spreadsheets/d/18G-yVDjYeccl6kznpZgSuRTysRMAu57pwY2oGf6-KWI/edit?usp=sharing 打开 reqbin.com 和 webhook.site,然后将 reqbin.com 中的以下 JSON 发送到 webhook.site 10 次,看看是否出现任何错误。

"id": 47222, "parent_id": 0, "status": "processing", "currency": "PKR", "version": "5.1.0","prices_include_tax": false, "date_created “:“2021-06-10T01:23:46”,“date_modified”:“2021-06-10T01:23:46”,“discount_total”:“0”,“discount_tax”:“0”,“shipping_total”: “150”,“shipping_tax”:“0”,“cart_tax”:“0”,“total”:“1850”,“total_tax”:“0”,“customer_id”:0,“order_key”:“wc_order_7gIuR7px6MX9C”, “计费”: “名字”:“姓名”,“姓氏”:“”,“公司”:“”,“地址_1”:“地址”,“地址_2”:“”,“城市”:“城市”, “州”:“”,“邮政编码”:“”,“国家”:“PK”,“电子邮件”:“email@email.com”,“电话”:“1234”,“航运”:“first_name” ":"姓名","姓氏":"","公司":"","地址_1":"地址","地址_2":"","城市":"城市","州":"", “postcode”:“”,“country”:“Country”,“payment_method”:“cod”,“payment_method_title”:“货到付款”,“transaction_id”:“”,“customer_ip_address”:“8.8.8.8” , "customer_user_agent": "Mozilla/5.0 (Linux; android 11; M2102J20SG) AppleWebK it/537.36 (Khtml, like Gecko) Chrome/91.0.4472.88 Mobile Safari/537.36", "created_via": "checkout", "customer_note": "", "date_completed": null, "date_paid": null, "cart_hash" :“64d834c72eecc8e32b9d83fd67d10d9c”,“数字”:“47222”,“meta_data”:[“id”:869388,“key”:“_shipping_calculator”,“value”:“”,“id”:869389,“key” “:“is_vat_exempt”,“值”:“否”,“id”:869391,“键”:“_wfacp_report_data”,“值”:“wfacp_total”:“0.00”,“id”: 869392,“key”:“_woofunnel_cid”,“value”:“4”,“id”:869393,“key”:“_wfacp_post_id”,“value”:“24852”,“id”:869394, “键”:“_wfacp_source”,“值”:“https://website.com/checkouts/checkout-page/”,“id”:869395,“键”:“_wfacp_timezone”,“值”:“亚洲/卡拉奇" , "id": 869396, "key": "order_cmets", "value": "" , "id": 869412, "key": "_new_order_email_sent", "value": "true “,“id”:869424,“key”:“_woofunnel_custid”,“value”:“4”,“id”:869425,“key”:“_pys_purchase_event_fired”,“value”:“1” , "id": 869426, "关键”:“_wfob_stats_ids”,“价值”:[],“id”:869427,“关键”:“_wfocu_thankyou_visited”,“价值”:“是”],“line_items”:[“id”: 35114,“名称”:“MTECH 超弹性刀”,“product_id”:11074,“variation_id”:0,“quantity”:1,“tax_class”:“”,“subtotal”:“1700”,“subtotal_tax”: “0”、“total”:“1700”、“total_tax”:“0”、“taxes”:[]、“meta_data”:[]、“sku”:“”、“price”:1700、“parent_name” : null ], "tax_lines": [], "shipping_lines": [ "id": 35115, "method_title": "Fast Shipping (2-4 Days)", "method_id": "flat_rate", "instance_id" :“1”,“total”:“150”,“total_tax”:“0”,“taxes”:[],“meta_data”:[“id”:275053,“key”:“Items”,“value” ": "MTECH 超弹性刀 × 1", "display_key": "Items", "display_value": "MTECH 超弹性刀 × 1" ] ], "fee_lines": [], "coupon_lines": [], “退款”:[],“date_created_gmt”:“2021-06-09T20:23:46”,“date_modified_gmt”:“2021-06-09T20:23:46”,“date_completed_gmt”:null,“date_paid_gmt”:null , "currency_symbol": "₨","_links": "se lf": [ "href": "https://website.com/wp-json/wc/v3/orders/47222" ],"collection": [ "href": "https://website. com/wp-json/wc/v3/orders" ]

现在将相同的数据发送到以下 google 表格,看看它是否每次都正确附加了行。

https://script.google.com/macros/s/AKfycbxupm9bje86F4PQQkyys_LWtXs_kj279R0ipgnZ-cLd7aiEADf1AN_prhk28vOPW9JsRQ/exec

我该如何解决这个问题?如果您需要更多信息,请告诉我。谢谢。

编辑:

谷歌表格似乎获得了以下 JSON,而不是像上面提到的那样获得完整的 JSON 正文。

contextPath=, queryString=, parameter=, postData=FileUpload, parameters=, contentLength=3981.0

我想知道为什么 google sheet 默认参数 (e) 包含这个而不是发送给它的完整 JSON 正文。

编辑#2

我想知道为什么 google sheet 默认参数 (e) 包含这个而不是发送给它的完整 JSON 正文。

这是因为 (e) 的主体总是包含这些参数。该错误是由于 Google 表格接收到一个空的 JSON 正文。我仍然无法理解为什么会发生这种情况。当我将相同的 JSON 发送到 API 测试站点时,它们总是会收到完整的 JSON 正文。在某些情况下,Google 表格不会。这是为什么呢?

【问题讨论】:

我无法理解Open reqbin.com and webhook.site, and send the following JSON from reqbin.com to webhook.site 10 times to see if any kind of error occurs.。而且,尽管我看到了您的示例电子表格,但我无法理解您的问题。我为此道歉。为了正确理解您的问题,能否提供您期望的示例输入和输出情况? "错误是由于..." - 发生此错误时您收到的错误消息是什么?你能edit向我们展示这个问题吗? "...它收到的 JSON 数据 10 次中有 5 次不是正确的 JSON 数据。" 如果不是有效的 JSON,它是什么?你能edit向我们展示这个问题吗? 而且,是的,minimal reproducible example 可能会帮助社区更轻松地帮助您。 @Tanaike 我已经编辑了这个问题。请再看看。 【参考方案1】:

我设法通过反复试验解决了这个问题。对于将来面临同样问题的任何人,这对我有用。

我使用 e.postData.contents 来获取 JSON 正文,但这似乎已停止工作,这导致 JSON 正文为空。我试过 e.postData.getDataAsString();这似乎工作得很好,问题已经解决了。

【讨论】:

以上是关于Google 表格未从 Woocommerce Webhook 正确接收 json 数据的主要内容,如果未能解决你的问题,请参考以下文章

Google Pub/Sub - 将消息发布到主题后,未从本地函数中找到事件数据

在某些设备中从最近的应用程序中滑动应用程序时,未从 Google 功能接收到推送通知

Firebase admob 未从 pod 或服务器获取最新的 google ad mob SDK

在Google表格上更正= IMPORTXML的路径

Woocommerce 如何将优惠券表格移动到结帐页面的底部

表未从对象数组中正确填充