Shopify -使用PHP通过元字段API更新/删除元字段


Shopify - Update/Delete metafield via metafield API using PHP

我一直在尝试更新或删除我通过shopify客户API在用户注册时创建的元字段。

起初我试图使用客户API更新元字段,但它告诉我元字段已经存在,我不能再添加它。

然后我使用用户ID并使用metafield API调用检索链接到用户的所有metafield -这工作,它为我返回了所有metafield。

然而,当我想删除或更新我创建的元字段时,我的问题开始了。

我已经尝试了很多不同的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';

你知道我哪里搞砸了吗?

第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;

这段代码允许我为一个没有它的用户创建一个元字段以及更新这个元字段,只要键字段和命名空间使它唯一,它就会创建一个新字段,如果你使用一个已经存在的键和命名空间,它将更新值。

我希望这能帮助到其他人。

我做这个调用,它每次都工作完美:

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

我的客户ID是123456789,我要删除的元字段ID是987654321

第一部分完成-删除

在做了大量的研究并尝试了不同的脚本片段后,以下内容对我有用:

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

我现在可以删除元字段