Passa al contenuto principale
In questa pagina
Metodo di integrazione

Tokenizza le credenziali senza portare dati sensibili della carta nell’applicazione.

Visualizza campi sicuri o esperienze Vault DEUNA, ricevi token riutilizzabili ed elabora in sicurezza i pagamenti futuri.

Interfaccia
Esperienza merchant con inserimento credenziali protetto da DEUNA
Modello di distribuzione
Componente SDK, incorporato o modale
Ideale per
Carte salvate, checkout con un clic e pagamenti ricorrenti

Comprendere i limiti del credential#

Il card_id restituito da un flusso di tokenizzazione supportato è un riferimento al credential di pagamento di DEUNA. La sua disponibilità per un pagamento successivo dipende dal consenso del cliente, dal tipo di token, dal conto del commerciante, dalla connessione al fornitore, dall'ambiente, dal paese e dall'operazione abilitata per quel flusso.

  • Non presumere che ogni credential memorizzato possa essere utilizzato tra diversi processori o metodi di pagamento.
  • Verificare il comportamento di rete-token, account-updater, portabilità, utilizzo ricorrente e cancellazione per l'account di destinazione prima dell'implementazione in produzione.
  • Mantenere i dati PAN, CVV, token del fornitore e credenziali private fuori dai log e dai metadati dell'applicazione.
  • Memorizzare il cliente, lo scopo del consenso, l'ora di tokenizzazione, lo stato del credential e l'uso futuro consentito nel vostro sistema di riferimento.
  • Supportare la revoca, la scadenza, la sostituzione e la cancellazione del credential del cliente senza trattare automaticamente un token cancellato come un abbonamento annullato.

Usa il Provider capabilities catalog Per il supporto di connessioni pubblicate, verificare il comportamento del credential specifico per l'account con il vostro Technical Account Manager di DEUNA.

Integrazione: Utilizzo di SDK di DEUNA#

L'integrazione del Vault di Pagamento è attraverso SDK di DEUNA.

In ambienti web, il widget può essere aperto in un elemento HTML di destinazione o visualizzato come modale.

Scegli la tua piattaforma SDK:

Caratteristiche

  • L'SDK espone diversi Risponde alle chiamate che permettono al commerciante di reagire dinamicamente ad eventi importanti all'interno del flusso di pagamento, come ad esempio:
    • Quando l'utente chiude il widget.
    • Quando una carta o le credenziali di pagamento vengono tokenizzate con successo.
    • Quando un tentativo di tokenizzazione fallisce.
  • Il Vault di Pagamento può essere reso incorporato o come modal.

Ulteriori informazioni

Maggiori informazioni sull'integrazione del modulo di pagamento:

  • Verificare il tipo di evento e il marchio di carte: Il Vault riconosce i marchi di carte dai metadati di eventi.
  • Sconto applicato se la carta è Mastercard dal commerciante: Se la carta è Mastercard, viene applicato uno sconto del 20% sul carrello. Questa azione è eseguita interamente dalla tua app.
  • Aggiornamento dell'ordine: Dopo aver applicato uno sconto, la tua domanda è responsabile dell'aggiornamento dell'ordine utilizzando il punto finale DEUNA Update Order.
  • Notifica al widget per aggiornare l'ordine e le rate: Le modifiche dello stato di un ordine vengono comunicate utilizzando i callback SDK.
  • Visualizza un tag promozionaleInoltre all'aggiornamento dell'importo dell'ordine e del pagamento, è possibile applicare stili CSS personalizzati al widget attivo utilizzando setCustomStyles(...). Vedi il Guida SDK Web.

Elaborare un pagamento con il credential restituito card_id

Per elaborare un pagamento in DEUNA con dato card_id utilizzare API acquisto.

Esempio richiesta curl

JavaScript
const requestBody = {
    payer_info: {
        email: "eposada@deuna.com"
    },
    payment_source: {
        method_type: "credit_card",
        card_info: {
            card_id: "8d369b6e-113a-4640-9e63-dc29957fc86a",
            installment: {
            	plan_option_id: "<uuid que se retorna en el postMessage 'onInstallmentSelected'>"
            }
        }
    },
    // ... Remaining of the request body
};

