Я интегрировал свой сайт с Facebook Connect, авторизация / единый вход - все отлично работает.
Теперь я пытаюсь опубликовать что-то на стене пользователя, с чем у меня возникают проблемы.
Прежде всего, я использую «старый» JavaScript API (FeatureLoader.js).
Это URL API Graph, которые я использую:
private const string UserDetails_Url = @"https://graph.facebook.com/{0}?access_token={1}";
private const string Feed_Url = @"https://graph.facebook.com/{0}/feed?access_token={1}";
private const string TokenExchange_Url = @"https://graph.facebook.com/oauth/access_token?{0}";
Я использую URL TokenExchange_Url
для получения уникального пользовательского токена OAuth для совершения звонков.
Это работает нормально, потому что a) я получаю токен обратно, и b) я могу выдавать HTTP Get Requests в API Graph (т.е. UserDetails_Url
), и он отлично работает.
Но я не могу опубликовать сообщение на стене пользователя, используя Feed_Url
.
Я почти уверен, что проблема в том, что у меня нет соответствующих прав пользователя для публикации на стене (т.е. настройка на стороне Facebook).
Теперь я понимаю, что для этого могу использовать метод API fbPublish
на стороне клиента, но я хочу сделать это на стороне сервера с Graph API.
Я не буду показывать мой код, который пытается вызвать API-интерфейс Graph для публикации на стене пользователя, как его довольно просто (HttpWebRequest, установить метод в «POST», установить тип / длину содержимого, записать байты в Stream и т. Д.) ).
Я думаю, что проблема в том, что мне нужно, чтобы пользователь предоставил моему приложению расширенные разрешения "publish_stream".
API Graph Facebook doco говорит сделать это в вашем запросе авторизации:
https://graph.facebook.com/oauth/authorize?
client_id=...&
redirect_uri=http://www.example.com/callback&
scope=user_photos,user_videos,publish_stream
Что меня смущает, потому что я использую следующий URL для получения токена OAuth:
https://graph.facebook.com/oauth/access_token?bunchofqsparams
Использую ли я неправильный URL токена? Почему существуют два разных URL-адреса, по-видимому, для получения одной и той же информации?
Да - я читал документацию по API Facebook (много раз), и да, я читал другие подобные вопросы SO, но все они приводят к использованию API на стороне клиента для публикации на стене, я хочу сделать это на стороне сервера .
Для кнопки «Facebook Connect» я использую стандартный FBML:
<fb:login-button length="long" size="medium" autologoutlink="false" background="light" onlogin="facebookLogin('/login')" class=" fb_login_not_logged_in FB_login_button FB_ElementReady"><a id="RES_ID_fb_login" class="fbconnect_login_button"><img id="RES_ID_fb_login_image" src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif" alt="Connect"></a></fb:login-button>
Когда я нажимаю на это (и не вошел в Facebook), появляется окно, в которое пользователь может войти. Но у него нет диалогового окна «Запрос расширенных разрешений» - не так ли? Или это другое всплывающее окно, которое мне нужно вызвать вручную?
Итак, подведем итог, вот мои вопросы:
- Как предоставить расширенные разрешения для публикации на стене пользователя?
- Какой правильный URL-адрес для получения токена OAuth?
- Есть ли точный источник информации о том, как размещать сообщения на стене пользователя с помощью вызовов API API на стороне сервера?