Предисловие
Я уже несколько лет пользуюсь прекрасным трекинговым приложением Strava, и знаю, что у них есть OAuth2 авторизация, как и в других широко известных социальных сетях, но вот упростить процесс регистрации ребятам, которые уже имеют профиль атлета в Strava, всё никак руки не доходили. Хотя это было бы и логично и удобно.
Материалы по теме
Первым делом, я конечно же глянул Маркетплейс — резонное опасение, что про Strava там нет ни одного слова, оправдалось.
Никогда не хочется что-то самому выдумывать, поэтому пришлось превозмочь первую ступень лени и пойти на GitHub — обычно там есть всё. По запросу Strava нашлось аж 79 PHP-репозиториев. Много разнообразных штуковин, но ни одного слова про Bitrix.
Снова пришлось побороть лень и поискать материалы на просторах учебных курсов и блогов разработчиков 1C-Битрикс — нашлось два тематических:
- Открывая социальные сервисы (автор Вадим Думбравану)
- Расширяем социальные сервисы своим сервисом авторизации (автор Антон Долганин)
Пользуясь случаем, разбавляю этот унылый текст, а заодно и хвастаюсь совместной фотографией со вторым автором.

В материале Антона Долганина есть всё, кроме второй части авторизации OAuth2 с обменом code на access_token, поэтому я чуть дополню его для совсем ленивых разработчиков вроде меня.
Реализация
Собственно, первым делом нам нужно добавить сервис Strava в список внешних сервисов на вкладке «Настройки» - «Настройки продукта» - «Настройки модулей» - «Социальные сервисы». Для этого мне понадобился класс Ambersport\Strava\Auth расширяющий \CSocServAuth.
Как и описано в материалах на просторах интернета, за генерацию списка отвечает событие OnAuthServicesBuildList модуля socialservices. Добавляем его в init.php или регистрируем зависимость модуля.
AddEventHandler('socialservices', 'OnAuthServicesBuildList', array('\\Ambersport\\Strava\\Auth', 'GetDescription'));
На этом этапе в настройках модуля Социальные сервисы Strava со значком Яндекса (что поделать, он по умолчанию) появилась в списке доступных социальных сервисов, а блок с полями под ключи благодаря функции GetSettings появился ниже.
Соответствующие поля нужно заполнить данными из настройки вашего приложения на сайте strava.com/settings/api.
Далее, как по инструкции, добавляем метод GetFormHtml, который будет выводить кнопку авторизации на форме авторизации и, по идее, всё должно заработать. Я использую Flexible SSL от CloudFlare, чтобы не мучиться с SSL, поэтому от себя я добавил метод isFlexSSL и свойство flexSSL, которое необходимо выставить в false, если вы не такой жадина как я и пользуетесь приличным SSL-сертификатом.
Всё, да ни всё — сервер Strava вернет вам code, который нужно будет обменять на access_token в последнем ключевом методе Authorize. В максимальном приближении реализация уже есть для сервиса VKontakte, и ее можно «содрать», но я сэкономлю немного вашего времени:
- Класс Ambersport\Strava\Auth для работы с модулем Социальные Сервисы: pastebin.com/M9XcgdV0
- Класс Ambersport\Strava\OAuth для работы авторизации через Strava: pastebin.com/BVAM2NMZ
- Классы, кстати, можно называть и по-старинке, например: CSocServHandlers и CSocServStrava — пока никто не запрещает. Единственное, их надо будет переименовать и убрать namespace-ы.
Вот теперь добавляем нарядные стили к CSS-классу .strava-button и радуемся тому, что пользователи Strava могут у нас регистрироваться.
Тыкаем в кнопку, вводим свой логин и пароль от Strava — теперь работает. Кончено, код можно причесать, чтобы везде были классы и методы из D7, и ссылки собирались-разбирались по-человечески, а не через explode/implode, но я этого делать не буду. Я вам сэкономил полчаса-час, так что сами и причёсывайте!