WooCommerce webhook解析

时间:2016-05-21 10:47:35

标签: php json wordpress google-apps-script woocommerce

尝试通过Google App Script将Woocommerce Webhook中的输入JSON解析为Google电子表格。

使用这个:

function doPost(request) {     

var json = request.postData.getDataAsString(); 
var obj = JSON.parse(json);     


// getting some of the Woocommerce data just as an example
// Hook was fired after order.created
var id = obj.order.id;
var orderNumber = obj.order.order_number;
var payMethod = obj.order.payment_details.method_title;    


// write data in a document, not useful, but straightforward for testing   

var doc =     DocumentApp.openById('myDocumentId');
doc.appendParagraph("Id: " + id);
doc.appendParagraph("orderNumber: " + orderNumber);
doc.appendParagraph("payMethod: " + payMethod);

}

但在Google表格中没有任何内容。

有了这个:

function doPost(request) {

  var content = JSON.parse(request.postData.contents);

  var row = [];
  for (var elem in content) {
      row.push(content[elem]);
  }

  var ss = SpreadsheetApp.openById("SHEET ID")
  var sheet = ss.getSheetByName("Sheet1");
  sheet.appendRow(row);

  var result = {"result":"ok"};

  return ContentService.createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON);
}

它正在接收数据,但未对其进行解析:

import json

有没有解决这个问题,并且可以在工作表中查看数据?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我在https://ru.stackoverflow.com/找到了我的问题的答案 感谢 Alexander Ivanov

为什么woocommerce webhook未被解析的主要原因是当WC将其发送到电子表格宏时,JSON无效。

并将表单张贴为一个元素{order:{}}

所以我们需要像这样编辑代码:

var content = JSON.parse(request.postData.contents)[0];

或者像这样(在我的情况下):

var content = JSON.parse(request.postData.contents)['order'];

如果我们不知道将收到哪些数据,我们可能会尝试确定值:

function doPost(request) {
  var result = {
    result: undefined
  };
  try {
    var content = JSON.parse(request.postData.contents);
    var row = [];
    if (content.hasOwnProperty('order')) {
      for (var elem in content['order']) {
        row.push(content['order'][elem]);
      }
    } else {
      row.push(request.postData.contents);
    }
    var ss = SpreadsheetApp.openById('SHEET ID')
    var sheet = ss.getSheets()[0];
    sheet.appendRow(row);
    result.result = 'ok';
  } catch (err) {
    result.result = 'err';
  }
  return ContentService.createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON);
}