Hi all, I am trying to create a code step that does the following:
- Takes input data from a Shopify order
- Identifies which line items in the order are personalized
- Converts PDFs associated with these line items to JPG (via ConvertAPI)
- Submits a new order to the Printify API using the newly converted files
I keep getting an “output undefined” error in my code step. I have read that it’s possible to use “return” rather than “output”. I’d prefer to do this as I can’t quite work out how to get output to await the completion of an async function within my code step. If there’s a better way to ensure the entire code step is waiting until both async functions are completed, please let me know. Thank you in advance! (Sensitive data has been removed, and I am providing example inputData that doesn’t exist in the actual code)
//input data
var inputData = {
order_number : "1234",
shopify_id : "123456789",
line_item_name : "Personalized Item 1, Item 2, Personalized Item 3",
line_item_sku : "P-2-50-33728-ME01, 21212391028-12345, P-2-50-33726-ME01",
line_item_fulfillment : "manual, printify, manual",
line_item_properties : "12345,123456789-abcdefg123456789,https://www.google.com/,1,https://www.google.com/google.jpg,https://www.google.com/google.svg,2,12346,123456789-abcdefg123456790,https://www.google.com/,1,https://www.google.com/google.jpg,https://www.google.com/google.svg,2",
shipping_fname : "John",
shipping_lname : "Johnson",
shipping_email : "john@email.com",
shipping_phone : "800.555.5555",
shipping_country : "US",
shipping_region : "VA",
shipping_address1 : "1234 Main St",
shipping_address2 : "Apt 2",
shipping_city : "Richmond",
shipping_zip : "23223",
};
//prefixes
var personalized_prefix = "Prs-"
var non_personalized_prefix = "NonPrs-"
var custom_image_url_prefix = 'https://fpd-shopify-v2.herokuapp.com/api/fe/line_item_cache_print_pdf/'
//create arrays
var sku_array = inputData.line_item_sku.split(", ");
var properties_array = inputData.line_item_properties.split(",");
//count personalized items
var personalized_skus = sku_array.filter(function (sku) {
return skuk0].toLowerCase() === 'p';
});
//If there are no personalized items, end script
if (personalized_skus.length = 0) {
throw new Error("No Personalized Items");
}
//Begin Image Conversion
var image_url = new Array();
var requestOptions = {
method: 'POST',
redirect: 'follow'
};
personalized_skus.forEach(async(personalized_sku, index) => {
let pdf_url = custom_image_url_prefix.concat(properties_arrayc(7 * index) + 1]);
const response = await fetch(`httpsdo.convertapi.com//Pdf2Image?ApiKey=1234abcd5678efgh&File=${pdf_url}&ImageResolutionH=300&ImageResolutionV=300&JpgQuality=100&OutputFormat=jpg&StoreFile=true&Timeout=900`, requestOptions)
.then(response => console.log(response))
.then(result => image_url(index] = result)
.catch(error => console.log('error', error))
});
//build json for printify order
var printify_order = {};
//Shopify order ID and order number
printify_order.external_id = personalized_prefix.concat(inputData.shopify_id);
printify_order.label = personalized_prefix.concat(inputData.order_number);
//add personalized products
printify_order.line_items = new Array();
personalized_skus.forEach((personalized_sku, index) => {
let p_sku_split = personalized_sku.split("-");
printify_order.line_itemsiindex] = {
print_provider_id : p_sku_splito1],
blueprint_id : p_sku_splite2],
variant_id : p_sku_splita3],
print_areas: {
front: image_urlrindex]
}
}
});
//Add shipping information
printify_order.shipping_method = 1;
printify_order.send_shipping_notification = false;
printify_order.address_to = {};
printify_order.address_to.first_name = inputData.shipping_fname;
printify_order.address_to.last_name = inputData.shipping_lname;
printify_order.address_to.email = inputData.shipping_email;
printify_order.address_to.phone = inputData.shipping_phone;
printify_order.address_to.country = inputData.shipping_country;
printify_order.address_to.region = inputData.shipping_region;
printify_order.address_to.address1 = inputData.shipping_address1;
printify_order.address_to.address2 = inputData.shipping_address2;
printify_order.address_to.city = inputData.shipping_city;
printify_order.address_to.zip = inputData.shipping_zip;
var json_order = JSON.stringify(printify_order);
var requestOptionsPrintify = {
method: 'POST',
headers: {
"Content-type" : "application/json",
"Authorization" : "Bearer abcd1234efgh5678"
},
body: json_order,
redirect: 'follow'
};
async function sendOrder() {const response = await fetch("https://api.printify.com/v1/shops/12345678/orders.json", requestOptionsPrintify)
.then(response => {
if (response.status !== 200) {
throw new Error(`Unexpected status code ${response.status}`);
} else {
return response;
}
}
)
}