В моем приложении я извлекаю данные из mysql и вызываю службу матрицы расстояния Bing. Хотя я могу заставить вызов работать нормально, используя почтальон и т. Д. Любой метод, который я пробовал использовать различные методы cURL и unirest, был неудачным. Я вернусь…
Не удалось прочитать ввод JSON
Все, что сказал, вот что я делаю …
Это пример JSON, который я использую, это $ content …
{"origins":{"latitude":"41.654570","longitude":"-71.49605"},"destinations":[{"latitude":"41.172536","longitude":"-71.555274"},{"latitude":"41.18259","longitude":"-71.567168"},{"latitude":"41.341878","longitude":"-71.695282"},{"latitude":"41.356934","longitude":"-71.63798"},{"latitude":"41.361308","longitude":"-71.625706"},{"latitude":"41.347763","longitude":"-71.67328"},{"latitude":"41.373887","longitude":"-71.665345"},{"latitude":"41.488602","longitude":"-71.38332"},{"latitude":"41.493772","longitude":"-71.137993"},{"latitude":"41.486615","longitude":"-71.246164"}],"travelMode":"driving"}
Он прекрасно проходит в JSONLint, а также работает в почтальоне.
$ контент построен из этой базы $ jsonbase …
$jsonbase = array(
"origins" => [],
"destinations" => [],
"travelMode" => "driving",
);
Вот бит, который я использую после моего возвращения из MySQL …
$url = "https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix";
$content = json_encode($jsonbase);
$headers = array('Content-Type' => 'application/json',
'Accept' => 'application/json',
'Content-Length' => strlen ($content),
'key' => 'THISISMYKEY');
$body = Unirest\Request\Body::Json($jsonbase);
$response = Unirest\Request::post($url, $headers, $body);
Должно быть, я что-то упустил, я просто не могу на всю жизнь понять это. В почтальоне у меня ключи заголовка настроены одинаково. а для тела я выбрал тип как raw и контент как JSON. Любая помощь или руководство будет высоко ценится. Спасибо!
Разобрался через чат, проблема в том, что API требует origins
а также destinations
быть массивом lat / lng, но приглядеться к полученному JSON origins
не потому, что это было одно значение в исходных данных.
Так что сингл origin
кортеж в массив решил это, в результате чего этот JSON:
{
"origins": [{
"latitude": "41.654570",
"longitude": "-71.49605"}],
"destinations": [
{
"latitude": "41.172536",
"longitude": "-71.555274"},
{
"latitude": "41.18259",
"longitude": "-71.567168"},
{
"latitude": "41.341878",
"longitude": "-71.695282"},
{
"latitude": "41.356934",
"longitude": "-71.63798"},
{
"latitude": "41.361308",
"longitude": "-71.625706"},
{
"latitude": "41.347763",
"longitude": "-71.67328"},
{
"latitude": "41.373887",
"longitude": "-71.665345"},
{
"latitude": "41.488602",
"longitude": "-71.38332"},
{
"latitude": "41.493772",
"longitude": "-71.137993"},
{
"latitude": "41.486615",
"longitude": "-71.246164"}
],
"travelMode": "driving"}
Других решений пока нет …