Я пытаюсь использовать API fiken.no для получения номеров клиентов. API основан на HAL+JSON, и я хочу получить доступ к данным с помощью PHP.
При создании новой учетной записи вы не получаете ответа, а только HTTP 201, поэтому, чтобы получить сгенерированный номер клиента, мне нужно использовать конечную точку поиска.
Эта конечная точка возвращает только всех пользователей следующим образом:
{
"_links": {
"self": {
"href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts"
}
},
"_embedded": {
"https://fiken.no/api/v1/rel/contacts": [
{
"_links": {
"self": {
"href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts/757941482"
}
},
"name": "Ola Nordmann 2",
"email": "[email protected]",
"address": {
"country": "Norge"
},
"customerNumber": 10003
},
{
"_links": {
"self": {
"href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts/757941171"
}
},
"name": "Ola Nordmann 1",
"email": "[email protected]",
"address": {
"country": "Norge"
},
"customerNumber": 10002
},
{
"_links": {
"self": {
"href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts/756867201"
}
},
"name": "Demoleverandør",
"address": {
"address1": "Demoveien 44",
"address2": "",
"postalPlace": "Oslo",
"postalCode": "0190",
"country": "Norge"
},
"supplierNumber": 20001
},
{
"_links": {
"self": {
"href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts/756867200"
}
},
"name": "Demokunde",
"address": {
"address1": "Demoveien 22",
"address2": "",
"postalPlace": "Oslo",
"postalCode": "0190",
"country": "Norge"
},
"customerNumber": 10001
}
]
}}
Из этого ответа мне нужно запросить, например, адрес электронной почты [email protected] и получить от него весь пользовательский объект. Это включает в себя адресные данные и особенно номер клиента. Как бы я это сделал?
Я нашел это: Поиск ключа в Json (вложенный массив) PHP, похоже на мои проблемы, но здесь ключ постоянен в массиве JSON. Здесь от 0 и до бесконечности.
Есть ли лучший способ обработать это с помощью PHP, чем обычные методы JSON?






Первым делом нужно было бы декодировать JSON в массив:
$resultArray = json_decode($yourJSONvariable, true);
Далее я бы рекомендовал изолировать массив контактов от массива JSON:
$contacts = $resultArray["_embedded"]["https://fiken.no/api/v1/rel/contacts"];
Теперь $contacts должен быть массивом всех контактов из вызова API. Вы можете просмотреть каждый из них, чтобы найти запись с соответствующим адресом электронной почты, например:
foreach ($contacts as $contact) {
if ($contact["email"] == "[email protected]") {
$mycontact = $contact;
break;
}
}
$mycontact теперь будет содержать массив контактов с соответствующим адресом электронной почты, и вы можете получить доступ к его отдельным полям, используя имена полей в качестве индекса массива (например, $mycontact["name"], $mycontact["address"]["country"], $mycontact["_links"]["self"]["href"]). Чтобы увидеть все данные в массиве, выполните var_dump($contacts).
Мне еще предстоит найти лучший способ поиска в JSON и возврата конкретной записи. Более идеальным решением было бы, если бы вы могли запросить конечную точку контактов с параметром электронной почты, но я просмотрел документацию, и это не представляется возможным.
Нет, Fiken — начинающая компания, поэтому я полностью понимаю, что их API — это WIP. Большое спасибо за то, что помогли мне в этом и даже нашли время, чтобы просмотреть документы fiken api, хотя я забыл связать их.
Спасибо за ответ. Я думал об использовании foreach, но мне было интересно, рекомендуется ли это или нет. Но теперь я знаю. Спасибо за помощь дружище. Кстати. Отредактировал свой пост, так как, когда вы ссылались на ключ _embedded json, вы случайно пропустили подчеркивание