Я использую PECL OAuth с LinkedIn, потому что он отлично работает с Twitter и GET-запросами LinkedIn. Переключится на собственные библиотеки OAuth LinkedIn, если это не сработает, но предпочел бы делать все через ту же библиотеку OAuth.
Код:
$xmlString = "<?xml version='1.0' encoding='UTF-8'?>".
"<mailbox-item>".
"<recipients>".
"<recipient>".
"<person path=\"/people/email={$person->PersonEmail}\">".
"<first-name>{$person->PersonFirstName}</first-name>".
"<last-name>{$person->PersonLastName}</last-name>".
"</person>".
"</recipient>".
"</recipients>".
"<subject>Invitation to Connect</subject>".
"<body>Please join my professional network on LinkedIn.</body>".
"<item-content>".
"<invitation-request>".
"<connect-type>friend</connect-type>".
"</invitation-request>".
"</item-content>".
"</mailbox-item>";
try {
$oauth = new OAuth(self::$apiKey, self::$secretKey, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_FORM);
$oauth->setToken($accessToken, $accessTokenSecret);
$oauth->fetch("http://api.linkedin.com/v1/people/~/mailbox", $xmlString, OAUTH_HTTP_METHOD_POST, array('Content-Type'=>'text/xml'));
$result = $oauth->getLastResponse();
return $result;
} catch (OAuthException $e) {
var_dump($e);
throw new ModelException('Error - Invalid Access Token', ModelException::$excodes['invalid_access_token']);
}
Это вызывает исключение, которое перехватывается, и var_dump выдает много, в первую очередь: «Неверный запрос авторизации/неверный (получил 401, ожидаемый HTTP/1.1 20X или перенаправление)»
Я пробовал несколько вариантов кода. Например, удаление «Content-Type» => «text/xml» дает ту же ошибку. Я проверил xml и знаю, что токены доступа хороши, так как я прекрасно использую их для выполнения запросов GET.
Любая помощь будет оценена, спасибо.