Skip to content
Kayana for Business

Een geavanceerde Kayana-integratie in PHP bouwen

Last updated Jan 9, 2026

Bouw een geavanceerde Kayana-integratie in PHP-formulier om veilig kaartgegevens in te verzamelen en betalingen te accepteren met behulp van Kayana's Payment API, aangedreven door RYFT, voor uw e-commercewinkel.

Overzicht

De Kayana Payment API stelt u in staat betalingen van klanten te accepteren zonder dat u uw eigen afhandelingsproces hoeft te bouwen. Deze handleiding helpt u bij het integreren van de betalingsstroom in sandboxmodus, waar u veilig kunt testen zonder echte transacties te verwerken.

Wat u gaat bouwen:

  • Een betalingsinstantie op uw server maken
  • De openbare PSP-sleutel ophalen voor initialisatie van de frontend
  • Een veilig betalingsformulier weergeven met behulp van de RYFT SDK
  • De betaling veilig verwerken

Voordat u begint

U hebt het volgende nodig:

  • Een Kayana property ID
  • Toegang tot de sandbox-omgeving
  • Basiskennis van server-side development (PHP-voorbeelden beschikbaar)

Sandbox versus Production:

  • Sandbox: Testomgeving met neptransacties – geen verificatie vereist
  • Production: Live-omgeving – vereist een autorisatietoken van Kayana

Hoe het werkt

De betalingsstroom bestaat uit drie stappen:

  1. Server-side: Maak een betalingsinstantie aan en ontvang een client_secret
  2. Server-side: Haal de openbare sleutel van de PSP op voor initialisatie van de frontend
  3. Client-side: Geef het betalingsformulier weer met behulp van de RYFT SDK en voltooi de transactie

Stel de server in

Basis-URL

Sandbox:

https://integration.dev.kayana.co.uk

Productie:

https://integration.kayana.co.uk

Authenticatie

Alle productie-API-aanvragen vereisen een Authorisatie-header met uw API-token.

x-api-key: YOUR_API_KEY

Opmerking: In sandbox-modus is authenticatie optioneel, maar kan worden opgenomen voor het testen van productiecompatibele aanvragen.

Stap 1: Een betaling maken

Maak een betalingsinstantie door het eindpunt /admin/payment aan te roepen. Dit retourneert een client_secret die u gebruikt om de betaling op de frontend te voltooien.

Eindpunt

POST /web/payment

Headers

Headers
HeaderWaardeVereist
Content-Typeapplication/jsonJa
x-api-keyYOUR_API_KEYJa

Aanvraagparameters

Aanvraagparameters
ParameterTypeBeschrijving
property_idstringFormaat Prop_*
psp_codestringRYFT
pre_authorisebooleanGeeft aan of de betaling vooraf moet worden geautoriseerd in plaats van onmiddellijk te worden vastgelegd
currency_codestringGBP, EUR, USD
amountnumberDecimaal bedrag (voorbeeld: 12.0)
customer_emailstringE-mailadres van klant

Voorbeeldaanvraag

<?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://integration.dev.kayana.co.uk/web/payment', CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode([ "property_id" => "Prop_abc123example", 'psp_code' => $config['stripe']['psp_code'], "currency" => "GBP", "amount" => 12.0, "customer_email" => "customer@example.com" ]), CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'x-api-key: YOUR_API_KEY' ), )); $response = curl_exec($curl); curl_close($curl); $data = json_decode($response, true); echo $response; ?>

Antwoord

{ "status": true, "data": { "instance_id": "Payment_xyz789example", "client_secret": "ps_secret123example", "next_step": { "action": "FORM", "proceed": true }, "transaction_id": "Tx_txn456example" } }

Antwoordparameters

Antwoordparameters
ParameterBeschrijving
instance_idUnieke identificatie voor deze betalingsinstantie
client_secretSleutel gebruikt om de betaling op de frontend te voltooien (houd dit veilig)
next_step.actionGeeft de volgende vereiste actie aan (meestal FORM voor kaartbetalingen)
next_step.proceedBoolean die aangeeft of u moet doorgaan met de betalingsstroom
transaction_idUnieke identificatie voor het volgen van deze transactie

Belangrijk: De client_secret is gevoelige informatie en moet veilig worden bewaard. Geef deze alleen door aan uw frontend als dit nodig is om de betaling te voltooien.

Stap 2: Haal de openbare sleutel van PSP op