fetch('https://api.sandbox.deuna.io/v2/merchants/orders/purchase', {
    method: 'POST',
    headers: {
        'x-api-key': '<YOUR_PRIVATE_API_KEY>',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(requestBody)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl --location 'https://api.sandbox.deuna.io/v2/merchants/orders/purchase' \
--header 'x-api-key: YOUR_PRIVATE_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "payer_info": {
        "email": "foo@bar.com"
    },
    "payment_source": {
        "method_type": "credit_card",
        "card_info": {
            "card_id": "8d369b6e-113a-4640-9e63-dc29957fc86a"
        }
    },
    "order": {
        "order_id": "testapi-0003",
        "currency": "MXN",
        "items": [
          {
              "id": "216",
              "name": "10 Cellphones",
              "description": "",
              "options": "string option",
              "total_amount": {
                  "original_amount": 2000,
                  "amount": 2000,
                  "currency": "MXN",
                  "currency_symbol": "$"
              },
              "unit_price": {
                  "amount": 200,
                  "currency": "MXN",
                  "currency_symbol": "$"
              },
              "tax_amount": {
                  "amount": 0,
                  "currency": "MXN",
                  "currency_symbol": "$"
              },
              "quantity": 1,
              "uom": "string",
              "upc": "string",
              "sku": "",
              "isbn": "",
              "brand": "",
              "manufacturer": "",
              "category": "",
              "color": "",
              "size": "",
              "weight": {
                  "amount": 0,
                  "unit": "kg"
              },
              "image_url": "https://images-staging.getduna.com/95463fb5-6279-4ec3-8ff9-fe07aacd2142/db5b698c57654116_domicilio_216_750x750_1662162887.png?d=200x200&format=webp",
              "details_url": "",
              "type": "physcal",
              "taxable": true
          }
        ],
        "sub_total": 2000,
        "total_amount": 2000,
        "store_code": "all",
        "billing_address": {
            "address1": "presa angostura 36PH",
            "address2": "",
            "address_type": "home",
            "city": "CDMX",
            "country_code": "MX",
            "email": "foo@bar.com",
            "first_name": "efren",
            "identity_document": "162915134",
            "is_default": true,
            "last_name": "garcia",
            "phone": "+525222222222",
            "state_code": "MX",
            "state_name": "miguel hidalgo",
            "zipcode": "11500"
        }
    }
}'
PHP
$curl = curl_init();

$requestBody = json_encode(array(
    "payer_info" => array(
        "email" => "foo@bar.com"
    ),
    "payment_source" => array(
        "method_type" => "credit_card",
        "card_info" => array(
            "card_id" => "8d369b6e-113a-4640-9e63-dc29957fc86a"
        )
    ),
    // Aquí puedes continuar añadiendo el resto del cuerpo de la solicitud
    "order" => array(
        "order_id" => "testapi-0003",
        "currency" => "MXN",
        "items" => array(
            // Aquí van los detalles de los items
        ),
        // Continúa con el resto de los detalles del pedido
    )
));

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.sandbox.deuna.io/v2/merchants/orders/purchase",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => $requestBody, // Aquí se utiliza la variable
  CURLOPT_HTTPHEADER => array(
    "x-api-key: YOUR_PRIVATE_API_KEY", // Asegúrate de reemplazar con tu API key real
    "Content-Type: application/json"
  ),
));


$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
Ruby
require 'uri'
require 'net/http'
require 'json'

url = URI("https://api.sandbox.deuna.io/v2/merchants/orders/purchase")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request_body = {
    payer_info: {
        email: "foo@bar.com"
    },
    payment_source: {
        method_type: "credit_card",
        card_info: {
            card_id: "8d369b6e-113a-4640-9e63-dc29957fc86a"
        }
    }
    # ... Agrega aquí el resto del cuerpo de la solicitud
}.to_json

request = Net::HTTP::Post.new(url)
request["x-api-key"] = "YOUR_PRIVATE_API_KEY" # Reemplaza con tu API key
request["Content-Type"] = "application/json"
request.body = request_body

response = http.request(request)
puts response.read_body
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.json.JSONObject;

public class Main {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newHttpClient();
        
        JSONObject requestBody = new JSONObject()
            .put("payer_info", new JSONObject().put("email", "foo@bar.com"))
            .put("payment_source", new JSONObject()
                .put("method_type", "credit_card")
                .put("card_info", new JSONObject().put("card_id", "8d369b6e-113a-4640-9e63-dc29957fc86a")))
            // ... Agrega aquí el resto del cuerpo de la solicitud

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.sandbox.deuna.io/v2/merchants/orders/purchase"))
            .header("x-api-key", "YOUR_PRIVATE_API_KEY") // Reemplaza con tu API key
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(requestBody.toString()))
            .build();

        client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
            .thenApply(HttpResponse::body)
            .thenAccept(System.out::println)
            .join();
    }
}

Demo

Dopo aver integrato il Vault di Pagamento, l'esperienza è simile alla seguente demo: