Skip to content

Commit d29e141

Browse files
committed
fix: retry fetch order with delay if pixel metafield not set yet
1 parent 1bacb5a commit d29e141

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

functions/routes/ecom/webhook.js

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,32 @@ exports.post = ({ appSdk }, req, res) => {
4242
/* DO YOUR CUSTOM STUFF HERE */
4343

4444
let clientUserAgent, eventID
45-
try {
46-
const { response } = await appSdk.apiRequest(storeId, `orders/${orderId}.json`)
47-
order = response.data
48-
if (order.metafields) {
49-
const metafield = order.metafields.find(({ namespace, field }) => {
50-
return namespace === 'fb' && field === 'pixel'
51-
})
52-
if (metafield) {
53-
const value = JSON.parse(metafield.value)
54-
eventID = value.eventID
55-
clientUserAgent = value.userAgent
45+
const tryFetchOrder = async (isRetry = false) => {
46+
try {
47+
const { response } = await appSdk.apiRequest(storeId, `orders/${orderId}.json`)
48+
order = response.data
49+
if (order.metafields) {
50+
const metafield = order.metafields.find(({ namespace, field }) => {
51+
return namespace === 'fb' && field === 'pixel'
52+
})
53+
if (metafield) {
54+
const value = JSON.parse(metafield.value)
55+
eventID = value.eventID
56+
clientUserAgent = value.userAgent
57+
} else if (!isRetry) {
58+
return new Promise((resolve) => {
59+
setTimeout(() => {
60+
tryFetchOrder(true).then(resolve)
61+
}, 5000)
62+
})
63+
}
5664
}
65+
} catch (err) {
66+
logger.error(err)
5767
}
58-
} catch (e) {
68+
return true
5969
}
70+
await tryFetchOrder()
6071

6172
// https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api#send
6273
const fbPixelId = appData.fb_pixel_id

0 commit comments

Comments
 (0)