2015-05-22 6 views
2

Я застрял, пытаясь обновить или удалить метафилд, который я создал при регистрации пользователя, с помощью API клиента shopify.Shopify - обновить/удалить метафилд через API metafield с помощью PHP

Сначала я попытался обновить метафилд, используя API-интерфейс клиента, но он сказал мне, что метафилд уже существует, и я не могу добавить его снова.

Затем я использовал идентификатор пользователя и сделал звонок, чтобы получить все метафили, связанные с пользователем, используя API метафила - это сработало, и оно вернуло мне все метафили.

Однако моя проблема начинается, когда я хочу либо удалить, либо обновить метафилд, который я создал.

Я пробовал много разных вариантов звонков REST, но ничего не работает.

Чтобы попытаться удалить я использовал:

$baseUrl = "https://".$apikey.":".$password."@".$hostname."/admin/"; 
...... 
$curl = curl_init($baseUrl.'metafields/'.$metaID.'.json'); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

// Make the REST call, returning the result 
$response = curl_exec($curl); 
var_dump($response); 

Это ничего не делать, так что я пытался идти уровень глубже и используется следующий URL:

$curl = curl_init($baseUrl.'customers/'.$custID.'/metafields/'.$metaID.'.json'); 

Этот URL не работает либо ,

Тогда я решил, что я мог бы просто попробовать и обновить метафилд до нового значения, которое оно должно было иметь.

Затем я попытался попытался следующие обновить значение:

$metafield = array('metafields' => array(array(
       'id' => $metaID, 
       'value' => '3', 
       'value_type' => 'string', 
      ))); 

$curl_url = $baseUrl.'customers/'.$custID.'/metafields/'.$metaID.'.json'; 

$ch = curl_init($curl_url); 
$data_string = json_encode(array('metafield'=>$metafield)); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-Type: application/json', 
     'Content-Length: ' . strlen($data_string)) 
); 
$server_output = curl_exec ($ch); 
curl_close ($ch); 
var_dump($server_output); 

После этого я попробовал альтернативный URL:

$curl_url = $baseUrl.'metafields/'.$metaID.'.json'; 

Любая идея, где я напутал?

ответ

1

Часть 2 работает сейчас - создание и обновление метафила Итак, после написания и тестирования различных наборов кода у меня есть что-то для работы.

$data = array('metafield' => 
     array(
       'key' => 'level', 
       'value' => '1', 
       'value_type' => 'string',    
       'namespace' => 'Wholesaler' 
      ) 
    ); 
    $curl_url = $baseUrl.'customers/'.$custID.'/metafields.json'; 
    //$ch = curl_init($baseUrl.$sid.'.json'); //set the url 

$session = curl_init($curl_url); 

curl_setopt($session, CURLOPT_HEADER, false); 
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($session, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: POST')); 
curl_setopt($session, CURLOPT_POSTFIELDS, json_encode($data)); 

curl_setopt($session, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($session, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

if(ereg("^(https)",$curl_url)) curl_setopt($session,CURLOPT_SSL_VERIFYPEER,false); 

$response = curl_exec($session); 
curl_close($session); 

$json = json_decode($response, true); 

var_dump($json); 
echo "<br>-------------------------------------------------<br>"; 
echo $curl_url; 

Этот код позволил мне создать metafield для пользователя, которые не имеют его, а также обновлений, metafield, до тех пор, как ключевое поле и пространство имена делает его уникальным будет создать новое поле, если вы используйте уже существующий ключ и пространство имен, которое обновит значение.

Я надеюсь, что это поможет кому-то еще.

+0

Вы должны объединить два ответа (отредактируйте один и удалите другой). Нет никакой ценности, чтобы их разделить. –

1

Я делаю это вызов, и он отлично работает каждый раз:

DELETE /admin/customers/123456789/metafields/987654321.json 

Где мой идентификатор клиента 123456789 и metafield Я хочу убить имеет ID 987654321

+0

Привет, Дэвид, Спасибо за ваш ответ.Являются ли опции cURL, которые я использую, неправильно или мне что-то не хватает? – NBV

+0

Я получил свою функцию удаления, теперь мне просто нужно заставить функцию update/put работать, поскольку в настоящее время она не дает мне ошибку, но она просто выгружает метафайлы, как это было без обновления. – NBV

0

Часть первая делается - Удалить

После многих исследований и попыток использования разных сценариев для меня работали:

$curl_url = $baseUrl.'customers/'.$custID.'/metafields/'.$metaID.'.json'; 
//$curl_url = $baseUrl.'metafields/'.$metaID.'.json'; 

    $session = curl_init($curl_url); 

    curl_setopt($session, CURLOPT_HEADER, false); 
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 

    curl_setopt($session, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
    curl_setopt($session, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

    if(ereg("^(https)",$curl_url)) curl_setopt($session,CURLOPT_SSL_VERIFYPEER,false); 

    $response = curl_exec($session); 
    curl_close($session); 

    $json = json_decode($response, true); 

    var_dump($json); 

Теперь я могу удалить метафилд.

Смежные вопросы