Site ou application connecté
Connectez SwimPay à votre site ou votre application pour recevoir les mises à jour de paiement.
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
SGardez vos clés secrètes côté serveur.
ANe placez jamais la clé secrète dans une application Android.
Webhook
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
Créé Aujourd’hui, 14:20 · Livré Aujourd’hui, 14:20
1 tentative(s) · HTTP 200
Créé Aujourd’hui, 13:10 · Livré Aujourd’hui, 13:11
1 tentative(s) · HTTP 200
Créé Hier, 18:05 · Livré —
3 tentative(s) · HTTP 503
Vpayment.confirmed est envoyé après manual confirmation du marchand. official_bank_confirmation=false.