2014-11-24 2 views
2

Я пытаюсь использовать LinkedIn api для отправки сообщения пользователю, но я нахожу крайнее отсутствие примеров и недостающих документов затрудняют диагностику.LinkedIn отправить сообщение подключению

Я не хочу запрашивать разрешение w_messages, когда пользователь подписывается, поэтому я использую javascript API для получения нового токена доступа с этим разрешением и передачи на сервер только для вызова SendMessage.

На клиенте:

IN.init({ 
    onLoad: "onLoadApi", 
    api_key: viewBag.clientSettings.LinkedInClientId, 
    authorize: false, 
    scope: "r_basicprofile r_network w_messages" 
}); 

function onLoadApi() { 
    if (!IN.User.isAuthorized()) { 
     IN.User.authorize(sendMessage); 
    } 

    function sendMessage() { 
      var w_message_accesstoken = IN.ENV.auth.oauth_token; 
      $http.post("/MyApi/SendMessage/vBejds6Vh8", w_message_accesstoken); 
    } 
} 

На сервере:

string jsonData = "{\"subject\":\"test subject\",\"body\":\"testbody\",\"recipients\":{\"values\":[{\"person\":{\"_path\":\"/people/vBejds6Vh8\"}}]}}" 


var response= "https://api.linkedin.com/v1/people/vBejds6Vh8/mailbox" 
        .SetQueryParam("oauth2_access_token", accessTokenPassedFromClient) 
        .PostJsonAsync(jsonData); 

Результат:

{"Request to https://api.linkedin.com/v1/people/vBejds6Vh8/mailbox?oauth2_access_token=xxxxx failed with status code 401 (Unauthorized)."} 

ответ

1

Вы будете хотеть сделать этот вызов как POST-вызов. Вы можете отправлять сообщения только от имени члена, чей токен доступа у вас есть с полномочиями члена w_messages.

запрос Образец POST должен быть: POST https://api.linkedin.com/v1/people/~/mailbox?oauth2_access_token= ***

<?xml version='1.0' encoding='UTF-8'?> 
<mailbox-item> 
    <recipients> 
     <recipient> 
      <person path='/people/~' /> 
     </recipient> 
     <recipient> 
      <person path="/people/{id}" /> 
     </recipient> 
    </recipients> 
    <subject>Congratulations on your new position.</subject> 
    <body>You're certainly the best person for the job!</body> 
</mailbox-item> 
+0

В вашем обновленном примере вы делаете вызов POST https://api.linkedin.com/v1/people/ vBejds6Vh8/почтовый ящик. Является ли «vBejds6Vh8» пользователем, чей токен доступа вы используете? Попробуйте вместо этого использовать «~». Кроме того, вы получили свой токен доступа через JS API? Если это так, вам нужно будет обменять его на токен REST: https://developers.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens –

+0

Спасибо. vBejds6Vh8 - это взаимное соединение пользователя, чей токен доступа я использую, это разрешено? Кроме того, я не реализовал этот обменный поток, так что это, вероятно, проблема. Будет ли этот обменный поток работать, если я использую oAuth2, потому что ссылка ссылается только на oAuth 1.0a. Кроме того, в шаге 3 говорится: «Самый простой способ добиться этого - использование готовой библиотеки OAuth». Я осмотрелся, но я не могу найти пример такого на C#. Я использую Asp.Net Identity Framework, но я не знаю каких-либо встроенных функций для этой задачи? – parliament

+0

Если у вас есть токен доступа для пользователя A, вы должны сделать POST-вызов почтовому ящику пользователя A с помощью символа «~», чтобы назначить его, а затем установить пользователя B в качестве получателя. –