Join us for an upcoming Shopify Partner webinar on February 27, 2024. Discover the latest Checkout Extensibility features, and deep dive on improvements to Shopify Functions and Web Pixels. Register now for either the 10am EST or 2pm EST sessions.
Solved

receiving error message "Add at least 1 product" when creating custom draft order

desmonic
Shopify Partner
2 0 0

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]);

	}
    
}

 

 

 

 

 

 

 

Accepted Solution (1)

lizk
Shopify Staff
246 57 67

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.

View solution in original post

Reply 1 (1)

lizk
Shopify Staff
246 57 67

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.