S
SwimPay
!

Connexion en attente

Les informations développeur seront synchronisées dès que SwimPay sera connecté.

Quel type de projet utilisez-vous ?

V1 prend en charge les intégrations Web et Android.

Clés SwimPay

Merchant ID Connexion en attente
Clé publique Connexion en attente
Clé secrète Non créée
Secret webhook Non créé

SGardez vos clés secrètes côté serveur.

ANe placez jamais la clé secrète dans une application Android.

Webhook

Status Connexion en attente
Événements publics payment.confirmed, payment.rejected, payment.expired
Connexion réussie Action nécessaire Signature non vérifiée Endpoint indisponible

Le test est envoyé par SwimPay avec un marqueur de test et ne déclenche aucun traitement de commande.

Intégration Web

Utilisez le SDK serveur @swimpay/node pour créer les commandes et vérifier les événements.

Installation

npm install @swimpay/node

Créer une commande côté serveur

import { SwimPay } from "@swimpay/node";

const swimpay = new SwimPay({
  secretKey: process.env.SWIMPAY_SECRET_KEY!,
  apiBaseUrl: process.env.SWIMPAY_API_BASE_URL
});

const checkout = await swimpay.orders.create({
  externalOrderId: order.id,
  amountMinor: order.amountMinor,
  currency: "RUB",
  returnUrl: "https://merchant.example/orders/" + order.id
}, {
  idempotencyKey: order.id
});

return checkout.checkoutUrl;

Vérifier les événements

const event = swimpay.webhooks.verify(
  req.body,
  req.headers,
  process.env.SWIMPAY_WEBHOOK_SECRET!
);

switch (event.type) {
  case "payment.confirmed":
    // Fulfill after merchant manual confirmation.
    break;
  case "payment.rejected":
  case "payment.expired":
    break;
}

Rediriger vers checkout_url

// Browser/frontend: redirect only.
window.location.href = checkout.checkoutUrl;

Intégration Android

Application Android → votre backend → SwimPay → checkout_url → retour app → votre backend vérifie le statut

AVotre application Android ne doit jamais contenir la clé secrète SwimPay.

Après le retour, rafraîchissez le statut depuis votre backend.

Ouvrir checkout_url et gérer le retour app

val checkoutUrl = merchantBackend.createSwimPayCheckout(orderId)

SwimPayCheckout.open(
  activity = this,
  checkoutUrl = checkoutUrl
)

override fun onNewIntent(intent: Intent) {
  super.onNewIntent(intent)
  val result = SwimPayCheckout.parseReturnIntent(intent)
  if (result != null) {
    // Ne validez pas localement.
    refreshOrderStatusFromBackend()
  }
}

Derniers événements

payment.confirmed

Créé Aujourd’hui, 14:20 · Livré Aujourd’hui, 14:20

Envoyé

1 tentative(s) · HTTP 200

payment.rejected

Créé Aujourd’hui, 13:10 · Livré Aujourd’hui, 13:11

Envoyé

1 tentative(s) · HTTP 200

payment.expired

Créé Hier, 18:05 · Livré —

Action nécessaire

3 tentative(s) · HTTP 503

Vpayment.confirmed est envoyé après manual confirmation du marchand. official_bank_confirmation=false.