Сообщение Json API выдает ошибку 500, что я делаю не так?

#php #json #curl

Вопрос:

Я пытаюсь создать нового клиента в своем API, используя php cURL. Клиенты, продукты и все, что создается, создается методом POST. Это мой код:

 $json='{ "data": {  "type": "customers",  "attributes": {  "tax_registration_number": "5555555550",  "business_name": "Test customer",  "contact_name": "Mr. Test",  "website": "https://www.testurl.pt",  "phone_number": "2299999999",  "mobile_number": "9299999999",  "email": "test@testcustomer.pt",  "observations": "This is only a test",  "internal_observations": "This is good customer",  "not_final_customer": null,  "cashed_vat": null,  "tax_country_region": "PT-MA"  },  "relationships": {  "main_address": {  "data": {  "type": "addresses",  "id": 1  }  },  "addresses": {  "data": [  {  "type": "addresses",  "id": 1  },  {  "type": "addresses",  "id": 2  }  ]  }  } } }';  print($json);  

Здесь я инициирую завиток, у меня уже есть токен и авторизация:

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,($url)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,($json)); curl_setopt($ch, CURLOPT_HTTPHEADER, array(  'Content-Type: application/vnd.api json',  'Accept: application/json',  'Authorization: Bearer ' . $token, )); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); var_dump ($response); $response=json_decode($response,true); curl_close ($ch);  

Это тот ответ, который у меня есть:

 string(329) "{"errors":[{"status":"500 Internal Server Error","code":"JA006","detail":"Erro de sistema JA006: erro interno na base de dados. Por favor contacte o suporte técnico.","meta":{"internal-error":"in JsonapiJson::Value::operator[](ArrayIndex)const: requires arrayValue"}}],"jsonapi":{"version": "1.0","meta":{"libversion":"2.4.1"}}}"  

Кто-нибудь, пожалуйста, может мне помочь? Спасибо!

Комментарии:

1. application/vnd.api json выглядит немного подозрительно. application/json это обычный тип содержимого JSON (как и в вашем заголовке «Принять»). Кроме того, ошибка 500 на самом деле является ошибкой на стороне сервера, поэтому вам придется связаться с сопровождающими API, чтобы выяснить, почему произошел сбой. Лично я не вижу ничего явно неправильного в вашем коде, но, возможно, кто-то еще что-то заметит

2. Вы получаете JA006 system error: internal database error. Please contact technical support. данные из API, поэтому обратитесь в их техническую поддержку

Ответ №1:

Ошибка API гласит следующее: in JsonapiJson::Value::operator[](ArrayIndex)const: requires arrayValue .

Вы уверены, что JSON-правильный формат? Похоже, что вы, вероятно, предоставляете объект в JSON, где сервер ожидает массив объектов. Например, проверьте , должны ли data , или relationships , или addresses быть массивами.

Мое главное предположение было бы вместо:

 "addresses": {  "data": [  {  "type": "addresses",  "id": 1  },  {  "type": "addresses",  "id": 2  }  ] }  

Может быть, так и должно быть

 "addresses":[  {  "type": "addresses",  "id": 1  },  {  "type": "addresses",  "id": 2  } ]  

Я, конечно, не могу сказать вам наверняка, так как я не знаю API, который вы пытаетесь использовать, но я сильно подозреваю, что это такой случай, когда он ожидает массив, но вы предоставляете объект.