Доброго времени!
В наличии API на PHP, а так же два клиента к нему: веб-сайт на Angular 1.x и iOS-приложение. А так же два ВК-приложения (сайт и standalone).
Необходимо на стороне API уметь получать список друзей, делал репосты и т.п., что не умеет не-standalone приложение.
Предполагается использование других API с теми же целями: ФБ, Твиттер и т.д.
Тут есть два подвопроса.
Первый – про организацию хранения токенов ВК приложений: как организовать получение и хранение токенов с минимальным изобретением велосипедов?
Пример ситуации. Юзер подключает ВК в личном кабинете на нашем сайте – API получает вк-токен как сайт. Затем юзер качает ios-приложение, логинится туда через ВК – API получает второй вк-токен, теперь уже standalone. Юзер на сайте жмёт кнопку "создать X и сделать об этом вк-репост".
Вопрос: как сделать этот репост со стороны API? Взять все возможные вк-токены из базы для этого юзера и "методом научного тыка" попробовать все пока не получится? Хранить в базе ещё и тип и плодить два условие типа:
if ('vkontakte' == $social->getProvider()) && 'standalone' == $social->getAppType())
$social->postOnWall($entity);
Как вообще поступают в таких случаях на практике?
Второй – про библиотеки: какие?
Я пробовал использовать Hybridauth, но, кажется, бороться с ней приходится дольше.
Пример сложности с ней. Метод `authorize` зачем-то автоматически шлёт заголовки с редиректом, который Angular не в состоянии отловить – вместо того чтобы просто туда передать access_token и работать со всем внутренним апи соцсети. Все же методы типа `getUserProfile` внутри себя вызывают `isAuthorized`, который что-то там ищет в php-сессиях – которые вообще отключены в API за ненадобностью и никак не используются (вся работа с данными через Angular).
Вопрос: Есть идея добавлять в проект по одной библиотеке-зависимости, написать свой AbstractSocialAdapter и использовать какую-нибудь из этих библиотек в зависимости от ситуации. Но очень не хочется изобретать велосипеды.
Возможно, я делаю что-то совсем не правильно? Как такую задачу решаете вы? Хочется больше реальных примеров и best practice.
Спасибо.