Discussing APIs and development related to customers, discounts, and order management.
I am getting error {"errors":{"base":["Add at least 1 product"]}} when trying to create a draft order using the Rest API Curl code below. The customer id is correct. I am not sure what I am missing here?
$shop = "xxxxxx.myshopify.com";
$token = "xxxxxxxxxxxxxxxx";
$query = array(
"Content-type" => "application/json"
);
$draft_param = array(
"draft_order" =>array(
"line-items" => array(
"title" => "Toy Ball",
"price" => "10.00",
"quantity" => 1,
"custom" => true,
),
"customer" => array(
"id" => 1655457444313,
),
"use_customer_default_address" => true
)
)
;
$draftorder = shopify_call($token, "$shop", "/admin/api/2023-07/draft_orders.json",
$draft_param, 'POST');
Here is the functions.php file with Curl code.
function shopify_call($token, $shop, $api_endpoint, $query = array(), $method = 'GET', $request_headers = array()) {
// Build URL
$url = "https://" . $shop . $api_endpoint;
if (!is_null($query) && in_array($method, array('GET', 'DELETE'))) $url = $url . "?" . http_build_query($query);
// Configure cURL
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_MAXREDIRS, 3);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 3);
// curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_USERAGENT, 'My New Shopify App v.1');
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
// Setup headers
$request_headers[] = "";
if (!is_null($token)) $request_headers[] = "X-Shopify-Access-Token: " . $token;
curl_setopt($curl, CURLOPT_HTTPHEADER, $request_headers);
if ($method != 'GET' && in_array($method, array('POST', 'PUT'))) {
if (is_array($query)) $query = http_build_query($query);
curl_setopt ($curl, CURLOPT_POSTFIELDS, $query);
}
// Send request to Shopify and capture any errors
$response = curl_exec($curl);
$error_number = curl_errno($curl);
$error_message = curl_error($curl);
// Close cURL to be nice
curl_close($curl);
// Return an error is cURL has a problem
if ($error_number) {
return $error_message;
} else {
// No error, return Shopify's response by parsing out the body and the headers
$response = preg_split("/\r\n\r\n|\n\n|\r\r/", $response, 2);
// Convert headers into an array
$headers = array();
$header_data = explode("\n",$response[0]);
$headers['status'] = $header_data[0]; // Does not contain a key, have to explicitly set
array_shift($header_data); // Remove status, we've already set it above
foreach($header_data as $part) {
$h = explode(":", $part);
$headers[trim($h[0])] = trim($h[1]);
}
// Return headers and Shopify's response
return array('headers' => $headers, 'response' => $response[1]);
}
}
Solved! Go to the solution
This is an accepted solution.
Hi there 👋
You will want to double check the formatting of your draft_param.
The key should be line_items not line-items.
To learn more visit the Shopify Help Center or the Community Blog.
This is an accepted solution.
Hi there 👋
You will want to double check the formatting of your draft_param.
The key should be line_items not line-items.
To learn more visit the Shopify Help Center or the Community Blog.