Přejít na hlavní obsah

Autentizace

SDK se k GoPay přihlašuje pomocí OAuth2 client_credentials.
Token endpoint nevolejte ručně při běžném použití API — SDK ukládá access tokeny do cache a obnovuje je před expirací.

Jak to funguje

Při prvním volání API:
  1. SDK odešle POST /oauth2/token
  2. Token uloží do cache s časem expirace
  3. Token znovu používá, dokud se neblíží konec platnosti
  4. Před expirací obnoví (okno podle tokenRefreshMarginSeconds)

Požadavek na token endpoint

SDK odesílá:
  • grant_type=client_credentials
  • nakonfigurovaný scope (výchozí payment-all)
  • Authorization: Basic <base64(clientId:clientSecret)>

Cache tokenů

Výchozí je InMemoryTokenCache.
Sdílená cache (Redis, memcached, …) se hodí při více instancích serveru, aby se zbytečně nenásobily OAuth požadavky.
Vlastní cache pro sdílení tokenů mezi procesy:
import { createGoPayClient, type TokenCache } from 'gopay-sdk';

class RedisLikeCache implements TokenCache {
  private readonly storage = new Map<string, any>();

  get(key: string) {
    return this.storage.get(key);
  }

  set(key: string, value: any) {
    this.storage.set(key, value);
  }

  delete(key: string) {
    this.storage.delete(key);
  }
}

const client = createGoPayClient(
  {
    goid: 8123456789,
    clientId: process.env.GOPAY_CLIENT_ID!,
    clientSecret: process.env.GOPAY_CLIENT_SECRET!,
    gatewayUrl: 'https://gw.sandbox.gopay.com/api',
  },
  {
    tokenCache: new RedisLikeCache(),
  },
);

Souběh

Správce tokenů slučuje paralelní požadavky na token:
  • pokud více volání potřebuje token najednou, proběhne jen jedno HTTP volání na token
  • všichni čekají na stejný probíhající promise
Tím se sníží zátěž token endpointu.

Doporučená nastavení

  • ponechte výchozí tokenRefreshMarginSeconds (30), pokud infrastruktura nevyžaduje větší rezervu
  • přihlašovací údaje držte v proměnných prostředí nebo secret manageru
  • při rotaci credential koordinujte nasazení napříč uzly