Вы что курили? Дайте мне тоже.
После проведения небольшой интеграции api альфабанка, хочется узнать, что они там курили и кто их поставщик.
Для сравнения сразу опишу как происходит интеграция по api c Т-Банк. Заходим в лк -> интеграции -> выпускаем токен ( https://developer.tbank.ru/docs/intro/manuals/ ). Профит. Переходим в документацию https://developer.tbank.ru/docs/api и быстро интегрируемся.
Фигак, фигак и в продакшн
В альфе все не просто, но надо сказать, что служба поддержки активно помогает, люди там есть и они заинтересованны в сотрудничестве. Однако, что бы полностью разобраться с авторизацией я потратил 3 дня (с учетом всех переписок) и еще 1 день для переключения на продуктовую среду.
Огромным минусом является, то что есть только 1 рефреш токен и не возможно настроить одновременную интеграцию на разных устройствах.
Первое, что вам нужно сделать, это написать на e-mail письмо со своими данными и просьбой предоставить доступ к API. В ответ придет письмо со всеми данными для подключения к тестовой среде. Документация https://developers.alfabank.ru/products/alfa-api/documentati… .
Теперь необходимо получить client_secret https://developers.alfabank.ru/products/alfa-api/documentati… .
Нет, это еще не все, получаем authorization_code https://developers.alfabank.ru/products/alfa-api/documentati…
Уф, меняем authorization_code на refresh_token. Код для примера, сам по себе он работать не будет. В ответе access_token.
use GuzzleHttpClient;
/**
* Обмен authorization_code на refresh_token
* return void
*/
public function authorizationCodeToRefreshToken($authorization_code)
{
try {
$res = $this->client->request(‘POST’, $this->getApiUrl() . ‘/oidc/token’,
[
‘form_params’ => [
‘grant_type’ => ‘authorization_code’,
‘code’ => $authorization_code,
‘client_id’ => $this->getClientId(),
‘client_secret’ => $this->getClientSecret(),
‘redirect_uri’ => ‘http://localhost’,
‘code_verifier’ => ‘string’,
],
‘headers’ => [
‘Accept’ => ‘application/json’,
‘Content-Type’ => ‘application/x-www-form-urlencoded’
],
‘verify’ => false, // без этого будет ошибка ssl
‘cert’ => $this->getSert(), // путь к сертификату
‘ssl_key’ => $this->getKey() // путь к ключу
]);
} catch (Throwable $e) {
$res = $e->getResponse();
}if ($res->getStatusCode() != 200) {
throw new ServerErrorHttpException($res->getStatusCode() . ‘ ‘ . $res->getBody()->getContents());
}$json = json_decode($res->getBody(), true);
$authToken = $json[‘access_token’] ?? ”;
if (!$authToken) {
throw new ServerErrorHttpException(‘Не удалось получить access_token’);
}// Закидываем access_token в кэш а рефреш в бд
$cache = Yii::$app->cache;
$expires_in = $json[‘expires_in’];
$cache->set(self::TOKEN_NAME, $authToken, $expires_in – 600 ?? 3000);
Settings::update(‘ALFA’, ‘ALFA_REFRESH_TOKEN’, $json[‘refresh_token’] ?? ”);return $authToken;
}
Когда access_token просрочится мы по рефрештокену получим новый, тут уже все стандартно.
Теперь можно свободно работать с тестовым api.
/**
* Получение информации о компании
* @return array
* @throws GuzzleException
* @throws ServerErrorHttpException
*/
public function companyInfo(): array
{
try {
$res = $this->client->request(‘GET’, $this->getApiUrl() . ‘/api/v2/customer-info’,
[
‘verify’ => false,
‘headers’ => [
‘Accept’ => ‘application/json’,
‘Authorization’ => ‘Bearer ‘ . $this->getToken()
],
‘cert’ => $this->getSert(),
‘ssl_key’ => $this->getKey()
]);
} catch (GuzzleException $e) {
$res = $e->getResponse();
} catch (Throwable $e) {
throw new ServerErrorHttpException($e->getMessage());
}if ($res->getStatusCode() != 200) {
throw new ServerErrorHttpException($res->getStatusCode() . ‘ ‘ . $res->getBody()->getContents());
}return json_decode($res->getBody()->getContents(), true);
}
После того как интеграция будет готова, нужно снова написать на email, из альфы пришлют инструкцию по генерации продуктового сертификата. Отправляем сертификат в банк и в ответ приходит новый сертификат и ключ из альфы. Ура, можно указывать боевой url, прописывать боевые сертификаты и начинать работу.
Получается на интеграцию альфы надо тратить на 1 неделю (округляю) больше чем на интеграцию тбанка. Если компенсация (брутто) программиста будет 250 тыс, то она будет стоить на 62 000 руб дороже чем интеграция с Т-Банк.
62 000 рублей. Я не знаю сколько это в футбольных полях, но лучше их потратить на себя.
Стоит ли сделать подобный пост со сравнением интернет-эквайринга Т-Банка и Альфы? Там чаша весов больше склоняется к альфе, хотя интересных моментов тоже предостаточно)