我需要帮助将WooCommerce集成到Google表格中,通过Web钩子实现。

huangapple go评论109阅读模式
英文:

I need help for woocommerce integration in google sheet through web hook

问题

我只附上了我的WooCommerce,通过Webhook在Google表格中获取了一些代码,并从互联网上获取了一些代码,以便在每一件事情都看起来很好,但只有一个产品名称可用,即使订单包含多个产品。您可以在订单创建时检查Webhook数据这里。以下是我的Google表格脚本代码:

//这是一个在Web应用程序收到GET请求时触发的函数
function doGet(e) {
  return HtmlService.createHtmlOutput("请求已收到");
}

//这是一个在Web应用程序收到POST请求时触发的函数
function doPost(e) {
  var myData = JSON.parse(e.postData.contents);
  var order_created = myData.date_created;
  var product_name = myData.line_items[0].name;
  var itemName = myData.line_items[0].name;
  var quantity = myData.line_items[0].quantity;
  var product_items = quantity + " x " + itemName + "\n";
  var product_qty = myData.line_items[0].quantity;
  var order_total = myData.total;
  var billing_email = myData.billing.email;
  var billing_first_name = myData.billing.first_name;
  var billing_phone = myData.billing.phone;
  var shipping_address = myData.shipping.address_1;

  var timestamp = new Date();
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow([timestamp, order_created, billing_first_name, billing_phone, shipping_address, product_name, product_qty, order_total, billing_email, product_items]);
}
英文:

I just attach my woocommerce through webhook in google sheet and get some code from internet for getting orders data on it every things looks fine but there is only one product name available even if the order contain more than one products.You can check the webhook data here when order is created. here is my google sheet script code

    //this is a function that fires when the webapp receives a GET request
function doGet(e) {
  return HtmlService.createHtmlOutput("request received");
}

//this is a function that fires when the webapp receives a POST request
function doPost(e) {
  var myData = JSON.parse([e.postData.contents]);
  var order_created      = myData.date_created;
  var product_name       = myData.line_items[0].name;
  var itemName = myData.line_items[0].name;
  var quantity = myData.line_items[0].quantity;
  var product_items      = quantity + " x " + itemName + "\n"; 
  var product_qty        = myData.line_items[0].quantity;
  var order_total        = myData.total;
  var billing_email      = myData.billing.email;
  var billing_first_name = myData.billing.first_name;
  var billing_phone      = myData.billing.phone;
  var shipping_address   = myData.shipping.address_1;
  
  var timestamp = new Date();
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow([timestamp,order_created,billing_first_name,billing_phone,shipping_address,product_name,product_qty,order_total,billing_email,product_items]);
}

答案1

得分: 1

以下是您要翻译的内容:

"你试图循环遍历包含多个行项目的JSON交易数据。

您的代码中存在两个缺陷:

1 - 脚本没有循环遍历产品项目:
var product_name = myData.line_items[0].name; var itemName = myData.line_items[0].name; var quantity = myData.line_items[0].quantity; var product_items = quantity + " x " + itemName + "\n"; var product_qty = myData.line_items[0].quantity;

您正在获取line_items[0],但如果交易中有多个行项目,则只返回第一个行项目。

2 - 在sheet.appendRow()中附加的变量需要重新考虑。

您的代码指定了十个变量,包括product nameproduct quantity。但是,这两个变量没有唯一的值,因为它们是行项目的一部分,并且随着交易中的每个行项目而变化。

您的变量product_items试图通过连接每个行项目的详细信息来识别这一点;但是该变量失败,因为它依赖于循环遍历line_items并逐渐连接行项目值。

以下代码是如何实现您的目标的示例:


function doPost(e) {
var myData = JSON.parse([e.postData.contents]);
  var timestamp = new Date();
  var order_created = myData.date_created; 
  var billing_first_name = myData.billing.first_name;
  var billing_phone = myData.billing.phone;
  var billing_email = myData.billing.email;
  var shipping_address = myData.shipping.address_1;
  var order_total = myData.total;
 
  var lineitems=""
  for (i in myData.line_items)
  {
    var product_name       = myData.line_items[i].name;
    var itemName = myData.line_items[i].name;
    var quantity = myData.line_items[i].quantity;
    var linetotal = myData.line_items[i].total;
    var product_items      = quantity + " x " + itemName + ":$"+linetotal +"\n"; 
    var lineitems =lineitems+product_items;
  }

  Logger.log("Timestamp: "+timestamp);
  Logger.log("Order created: "+order_created);
  Logger.log("Billing first name: "+billing_first_name+", Phone: "+billing_phone+", Email: "+billing_email);
  Logger.log("Shipping Address: "+shipping_address)
  Logger.log("Line items = "+lineitems);
  Logger.log("Order Total: "+order_total)
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow([timestamp,order_created,billing_first_name,billing_phone,shipping_address,order_total,billing_email,lineitems]);
}"
英文:

You are trying to loop through sone JSON transaction data that includes multiple line items.

There are two flaws in your code:

1 - the script does not loop through the product items:

var product_name = myData.line_items[0].name;
var itemName = myData.line_items[0].name;
var quantity = myData.line_items[0].quantity;
var product_items = quantity + " x " + itemName + "\n";
var product_qty = myData.line_items[0].quantity;

You are getting line_items[0], but if there are multiple line items in the transaction then you are only ever returning the first line item.

2 - The variables being appended in sheet.appendRow() need to be re-considered.

Your code specifies ten variables, including product name and product quantity. However there are no unique values for these two variables since they are form part of the line items and vary with each line item in the transaction.

Your variable product_items is an attempt to recognise this by concatenating the details for each line item; however the variable fails because it depends on looping through the line_items AND progressively concatenating line item values.

The following code is an example of how you might achieve your outcome:


function doPost(e) {
var myData = JSON.parse([e.postData.contents]);
  var timestamp = new Date();
  var order_created = myData.date_created; 
  var billing_first_name = myData.billing.first_name;
  var billing_phone = myData.billing.phone;
  var billing_email = myData.billing.email;
  var shipping_address = myData.shipping.address_1;
  var order_total = myData.total;
 
  var lineitems=""
  for (i in myData.line_items)
  {
    var product_name       = myData.line_items[i].name;
    var itemName = myData.line_items[i].name;
    var quantity = myData.line_items[i].quantity;
    var linetotal = myData.line_items[i].total;
    var product_items      = quantity + " x " + itemName + ":$"+linetotal +"\n"; 
    var lineitems =lineitems+product_items;
  }

  Logger.log("Timestamp: "+timestamp);
  Logger.log("Order created: "+order_created);
  Logger.log("Billing first name: "+billing_first_name+", Phone: "+billing_phone+", Email: "+billing_email);
  Logger.log("Shipping Address: "+shipping_address)
  Logger.log("Line items = "+lineitems);
  Logger.log("Order Total: "+order_total)
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow([timestamp,order_created,billing_first_name,billing_phone,shipping_address,order_total,billing_email,lineitems]);
}

huangapple
  • 本文由 发表于 2020年1月3日 22:05:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/59579933.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定