Een geavanceerde Kayana-integratie met Stripe in React/Next.js bouwen
Last updated Mar 4, 2026
Bouw een geavanceerde Kayana-integratie om veilig kaartbetalingen in te zamelen met behulp van Kayana's Payment API, aangedreven door Stripe, voor uw e-commerce winkel.
Overzicht
Met de Kayana Payment API kunt u betalingen accepteren zonder uw eigen PCI-compliant checkout te bouwen.
Deze gids begeleidt u door het integreren van de Stripe Checkout (Embedded) flow in sandboxmodus.
Wat u gaat bouwen:
- Een betalingsinstantie op uw server maken
- De Stripe publiceerbare sleutel ophalen
- Stripe initialiseren op de frontend
- Stripe's beveiligde Checkout-capsule weergeven
- De betaling veilig voltooien
Voordat je begint
Je hebt het volgende nodig:
- Een Kayana property ID
- Toegang tot de sandbox-omgeving
- Basiskennis van server-side development
- Node.js / Next.js (voorbeelden beschikbaar)
Sandbox vs Production
Sandbox
- Veilige testomgeving
- Gebruikt test Stripe-sleutels
- Geen echte transacties
Production
- Vereist een autorisatietoken
- Gebruikt live Stripe-sleutels
- Verwerkt echte betalingen
Hoe het werkt
De Stripe-betalingsstroom bestaat uit:
- Server-side – Een betalingsinstantie maken
- Server-side – Ontvangen:
- client_secret (cs_test_…)
- publishable_key
- Client-side – Stripe initialiseren en Embedded Checkout weergeven
- Stripe – Betalingsbevestiging veilig afhandelen
Stel de server in
Base URL
Sandbox:
https://integration.dev.kayana.co.uk
Production:
https://integration.kayana.co.uk
Stap 1: Een betaling maken
Maak een betalingsinstantie aan door het volgende aan te roepen:
POST /web/payment
Headers
| Header | Waarde | Vereist |
| Content-Type | application/json | Ja |
| x-api-key | YOUR_API_KEY | Ja |
| type | business | Ja |
Hoe u uw X API-sleutel kunt verkrijgen
Volg deze stappen in Partner Admin:
- Meld u aan bij Kayana Partner Admin.
- Navigeer naar Instellingen (linker zijbalk).
- Selecteer API Key Management.
- Klik op Create API Key.
- Kopieer de gegenereerde sleutel onmiddellijk en verzend deze in de header.
Aanvraagparameters
| Parameter | Type | Beschrijving | Vereist |
|---|---|---|---|
| property_id | string | Kayana eigendomsidentificatie. Formaat: Prop_* | JA |
| psp_code | string | Betaalsprestadiercoderingscode. Waarde: STRIPE | JA |
| currency_code | string | ISO-valutacode. Ondersteunde waarden zijn GBP, EUR, USD | JA |
| amount | number | Betalingsbedrag in decimale opmaak (bv. 12.0) | JA |
| customer_email | string | E-mailadres van klant gebruikt voor de betalingssessie | JA |
| payment_mode | string | Betalingsmethode gebruikt voor de transactie. Waarde: CARD | JA |
| Veld | Type | Beschrijving | Vereist |
|---|---|---|---|
| userAgent | string | Browser user agent | NEE |
| acceptHeader | string | Accept header | NEE |
| language | string | Browsertaal | NEE |
| colorDepth | number | Schermkleurdiepte | NEE |
| screenHeight | number | Schermhoogte | NEE |
| screenWidth | number | Schermbreedte | NEE |
| timeZoneOffset | number | Tijdszone-offset | NEE |
| Veld | Type | Beschrijving | Vereist |
|---|---|---|---|
| street | string | Straatadres | NEE |
| city | string | Stad | NEE |
| postalCode | string | Postcode | NEE |
| country | string | Landcode | NEE |
| state | string | Staat of regio | NEE |
VOORBEELDAANVRAAG
const response = await fetch( "https://integration.dev.kayana.co.uk/web/payment", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", "type": "business" }, body: JSON.stringify({ property_id: "Prop_039f025cdbc74ca9957dbec1b3e193c1", psp_code: "STRIPE", currency_code: "GBP", amount: 100.5, customer_email: "customer@example.com", payment_mode: "CARD", browser_info: { userAgent: "Mozilla/5.0", acceptHeader: "/", language: "en-US", colorDepth: 24, screenHeight: 1080, screenWidth: 1920, timeZoneOffset: 0 }, billing_address: { street: "221B Baker Street", city: "London", postalCode: "NW1 6XE", country: "GB", state: "Greater London" } }) } );
const data = await response.json();
VOORBEELDRESPONS
const data = await response.json();
{
"status": true,
"data": {
"instance_id": "Payment_xyz789example",
"client_secret": "cs_test_abc123_secret_xyz456",
"publishable_key": "pk_test_abc123example",
"next_step": {
"action": "FORM",
"proceed": true
},
"transaction_id": "Tx_txn456example"
}
}
Responsparameters
| Parameter | Beschrijving |
| instance_id | Unieke betalingsinstantie-ID |
| client_secret | Stripe Checkout sessiegeheim |
| publishable_key | Stripe openbare sleutel |
| transaction_id | Interne transactiereferentie |
Belangrijk: client_secret mag alleen aan de voorkant worden gebruikt om Stripe te initialiseren.
Stap 2: Betaling voltooien op Frontend (Stripe Embedded Checkout)
Aangezien de API retourneert:
cs_test_…
Dit betekent dat de Stripe Checkout Session is gemaakt.
U moet Stripe Embedded Checkout gebruiken, niet confirmCardPayment.
Stripe SDK installeren
npm install @stripe/react-stripe-js @stripe/stripe-js
Frontend Implementation (Next.js Example)
"use client";
import { useState } from "react";
import { loadStripe } from "@stripe/stripe-js";
import {
EmbeddedCheckoutProvider,
EmbeddedCheckout,
} from "@stripe/react-stripe-js";
export default function Home() {
const [clientSecret, setClientSecret] = useState(null);
const [stripePromise, setStripePromise] = useState(null);
const createPayment = async () => {
const res = await fetch("/api/business-payment", {
method: "POST",
});
const data = await res.json();
setStripePromise(loadStripe(data.data.publishable_key));
setClientSecret(data.data.client_secret);
};
if (clientSecret && stripePromise) {
return (
<EmbeddedCheckoutProvider
stripe={stripePromise}
options={{ clientSecret }}
>
<EmbeddedCheckout />
</EmbeddedCheckoutProvider>
);
}
return (
<>
<h1>Stripe Payment Testing Page</h1>
<button onClick={createPayment}>Open Payment Capsule</button>
</>
);
}
Testen in Sandbox
Gebruik Stripe-testkaarten:
| Kaartnummer | Merk | Scenario |
| 4242 4242 4242 4242 | Visa | Succesvol |
| 4000 0025 0000 3155 | Visa | Vereist 3D Secure |
| 4000 0000 0000 9995 | Visa | Geweigerd |
Aanvullende details:
- Vervaldatum: Elke toekomstige datum
- CVC: Willekeurige 3 cijfers
- ZIP: Elk geldig formaat
Waarschuwing: Gebruik nooit testkaarten in productie.
Foutafhandeling
Alle reacties bevatten:
{
"status": false,
"message": "Description of error"
}
Veelvoorkomende fouten
| Fout | Oorzaak | Oplossing |
| Ongeldige API-sleutel | Incorrect x-api-key | Controleer met Kayana |
| Ongeldig eigenschaps-ID | Verkeerd formaat | Moet beginnen met Prop_* |
| Niet-ondersteunde valuta | Niet ingeschakeld | Neem contact op met Kayana |
| Stripe-configuratie ontbreekt | PSP niet ingeschakeld | Neem contact op met Kayana |
Checklist voor Live Gaan
Vóór productie:
- Productie x-api-key ophalen
- Overschakelen naar productie base URL
- Live Stripe publishable key gebruiken
- Echte kaartransacties testen
- Webhooks implementeren voor betalingsbevestiging
Nooit:
- Sandbox-sleutels in productie gebruiken
- Geheime sleutels in frontend zichtbaar maken
Ondersteuning
Hulp nodig?
- Technische problemen: Neem contact op met Kayana Technical Support
- Productiereferenties: Aanvragen bij uw Kayana-accountmanager
- PSP-configuratie: Neem contact op met Kayana Technical Support
Volgende stappen
- Webhook-integratie voor betalingsmeldingen verkennen
- Meer informatie over restituties en geschillenafhandeling
- Terugkerende betalingen voor abonnementen instellen
Volgende stappen
Als u de voorkeur geeft aan RYFT als uw Payment Service Provider (PSP), ondersteunt Kayana ook een volledige RYFT-integratieflow. Raadpleeg onze gids over Het bouwen van een geavanceerde Kayana-integratie met RYFT in React/Next.js.
