У меня есть этот код WordPress с помощью wp_remote_post()
сделать вызов API для LinkedIn.
$args = array(
'headers' => array('Content-Type' => 'text/xml'),
'body' => "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><company><id>{$nCompanyID}</id></company>");
$access_token = $datapass->access_token_get();
$params = array('oauth2_access_token' => $access_token);
$resource = "https://api.linkedin.com/v1/people/~/following/companies?" . http_build_query($params);
$response = wp_remote_post( $resource, $args);
$code = $response['response']['code'];
$body = wp_remote_retrieve_body($response);
$RV = ($code == '201');
return $RV;
Оно работает. Теперь мне нужно преобразовать его в php cURL.
Я пробовал различные примеры публикации php cURL XML, которые я нашел в Интернете, но не повезло.
Вот последняя попытка.
$access_token = "long_string_of_characters";
$nCompanyID = 2495437;
$xml = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><company><id>{$nCompanyID}</id></company>";
$url = 'https://api.linkedin.com/v1/people/~/following/companies?oauth2_access_token='.$access_token;
$headers = array(
"Content-type: text/xml",
"Content-length: " . strlen($xml)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('body' => $xml));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec($ch);
$data
возвращается с ошибкой 400 и сообщением «Неожиданный элемент: CDATA». Если я удалю массив из CURLOPT_POSTFIELDS
и использовать только $xml
$ data возвращается как пустая строка.
Любая помощь будет оценена.
Если сервер ожидает XML POST, то передает массив CURLOPT_POSTFIELDS
не собирается делать это счастливым.
Отметьте в своем исходном коде метод построения URL:
$params = array('oauth2_access_token' => $access_token);
$resource = "https://api.linkedin.com/v1/people/~/following/companies?" . http_build_query($params);
Вы хотите сохранить это. http_build_query()
выполняет экранирование, необходимое, если ваш токен доступа содержит специальные символы.
У меня возникнут вопросы, является ли ваш токен доступа действительным, учитывая, что исходный код, кажется, динамически генерирует его с $datapass->access_token_get();
В противном случае, похоже, у вас все установлено одинаково.
<?php
$access_token = "long_string_of_characters";
$nCompanyID = 2495437;
$xml = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><company><id>$nCompanyID</id></company>";
$params = ["oauth2_access_token" => $access_token];
$url = "https://api.linkedin.com/v1/people/~/following/companies?";
$url .= http_build_query($params);
$headers = [
"Content-type: text/xml",
"Content-length: " . strlen($xml)
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $xml,
CURLOPT_HTTPHEADER => $headers,
]);
$data = curl_exec($ch);
Других решений пока нет …