#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, который вы пытаетесь использовать, но я сильно подозреваю, что это такой случай, когда он ожидает массив, но вы предоставляете объект.