Haal de openbare sleutel op die nodig is om de RYFT-betaling-SDK op uw frontend te initialiseren. Deze sleutel is specifiek voor uw PSP (RYFT) en de bijbehorende valuta.

Eindpunt

GET /web/payment/public-key

Headers

Headers
HeaderWaardeVereist
x-api-keyYOUR_API_KEYJa
x-psp-codeRYFTJa
x-currency-codeGBP (of uw valuta)Ja

Voorbeeldaanvraag

<?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://integration.dev.kayana.co.uk/web/payment/public-key', CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => array( 'x-api-key: YOUR_API_KEY', 'x-psp-code: RYFT', 'x-currency-code: GBP' ), )); $response = curl_exec($curl); curl_close($curl); $data = json_decode($response, true); echo $response; ?>

Antwoord

{ "status": true, "data": { "public_key": "pk_sandbox_abc123examplekey" } }

Antwoordparameters

Antwoordparameters
ParameterBeschrijving
public_keyOpenbare PSP-sleutel voor initialisatie van de RYFT SDK op uw frontend

Stap 3: Voltooi de betaling op de frontend

Gebruik de openbare sleutel om de RYFT SDK te initialiseren en de client secret om de betaling te bevestigen.

Integratieoverzicht

  1. Neem de RYFT SDK op in uw frontend
  2. Initialiseer RYFT met uw public_key
  3. Maak een betalingsformulier met behulp van RYFT's UI-componenten
  4. Bevestig de betaling met behulp van de client_secret

Opmerking: De exacte frontendimplementatie hangt af van de RYFT JavaScript SDK. Raadpleeg RYFT-documentatie voor gedetailleerde frontendintegratiesstappen.

Basis-frontendstroom

// Initialize RYFT with the public key const ryft = Ryft('pk_sandbox_abc123examplekey'); // Create a payment form const elements = ryft.elements(); const cardElement = elements.create('card'); cardElement.mount('#card-element'); // Handle form submission const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); // Confirm payment with client_secret const {error, paymentIntent} = await ryft.confirmCardPayment( 'ps_secret123example', // client_secret from Step 1 { payment_method: { card: cardElement } } ); if (error) { console.error(error.message); } else { console.log('Payment successful!', paymentIntent); } });

Testen in sandbox

Gebruik deze testkaartnummers om verschillende betalingsscenario's in de sandbox-omgeving te simuleren. Deze kaarten voeren geen echte transacties uit.

Testkaartnummers

Testkaartnummers
KaartnummerMerkScenario
4242 4242 4242 4242VisaSuccesvolle betaling
4000 0025 0000 3155VisaVereist verificatie (3D Secure)
4000 0000 0000 9995VisaBetaling geweigerd (onvoldoende geldmiddelen)

Aanvullende details van testkaart:

  • Vervaldatum: Elke toekomstige datum (bijvoorbeeld 12/34)
  • CVC: Willekeurig 3 cijfers (bijvoorbeeld 123)
  • Postcode: Elk geldig formaat (bijvoorbeeld SW1A 1AA)

Waarschuwing: Sandbox-testkaarten mogen nooit in productie worden gebruikt. Echte kaartgegevens mogen alleen in de productieomgeving worden ingevoerd.

Aanvullende eindpunten voor bestellingen

Aanbevolen flow:

Bestelling maken → Betaling autoriseren

↓

├── Vastleggen → Succes

├── Annuleren → Betaling ongedaan maken

└── Terugbetaling → Na vastlegging

Authenticatie

Alle API-aanvragen moeten de volgende headers bevatten:

Authenticatie
HeaderTypeVereistBeschrijving
x-api-keyStringJaUw API-sleutel
typeStringJaMoet worden ingesteld op business
Content-TypeStringJaMoet application/json zijn

1. Geautoriseerde Betaling Vastleggen

Eindpunt

POST /web/payment/capture-authorised-payment

Aanvraagparameters

Aanvraagparameters
VeldTypeVereistBeschrijving
order_idStringJaBestel-ID
amountNumberJaBedrag om vast te leggen

cURL-voorbeeld

curl --location 'https://integration.dev.kayana.co.uk/web/payment/capture-authorised-payment' \ --header 'Content-Type: application/json' \ --header 'type: business' \ --header 'x-api-key: <YOUR_API_KEY>' \ --data '{ "order_id": "Order_xxx", "amount": 5 }'

Voorbeeldrespons

