Apple Pay via l'API directe
Sur cette page
Ce guide explique comment intégrer Apple Pay directement à l'API de DEUNA. L'intégration directe vous donne un contrôle total sur le flux de paiement, ce qui la rend idéale pour les commerçants qui ont besoin d'implémentations personnalisées ou qui disposent de systèmes de paiement existants. Cette intégration prend en charge les paiements uniques.
Apple Pay avec DEUNA#
Voici le processus standard pour un achat Apple Pay avec DEUNA :
- Obtenez les modes de paiement
- Initialiser le SDK Web Apple Pay
- Acheter avec Apple Pay
1. Obtenez les modes de paiement#
Récupérez l’identifiant d’identification Apple Pay et les paramètres de configuration du SDK.
→ Voir la référence de l'API Obtenir les méthodes de paiement.
Renvoie la commande traitée avec son
{
"data": [
{
"allow_installments_plan": true,
"credentials": {
"external_merchant_id": "merchant.test.io.deuna.pay"
},
"enabled": true,
"extra_params": {
"allowed_auth_methods": [
"supports3DS"
],
"allowed_card_networks": [
"visa",
"masterCard",
"amex"
],
"merchant_name": "Test DEUNA"
},
"id": "ef2319fe-f88d-4d8d-b4d1-e4fa08f18651",
"method_type": "card_wallet",
"payment_provider": "apple_pay",
"processor_name": "apple_pay"
}
]2. Initialisez le SDK Web Apple Pay#
Référez-vous au Documentation du SDK Web Apple Pay pour la référence complète.
Importer le SDK Apple Pay JS
Ajoutez le script suivant à votre page :
<script src="https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js" crossorigin=""></script><script src="https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js" crossorigin=""></script>Exemple d'intégration complète
// 1. Check availability
if (!window.ApplePaySession || !ApplePaySession.canMakePayments()) {
// Apple Pay not available — hide the button or show a fallback
}
// 2. Initialize the session on button click (must be inside a user gesture)
// Use the values returned by the Get Payment Methods endpoint
const request = {
countryCode: 'MX',
currencyCode: 'MXN',
supportedNetworks: ['visa', 'masterCard', 'amex', 'discover'], // from extra_params.allowed_card_networks
merchantCapabilities: ['supports3DS'], // from extra_params.allowed_auth_methods
total: { label: 'Your Store Name', amount: '1.00', type: 'final' },
};
const session = new ApplePaySession(3, request);
// 3. Validate the merchant
// The credential-id comes from the `id` field in the Get Payment Methods response
session.onvalidatemerchant = async (event) => {
const response = await fetch(
'https://api.{env}.deuna.io/wallet/credentials/{credential-id}/payment-session',
{
method: 'POST',
headers: {
'X-Merchant-Id': '{merchant-id}',
'X-Store-Code': '{store-code}',
'Content-Type': 'application/json',
},
body: JSON.stringify({
validation_url: event.validationURL,
domain: '{your-domain}',
}),
}
);
const { data } = await response.json();
session.completeMerchantValidation(data);
};
// 4. Handle payment authorization
// Once the customer authorizes the payment, send the token to DEUNA
// Use applePayToken in step 3 — Create Card or Purchase V2
session.onpaymentauthorized = (event) => {
const applePayToken = event.payment;
session.completePayment(ApplePaySession.STATUS_SUCCESS);
};
session.begin();3. Achetez avec Apple Pay#
Une fois que le client autorise le paiement sur son appareil Apple, le onpaymentauthorized l'événement se déclenche et délivre un jeton de carte crypté via event.payment. Ce token doit être envoyé tel quel, sans aucune modification, à DEUNA.
3.1 Créer une carte
Le jeton de event.payment est envoyé au point de terminaison Create Card, qui renvoie un card_id qui peut être réutilisé lors de l'achat.
→ Voir la référence de l'API Créer une carte.
{
"apple_pay": {
"paymentData": {
"token": {
"transactionIdentifier": "7a94479858348...",
"paymentMethod": {
"type": "debit",
"displayName": "Visa 7553",
"network": "Visa"
},
"paymentData": {
"data": "EOeLQTsv8X7f...",
"header": {
"publicKeyHash": "MpXcCgm...",
"ephemeralPublicKey": "MFkwEwYH...",
"transactionId": "7a94479858348..."
},
"version": "EC_v1"
}
}
}
},
"credential_source": "apple_pay"
}3.2 Purchase with Card ID
Utilisez cette option lorsque la carte a déjà été tokenisée via Créer une carte. Il s'agit d'une demande d'achat standard V2 utilisant le card_id renvoyé par le point de terminaison Create Card – aucun jeton Apple Pay n’est nécessaire.
→ Voir la référence de l'API d'achat V2
{
"order_token": "{order-token}",
"order_type": "DEUNA_CHECKOUT",
"payer_info": {
"email": "customer@example.com",
"card_holder_dni": "12345678"
},
"payment_source": {
"method_type": "credit_card",
"card_info": {
"card_id": "{deuna-card-id}"
}
}
}3.3 Achat direct
Ceci concerne les cas où la carte n'est pas tokenisée. Le jeton de event.payment est envoyé directement dans la demande d'achat.
→ Voir la référence de l'API d'achat V2
{
"order_token": "{{order-token}}",
"order_type": "DEUNA_CHECKOUT",
"payer_info": {
"email": "{{random_user}}@testuser.com",
"card_holder_dni": "12345678"
},
"payment_source": {
"method_type": "credit_card",
"card_info": {
"credential_source": "apple_pay",
"credential_source_config": {
"type": "apple_pay",
"values": {
"system": "EC_v1",
"merchant_transaction_id": "6bfbf33f787b7932d5d0....",
"encrypted_data": "Fk11fwjWL3uFZlBwAw83G0xRt8....",
"encryption_header": {
"signature": "MIAGCSqGSIb3DQEHAqCAMIACAQEx...",
"public_key_hash": "EB8/SypLvJCISa2d4sQzV/Zw...",
"ephemeral_public_key": "MFkwEwYHKoZIzj0CAQYIKoZIzj..."
}
}
}
}
},
"anti_fraud_info": {
"device": {
"id": "eyJPUEVOUEFZIjoiIiwiTUVSQ0FET1BBzAzLTk2NjRkYzE3MWQzYiJ9..."
}
}
}Renvoie la commande traitée avec son
{
"order_type": "DEUNA_CHECKOUT",
"order_token": "4598f493-de86-4fe0-b9fd-c4c6c9847e39",
"order": {
"order_id": "DEUNA_CHECKOUT_b6a5c0b6-3df9-4b3b-b778-7086c190062b",
"currency": "MXN",
"total_amount": 10000,
"display_total_amount": "MXN 100,00",
"status": "succeeded",
"payment": {
"data": {
"status": "processed"
}
}
}
}