2016-05-21 11 views
0

Google App Scriptを使用して、Woocommerce Webhookの入力JSONをGoogle Spreadsheetに解析しようとしています。WooCommerce webhook parsing

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のシートに何も受け取らない:

は、このいずれかを使用します。


そして持つ

この1:これは、データを受信して​​いますが、それは解析されていない

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

はこれを修正し、閲覧可能なシートにデータを作るためにとにかくあり?

ありがとうございます。

答えて

0

私はwoocommerceが解析されていないウェブフック理由主なものは、WCは、スプレッドシートのマクロにそれを送信するときにJSONが有効ではないということですアレクサンドル・イワノフへhttps://ru.stackoverflow.com/ おかげ

で私の質問に答えを発見しました。

とシート1つの要素{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); 
}