{ "status": "success", "message": "Payment captured successfully", "data": { "order_id": "Order_xxx", "captured_amount": 5 } }

2. Betaling geannuleerd

Eindpunt

POST /web/payment/cancel-authorised-payment

Verzoekparameters

Verzoekparameters
VeldTypeVereistBeschrijving
order_idStringJaBestel-ID

cURL-voorbeeld

curl --location 'https://integration.dev.kayana.co.uk/web/payment/cancel-authorised-payment?order_id=Order_xxx' \ --header 'Content-Type: application/json' \ --header 'type: business' \ --header 'x-api-key: <YOUR_API_KEY>'

Voorbeeldrespons

{ "status": "success", "message": "Payment cancelled successfully" }

3. Terugbetaling Betaling

Eindpunt

POST /web/payment/refund

Verzoekparameters

Verzoekparameters
VeldTypeVereistBeschrijving
order_idTekenreeksJaBestelling-ID
amountGetalJaTerugbetalingsbedrag

cURL-voorbeeld

curl --location --request POST 'https://integration.dev.kayana.co.uk/web/payment/refund?order_id=Order_xxx&amount=0.4' \ --header 'Content-Type: application/json' \ --header 'type: business' \ --header 'x-api-key: <YOUR_API_KEY>'

Voorbeeldantwoord

{ "status": "success", "message": "Refund processed", "data": { "order_id": "Order_xxx", "refunded_amount": 0.4 } }

4. Orderdetails ophalen

Eindpunt

GET /web/order/fetch-order-details-by-order-id

Verzoekparameters

Verzoekparameters
VeldTypeVereistBeschrijving
order_idStringJaOrder-ID

cURL-voorbeeld

curl --location 'https://integration.dev.kayana.co.uk/web/order/fetch-order-details-by-order-id?order_id=Order_xxx' \ --header 'type: business' \ --header 'x-api-key: <YOUR_API_KEY>'

Voorbeeldrespons

{ "status": "success", "data": { "order_id": "Order_xxx", "status": "captured", "amount": 5 } }

Foutafhandeling

Alle API-reacties bevatten een statusveld dat succes of mislukking aangeeft.

Foutresponsindeling

{ "status": false, "message": "Description of what went wrong" }

Veelvoorkomende fouten

Veelvoorkomende fouten
FoutOorzaakOplossing
Ongeldig autorisatietokenToken ontbreekt, is verlopen of onjuistVerifieer uw autorisatietoken bij Kayana-ondersteuning
Vereiste headers ontbrekenVereiste header (bijvoorbeeld x-psp-code) niet opgegevenControleer of alle noodzakelijke headers in uw verzoek zijn opgenomen
Ongeldig eigendoms-IDEigendoms-ID-indeling is onjuist of bestaat nietControleer of uw eigendoms-ID overeenkomt met de indeling Prop_*
Niet-ondersteunde valutaValutacode wordt niet ondersteund voor deze eigendomControleer ondersteunde valuta's bij Kayana-ondersteuning
PSP-configuratie ontbreektRYFT is niet geconfigureerd voor deze eigendomNeem contact op met Kayana om RYFT voor uw account in te schakelen

Live gaan

Voordat u naar productie gaat:

  1. Productiereferenties ophalen: Neem contact op met Kayana Technical Support voor uw productieautorisatietoken
  2. Uw basis-URL bijwerken: Schakel over van de sandbox-URL naar de productie-URL
  3. Authenticatie toevoegen: Voeg uw autorisatietoken in alle verzoeken in
  4. Frontend-sleutels bijwerken: Vervang sandbox openbare sleutels door productiesleutels
  5. Testkaarten verwijderen: Zorg ervoor dat alleen echte betaalmethoden worden geaccepteerd

Nodig: Gebruik nooit sandbox-sleutels of testkaarten in een productieomgeving. Productiesleutels moeten veilig worden bewaard en mogen nooit in clientcode worden blootgesteld.

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
  • Verken webhook-integratie voor betalingsmeldingen
  • Meer informatie over terugbetalingen en geschillenafhandeling
  • Stel terugkerende betalingen in voor abonnementen

Volgende stappen:

Als u Stripe als uw betalingsserviceprovider prefereert, raadpleegt u onze gids voor het

bouwen van een geavanceerde Kayana-integratie voor RYFT in PHP

.

Still need a hand?Contact support← All help
Chat met ons via WhatsApp