使用Cloud Functions将Json Webhook写入Cloud Firestore.云功能部署失败.函数加载



我有一个Webhook,它提供一个复杂的JSON有效载荷到我的云函数URL,并将JSON写入集合&

我相信Google Cloud Functions上的Node.JS Runtime使用了Express Middleware HTTP框架。

我有一个WooCommerce Webhook,希望我发送一个JSON到一个URL,我相信这是一个POST http请求。

我用过Webhook。站点测试Webhook,并且显示正确的JSON有效负载。

开发人员建议我使用云函数来接收JSON,解析JSON并将其写入cloud Firestore。

// cloud-function-name = wooCommerceWebhook
exports.wooCommerceWebhook = functions.https.onRequest(async (req, res) => {
const payload = req.body;
// Write to Firestore - People Collection
await admin.firestore().collection("people").doc().set({
people_EmailWork: payload.billing.email,
});
// Write to Firestore - Volociti Collection
await admin.firestore().collection("volociti").doc("fJHb1VBhzTbYmgilgTSh").collection("orders").doc("yzTBXvGja5KBZOEPKPtJ").collection("orders marketplace orders").doc().set({
ordersintuit_CustomerIPAddress: payload.customer_ip_address,
});
// Write to Firestore - Companies Collection
await admin.firestore().collection("companies").doc().set({
company_AddressMainStreet: payload.billing.address_1,
});
return res.status(200).end();
});

如果有帮助的话,我有云功能部署失败的日志。

Function cannot be initialized. Error: function terminated. Recommended action: inspect logs for termination reason. Additional troubleshooting documentation can be found at https://cloud.google.com/functions/docs/troubleshooting#logging

我package.json:

{
"name": "sample-http",
"version": "0.0.1"
}

你需要用Firebase Admin SDK为Node.js正确定义依赖项,并初始化它,如下所示。

您还需要更改声明函数的方式:将exports.wooCommerceWebhook = functions.https.onRequest(async (req, res) => {...});改为exports.wooCommerceWebhook = async (req, res) => {...}。您使用的是通过CLI部署的Cloud Functions。

package.json

{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {    "firebase-admin": "^9.4.2"  }
}

index.js

const admin = require('firebase-admin')
admin.initializeApp();
exports.wooCommerceWebhook = async (req, res) => {  // SEE COMMENT BELOW
const payload = req.body;
// Write to Firestore - People Collection
await admin.firestore().collection("people").doc().set({
people_EmailWork: payload.billing.email,
});
// Write to Firestore - Volociti Collection
await admin.firestore().collection("volociti").doc("fJHb1VBhzTbYmgilgTSh").collection("orders").doc("yzTBXvGja5KBZOEPKPtJ").collection("orders marketplace orders").doc().set({
ordersintuit_CustomerIPAddress: payload.customer_ip_address,
});
// Write to Firestore - Companies Collection
await admin.firestore().collection("companies").doc().set({
company_AddressMainStreet: payload.billing.address_1,
});
return res.status(200).end();
};

最新更新