Введение
Поэтому я пытаюсь отправить значения формы в виде строки запроса в API. API ожидает строку запроса, подобную этой:
&name=Charles+Hansen&email=example@email.com&locations=23433&locations=23231&propertyTypes=APARTMENT&propertyTypes=TOWNHOUSE&message=test"
Как вы можете видеть, существует несколько «propertyTypes» и «location» в зависимости от того, сколько типов свойств или местоположений пользователь выбирает в форме. Из-за этого я сохранил все данные $ _POST в многомерном массиве, который выглядит следующим образом, поскольку у меня, очевидно, не может быть нескольких ключей с одинаковыми именами "propertyTypes" или "location":
Array
(
[name] => Charles Hansen
[email] => example@email.com
[locations] => Array
(
[0] => 23433
[1] => 23231
)
[propertyTypes] => Array
(
[0] => APARTMENT
[1] => TOWNHOUSE
)
[message] => test
)
cURLне поддерживает многомерные массивы, поэтому сначала я строю запрос сам, прежде чем его использовать. Это моя функция cURL:
function sg_order($post_fields) {
if($post_fields) {
$query = http_build_query($post_fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com/order?orgKey=' . constant('ORG_KEY'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: ' . strlen($query))
);
$result = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if(curl_errno($ch)) {
error_log('Curl error: ' . curl_error($ch) . $result);
}else{
error_log('Curl response: ' . $status);
}
curl_close($ch);
return $result;
}
}
orgKey
- обязательный параметр для проверки.
Проблема
Моя проблема в том, чтозапрос, построенный с помощью $query = http_build_query($post_fields);
, содержит ключи для вложенных массивов ([0], [1] и т. д.). Результат $query
выглядит следующим образом:
&name=Charles+Hansen&email=example@email.com&locations[0]=23433&locations[1]=23231&propertyTypes[0]=APARTMENT&propertyTypes[1]=TOWNHOUSE&message=test"
Как избавиться от ключей ([0], [1] и т. Д.), Чтобы запрос выглядел в точности так, как ожидает API?
Дополнительная информация
- У меня нет контроля над API
- Я не отправляю файлы, поэтому решение не должно работатьс файлами