Я предполагаю, что этот вопрос связан с моим непониманием массивов в PHP.
Обычно я пытаюсь отправить запрос на публикацию в php с помощью curl, однако я хочу, чтобы почтовый орган выглядел примерно так:
{
"deliveryAddress":[
{
"ID":"5",
"address":"[email protected]",
"method":"EMAIL",
"checkbox":true,
"flashlight":false
},
{
"ID":"7",
"address":"[email protected]",
"method":"EMAIL",
"checkbox":true,
"flashlight":false
}
]
}
Примерно так это выглядит в API, поэтому, если я добавлю это в программу наподобие Fiddler, она будет работать отлично. Однако, превратив это в пост-тело в PHP, я столкнулся с большими трудностями. Вот моя лучшая попытка:
$postData = array(
'deliveryAddress' => array(
'ID'=> '5',
'address'=> '[email protected]',
'method'=> 'EMAIL',
'checkbox'=> true,
'flashlight'=> false,
'ID'=> '7',
'address'=> '[email protected]',
'method'=> 'EMAIL',
'checkbox'=> true,
'flashlight'=> false,)
);
$url = "ServerIamSendingItTo";
$ch = curl_init();
$headers = array(
'Content-Type: application/json',
'Authorization: BASIC (mybase64encodedpass)=='
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_URL, $url);$result = curl_exec($ch);
$ch_error = curl_error($ch);
if ($ch_error) {
echo"ERROR";
curl_close($ch);
} else {var_dump($result);
}
curl_close($ch);
Ясно, что я делаю постданные неправильно, но я не уверен, как это структурировать. Любая помощь будет отличной. Спасибо.
DeliveryAddress
это массив объектов (после кодирования в JSON)
Так что если вы хотите разместить данные в соответствии с JSON, который вы написали в качестве примера, тогда массив PHP должен быть построен следующим образом:
$postData = array(
'deliveryAddress' => array(
array (
'ID'=> '5',
'address'=> '[email protected]',
'method'=> 'EMAIL',
'checkbox'=> true,
'flashlight'=> false
),
array (
'ID'=> '7',
'address'=> '[email protected]',
'method'=> 'EMAIL',
'checkbox'=> true,
'flashlight'=> false
)
)
);
Обратите внимание, что на «стороне PHP» deliveryAddress
теперь массив ассоциативных массивов (которые когда-то json_encoded
превратится в массив объектов).
Других решений пока нет …