Shopify - Update/Delete 元字段通过元字段 API 使用 PHP
Shopify - Update/Delete metafield via metafield API using PHP
我一直在尝试更新或删除我通过 shopify 客户在用户注册时创建的元字段 API。
起初我尝试使用客户 API 更新元字段,但它告诉我元字段已经存在,我无法再次添加它。
然后我使用用户 ID 并调用以使用元字段 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';
知道我哪里搞砸了吗?
我打了这个电话,每次都很完美:
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);
我现在可以删除元字段了。
第 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;
此代码允许我为没有元字段的用户创建一个元字段并更新该元字段,只要键字段和名称空间使其唯一,它将创建一个新字段,如果您使用键和命名空间已经存在,它将更新值。
我希望这对其他人有帮助。
我一直在尝试更新或删除我通过 shopify 客户在用户注册时创建的元字段 API。
起初我尝试使用客户 API 更新元字段,但它告诉我元字段已经存在,我无法再次添加它。
然后我使用用户 ID 并调用以使用元字段 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';
知道我哪里搞砸了吗?
我打了这个电话,每次都很完美:
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);
我现在可以删除元字段了。
第 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;
此代码允许我为没有元字段的用户创建一个元字段并更新该元字段,只要键字段和名称空间使其唯一,它将创建一个新字段,如果您使用键和命名空间已经存在,它将更新值。
我希望这对其他人有帮助。