Square Connect库存更新cURL调用


Square-Connect Inventory Update cURL Call

我正试图从库存数据库网站更新我的方形库存,但我一直收到这个错误。

Response:{"type":"bad_request","message":"Missing required parameter `quantity_delta`"}

我将quantity_delta字段和adjustment_type添加到cURL调用中,因为文档中就是这么说的,文档中有3个选项,其中只有1个选项旁边有(可选),所以我使用了似乎是必需的2个选项。我无法捕获POST主体来确切地查看调用是如何进行的,可能是类型或json_encode问题,所以调试它会给我带来问题。

为了便于阅读,我还编写了一个文本文件的标题和响应。

这是代码:

$i = $_GET['id'];
$n = $_GET['name'];
$q = $_GET['qty'];
$s = $_GET['sku'];
$c = $_GET['current'];
$sync = $_GET['sync'];
if($c > $q){
    $up = $q - $c;
    $reason = "SALE";
}else{
    $up = $c + $q;
    $reason = "RECEIVE_STOCK";
}
$postData = array(
    "quantity_delta" => $up,
    "adjustment_type" => $reason);
$b = json_encode($postData);
$fp = fopen('curlOut.txt', 'rw+');
fopen('curlOut.txt', 'rw+');
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Bearer *****_******' ));
curl_setopt($curl, CURLOPT_URL, "https://connect.squareup.com/v1/me/inventory/".$i."");
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $b);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_STDERR, $fp);

if(!curl_exec($curl)){
    die('Error: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
}
$filename = 'curlOut.txt';
if (is_writable($filename)){
    echo 'The file is writeable';
}else{
    echo 'nope';
}
$ch = curl_exec ($curl);
$sentCall = curl_getinfo($curl, CURLINFO_HEADER_OUT);
$dump = fopen("curlOut.txt","a") or die("Unable to open file!");
$dumptxt = "Header Info:".$sentCall . "Response:".$ch."'n'n";
fwrite($dump,$dumptxt);
curl_close ($curl);
fclose('curlOut.txt');
var_dump(json_decode($ch,true));

你能告诉我我做错了什么吗?几天来,我一直在努力找出我的cURL调用出了什么问题。我可以进行cURL调用,从square-connect API读取数据,而不会出现任何问题。我在这里也有一些重复的代码,以不同的方式显示输出/响应,希望获得更多信息。我还将发布使用CULINFO_header_OUT获得的标题信息。

Header Info:POST /v1/me/inventory/011a799a-****-****-****-4f5b70dc1494 HTTP/1.1
Host: connect.squareup.com
Accept: */*
Authorization: Bearer *****_*****
Content-Length: 47
Content-Type: application/x-www-form-urlencoded

谢谢。

我认为发生此错误是因为您的请求的Content-Type标头当前为application/x-www-form-urlencoded。对Connect API的请求必须具有application/jsonContent-Type才能匹配您的请求主体。

在这种情况下,这显然是一个无益的错误消息;我将与API工程团队合作改进它。