使用PECL OAuth通过带有PHP的REST API请求LinkedIn邀请的Bug


Bugs with LinkedIn Invitation request through their REST API with PHP using PECL OAuth

我在LinkedIn上使用PECL OAuth,因为它可以很好地处理Twitter和LinkedIn的GET请求。如果这不起作用,将切换到LinkedIn自己的OAuth库,但更愿意通过同一个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请求。

任何帮助都将不胜感激,谢谢。

找到解决方案,它正在取代

$oauth = new OAuth(self::$apiKey, self::$secretKey, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_FORM);

带有

$oauth = new OAuth(self::$apiKey, self::$secretKey, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_AUTHORIZATION);