2
votes

I am trying following code to insert metafield value to a product. But it giving

" HTTP/1.1 422 Unprocessable Entity Server: nginx Date: Tue, 21 Aug 2012 20:23:46 GMT Content-Type: application/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Status: 422 Unprocessable Entity X-Shopify-Shop-Api-Call-Limit: 1/500 HTTP_X_SHOPIFY_SHOP_API_CALL_LIMIT: 1/500 Location: http://gmdtest.myshopify.com/admin/metafields Cache-Control: no-cache X-Request-Id: f25240474fd6f2868e24b9962c6c2d60 X-UA-Compatible: IE=Edge,chrome=1 X-Runtime: 0.108680 Namespace can't be blank Namespace is too short (minimum is 3 characters) Key can't be blank Key is too short (minimum is 3 characters) Value can't be blank Value type can't be blank Value type is not included in the list

" error. Any help will be appreciated.

Thanks

<?php

class cURL {
var $headers;
var $user_agent;
var $compression;
var $cookie_file;
var $proxy;
//var $CURLOPT_SSL_VERIFYHOST;
function cURL($cookies=TRUE,$cookie='cookies.txt',$compression='gzip',$proxy='') {
$this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
$this->headers[] = 'Connection: Keep-Alive';
$this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
$this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)';
$this->compression=$compression;
$this->proxy=$proxy;
$this->cookies=$cookies;
//$this->CURLOPT_SSL_VERIFYHOST = 1;

if ($this->cookies == TRUE) $this->cookie($cookie);
}
function cookie($cookie_file) {
if (file_exists($cookie_file)) {
$this->cookie_file=$cookie_file;
} else {
fopen($cookie_file,'w') or $this->error('The cookie file could not be opened. Make sure this directory has the correct permissions');
$this->cookie_file=$cookie_file;
//fclose($this->cookie_file);
}
}
function get($url) {
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file);
if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($process,CURLOPT_ENCODING , $this->compression);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
if ($this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
$return = curl_exec($process);
curl_close($process);
return $return;
}
function post($url,$data) {
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file);
if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($process, CURLOPT_ENCODING , $this->compression);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
if ($this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy);
curl_setopt($process, CURLOPT_POSTFIELDS, $data);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($process, CURLOPT_POST, 1);
$return = curl_exec($process);
curl_close($process);
return $return;
}
function error($error) {
echo "<center><div style='width:500px;border: 3px solid #FFEEFF; padding: 3px; background-color: #FFDDFF;font-family: verdana; font-size: 10px'><b>cURL Error</b><br>$error</div></center>";
die;
}
}
$cc = new cURL();

$data = '<?xml version="1.0" encoding="UTF-8"?><metafield><namespace>product_info</namespace><key>product_date</key><value type="string">21-9-2012</value><value-type>string</value-type></metafield>';


echo $cc->post('http://api_key:[email protected]/admin/products/47140632/metafields.xml',$data);



?> 
1

1 Answers

1
votes

You set your content type to form encoded instead of XML so we are parsing your request incorrectly.