Я работаю над интеграцией API Google Адресов в веб-приложение. Мне удалось успешно создать код, позволяющий пользователям искать места с помощью API и отображать результаты в приложении, так что это круто.
То, что я не смог выяснить, – это разрешить пользователям приложения добавлять новые места. То, что Google говорит, выполнимо. У них есть документация по этому поводу здесь –
https://code.google.com/apis/maps/documentation/places/#adding_a_place
Но нет примера кода, и мне сложно скомпрометировать PHP-код для реализации вызова add.
Это код, который я до сих пор придумал. Я заменил свой фактический ключ API на {ваш ключ} здесь.
Я продолжаю получать неверную ошибку сообщения –
400. Это ошибка. Ваш клиент выдал неверный или незаконный запрос. Это все, что мы знаем.
<?php function ProcessCurl($URL, $fieldString){ //Initiate Curl request and send back the result $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADERS, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_URL, $URL); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_VERBOSE, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, array('json'=>json_encode($fieldString))); $resulta = curl_exec ($ch); if (curl_errno($ch)) { print curl_error($ch); } else { curl_close($ch); } echo $resulta; } $jsonpost = '{ "location": { "lat": -33.8669710, "lng": 151.1958750 }, "accuracy": 50, "name": "Daves Test!", "types": ["shoe_store"], "language": "en-AU" }'; $url = "https://maps.googleapis.com/maps/api/place/add/json?sensor=false&key={your key}"; $results = ProcessCurl ($url, $jsonpost); echo $results."<BR>"; ?>
Есть несколько проблем с вашим кодом.
Во-первых, вы должны использовать CURLOPT_HTTPHEADERS
когда на самом деле это CURLOPT_HTTPHEADER
(без CURLOPT_HTTPHEADER
«S»). Эта строка должна гласить:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
Затем Google не хочет, чтобы вы передавали имя параметра, просто значение. Другое дело, что $jsonpost
уже JSON, поэтому нет необходимости вызывать json_encode
. Строка должна читать:
curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldString);
Для получения дополнительной информации проверьте документацию Google: http://code.google.com/apis/maps/documentation/places/#adding_a_place .
Полный код, исправленный, проверенный и работающий:
<?php function ProcessCurl($URL, $fieldString){ //Initiate Curl request and send back the result $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_URL, $URL); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); //curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldString); $resulta = curl_exec ($ch); if (curl_errno($ch)) { print curl_error($ch); } else { curl_close($ch); } echo $resulta; } $jsonpost = '{ "location": { "lat": -33.8669710, "lng": 151.1958750 }, "accuracy": 50, "name": "Daves Test!", "types": ["shoe_store"], "language": "en-AU" }'; $url = "https://maps.googleapis.com/maps/api/place/add/json?sensor=false&key="; $results = ProcessCurl ($url, $jsonpost); echo $results."<BR>";