【发布时间】:2015-09-13 22:22:09
【问题描述】:
请查看我的 cURL 测试代码,如果您发现执行它没有更新我的产品变体库存的任何原因,请告诉我。只有一种产品具有其变体数据,没有单独的产品变体。所以它应该很简单,对吧?
cURL 已安装并且在我的盒子上运行良好,并且 API 密钥/令牌也已验证。
这是我的代码
//Set up access
$apiKey = "[my api key]";
$pwd = "[my pwd]";
$baseUrl = $apiKey . $pwd ."@sensible-herbs.myshopify.com/admin/";
//Set up test data
$variantId = '3744859331';
$inventoryQty = '50';
//Set up JSON payload
$payload = array (
"variant" => array("id" => $variantId,
" nventory_quantity" => $inventoryQty
)
);
$payload = json_encode($payload, JSON_NUMERIC_CHECK);
echo 'JSON payload: ' .$payload ."<p>";
$putUrl = $baseUrl ."variants/" ."$variantId".".json";
echo 'url: ' .$putUrl ."<hr>";
$session = curl_init();
curl_setopt($session, CURLOPT_URL, $putUrl);
curl_setopt($session, CURLOPT_CONNECTTIMEOUT, 30); //seconds to allow for connection
curl_setopt($session, CURLOPT_TIMEOUT, 30); //seconds to allow for cURL commands
curl_setopt($session, CURLOPT_HEADER, true); //include header info in return value ?
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); //return response as a string
curl_setopt($session, CURLOPT_PUT, 1);
curl_setopt($session, CURLOPT_POSTFIELDS, $payload);
curl_setopt($session, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json'));
$data = curl_exec($session);
print_r(curl_getinfo($session));
curl_close($session);
echo $data; // session data
我得到的回应是:
数组 ( [url] => https://[apikey+password]@sensible-herbs.myshopify.com/admin/variants/3744859331.json [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0 [ redirect_count] => 0 [total_time] => 0.156 [namelookup_time] => 0.078 [connect_time] => 0.156 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 [certinfo] => Array () [primary_ip] => 23.227.38.71 [primary_port] => 443 [local_ip] => 192.168.0.10 [local_port] => 50573 [redirect_url] => )
所以看起来它正在连接,但是负载没有被 PUT...或者我只是不明白 API / URL 要求是什么...我需要设置 APIKey 生成以外的设置...我希望我知道!
在此先感谢您的赞!
凯拉斯
【问题讨论】:
-
echo curl_error($session);返回什么? -
感谢您的调试建议。我不确定检索有用信息的最佳方式。它说:SSL证书问题,验证CA证书是否正常。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
-
我添加了: curl_setopt($session, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($session, CURLOPT_SSL_VERIFYHOST, false);并消除了 SSL 错误
-
我可以执行 GET 并获取我的 Product Variant 数据。但是 PUT 不会改变我的 Product Variant 库存数量。
-
我也得到:{"errors":{"variant":"必需参数丢失或无效"}}