PHP - Myob Api обновление для продаж / счета / профессионал не работает

Я могу вставить и получить от Sales/Invoice/Professional, но я не могу обновить. Он не дает мне никакой ошибки, он просто возвращает null, не дает мне никакой ошибки curl, но также ничего не обновляет.

мой рабочий заголовок для получения и вставки следующим образом:

$this->header_data = array(
        'Authorization: Bearer ' . $this->access_token,
        'x-myobapi-cftoken: ' . $this->CfToken,
        'x-myobapi-key: ' . $this->ClientId,
        'x-myobapi-version: v2'
    );

мой локон выглядит следующим образом:

$temp_file = tmpfile();
$json_data = json_encode($data);
fwrite($temp_file, $json_data);
fseek($temp_file, 0);

var_dump($json_data);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->header_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_INFILE, $temp_file);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($json_data));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

$result = curl_exec($ch);

$decoded_result = json_decode($result);

echo "curl errno: ";
var_dump(curl_error($ch));

echo "\n curl info: ";
var_dump(curl_getinfo($ch));

fclose($temp_file);
return $decoded_result;

мои данные JSON следующие:

{
  "Date": "2016-09-15 00:13:32",
  "Customer": {
    "UID": "1e75e4d0-61af-4c40-bd01-16041719c773"
  },
  "Lines": [
    {
      "Total": "100",
      "Description": "wc id - 8443:Membership member",
      "TaxCode": {
        "UID": "54c69a03-032d-4d93-a8df-90a04b20548f"
      },
      "Account": {
        "UID": "4dc0e4dd-73a5-476e-838e-acafbba6e63f"
      },
      "Date": "2016-09-15 00:13:32",
      "Job": {
        "UID": "bf95e411-956a-4431-8cab-5a82d590bea4"
      },
      "RowID": 1143,
      "RowVersion": "-8806226121369583616"
    }
  ],
  "CustomerPurchaseOrderNumber": "WC-8443",
  "Status": "Open",
  "UID": "69e6354e-b9b7-4744-851d-a0fb75dc4bfa",
  "RowVersion": "-9094456497521295360"
}

Глядя на RowID Lines, кажется, что это неправильно, потому что для этого требуется 32 символа, но это всего 4 символа, но я получаю его из существующих записей, так что все должно быть в порядке. нет ошибки curl_error, показываемой с помощью var_dump. поэтому я использую getinfo. результат, если var_dump следующим образом:

curl errno: string(0) ""

curl info: array(26) {
  ["url"]=>
  string(100) "https://ar1.api.myob.com/accountright/35b87d7b-d79a-4539-a060-6f20f56d8340/Sale/Invoice/Professional"
  ["content_type"]=>
  NULL
  ["http_code"]=>
  int(404)
  ["header_size"]=>
  int(506)
  ["request_size"]=>
  int(1230)
  ["filetime"]=>
  int(-1)
  ["ssl_verify_result"]=>
  int(0)
  ["redirect_count"]=>
  int(0)
  ["total_time"]=>
  float(0.346163)
  ["namelookup_time"]=>
  float(0.012373)
  ["connect_time"]=>
  float(0.030841)
  ["pretransfer_time"]=>
  float(0.071112)
  ["size_upload"]=>
  float(830)
  ["size_download"]=>
  float(0)
  ["speed_download"]=>
  float(0)
  ["speed_upload"]=>
  float(2397)
  ["download_content_length"]=>
  float(0)
  ["upload_content_length"]=>
  float(830)
  ["starttransfer_time"]=>
  float(0.089799)
  ["redirect_time"]=>
  float(0)
  ["redirect_url"]=>
  string(0) ""
  ["primary_ip"]=>
  string(14) "54.252.117.213"
  ["certinfo"]=>
  array(0) {
  }
  ["primary_port"]=>
  int(443)
  ["local_ip"]=>
  string(13) "223.27.16.227"
  ["local_port"]=>
  int(60100)
}

Я написал то же самое в сообществе myob, но никто еще не отвечает. кто-нибудь может помочь, что с ним не так?

1 ответ

Если вы пытаетесь обновить запись, ваш URL должен заканчиваться UID счета, который вы хотите обновить. Попробуйте изменить URL-адрес на

https://ar1.api.myob.com/accountright/35b87d7b-d79a-4539-a060-6f20f56d8340/Sale/Invoice/Professional/69e6354e-b9b7-4744-851d-a0fb75dc4bfa

Я заметил, что в свойстве cURL "url" UID не включен. Следует также помнить, что PUT заменяет содержимое отправляемого элемента, а не POST, который обновляет содержимое с измененными свойствами.

Похищен с /questions/35276248/post-protiv-pochtyi-v-otdyihe/35276252#35276252:

POST для URL-адреса создает дочерний ресурс по URL-адресу, определенному сервером.

PUT to URL создает / заменяет ресурс целиком по указанному клиентом URL.

Другие вопросы по тегам