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:
- Server-side: Maak een betalingsinstantie aan en ontvang een client_secret
- Server-side: Haal de openbare sleutel van de PSP op voor initialisatie van de frontend
- 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
| Header | Waarde | Vereist |
| Content-Type | application/json | Ja |
| x-api-key | YOUR_API_KEY | Ja |
Aanvraagparameters
| Parameter | Type | Beschrijving |
| property_id | string | Formaat Prop_* |
| psp_code | string | RYFT |
| pre_authorise | boolean | Geeft aan of de betaling vooraf moet worden geautoriseerd in plaats van onmiddellijk te worden vastgelegd |
| currency_code | string | GBP, EUR, USD |
| amount | number | Decimaal bedrag (voorbeeld: 12.0) |
| customer_email | string | E-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
| Parameter | Beschrijving |
| instance_id | Unieke identificatie voor deze betalingsinstantie |
| client_secret | Sleutel gebruikt om de betaling op de frontend te voltooien (houd dit veilig) |
| next_step.action | Geeft de volgende vereiste actie aan (meestal FORM voor kaartbetalingen) |
| next_step.proceed | Boolean die aangeeft of u moet doorgaan met de betalingsstroom |
| transaction_id | Unieke 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
| Header | Waarde | Vereist |
| x-api-key | YOUR_API_KEY | Ja |
| x-psp-code | RYFT | Ja |
| x-currency-code | GBP (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
| Parameter | Beschrijving |
| public_key | Openbare 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
- Neem de RYFT SDK op in uw frontend
- Initialiseer RYFT met uw public_key
- Maak een betalingsformulier met behulp van RYFT's UI-componenten
- 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
| Kaartnummer | Merk | Scenario |
| 4242 4242 4242 4242 | Visa | Succesvolle betaling |
| 4000 0025 0000 3155 | Visa | Vereist verificatie (3D Secure) |
| 4000 0000 0000 9995 | Visa | Betaling 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:
| Header | Type | Vereist | Beschrijving |
|---|---|---|---|
| x-api-key | String | Ja | Uw API-sleutel |
| type | String | Ja | Moet worden ingesteld op business |
| Content-Type | String | Ja | Moet application/json zijn |
1. Geautoriseerde Betaling Vastleggen
Eindpunt
POST /web/payment/capture-authorised-payment
Aanvraagparameters
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
| order_id | String | Ja | Bestel-ID |
| amount | Number | Ja | Bedrag 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
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
| order_id | String | Ja | Bestel-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
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
| order_id | Tekenreeks | Ja | Bestelling-ID |
| amount | Getal | Ja | Terugbetalingsbedrag |
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
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
| order_id | String | Ja | Order-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
| Fout | Oorzaak | Oplossing |
| Ongeldig autorisatietoken | Token ontbreekt, is verlopen of onjuist | Verifieer uw autorisatietoken bij Kayana-ondersteuning |
| Vereiste headers ontbreken | Vereiste header (bijvoorbeeld x-psp-code) niet opgegeven | Controleer of alle noodzakelijke headers in uw verzoek zijn opgenomen |
| Ongeldig eigendoms-ID | Eigendoms-ID-indeling is onjuist of bestaat niet | Controleer of uw eigendoms-ID overeenkomt met de indeling Prop_* |
| Niet-ondersteunde valuta | Valutacode wordt niet ondersteund voor deze eigendom | Controleer ondersteunde valuta's bij Kayana-ondersteuning |
| PSP-configuratie ontbreekt | RYFT is niet geconfigureerd voor deze eigendom | Neem contact op met Kayana om RYFT voor uw account in te schakelen |
Live gaan
Voordat u naar productie gaat:
- Productiereferenties ophalen: Neem contact op met Kayana Technical Support voor uw productieautorisatietoken
- Uw basis-URL bijwerken: Schakel over van de sandbox-URL naar de productie-URL
- Authenticatie toevoegen: Voeg uw autorisatietoken in alle verzoeken in
- Frontend-sleutels bijwerken: Vervang sandbox openbare sleutels door productiesleutels
- 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
.
