Checkout
Crea un Checkout Conekta e intégralo en tu sitio.
Es una solución de cobro práctica y rápida que te permite vender online, ofreciendo todos los medios de pago disponibles, incluso Meses Sin interés. Siguiendo nuestras herramientas y tutoriales de integración, podrás sumarlo a tu sitio sin ningún inconveniente.
Puedes crear:
- Checkout embebido -> Es el checkout de Conekta, pero el cliente nunca sale de tu sitio. Lo mostramos como un iframe dentro de la experiencia de cobro de tu tienda en línea.
- Checkout redireccionado -> Es el mismo Checkout Conekta, solamente que lo mostramos en una pestaña distinta al de tu sitio en línea. El cliente paga y continúa el flujo de compra en tu tienda.
En el siguiente paso a paso te mostraremos como puedes crear los mismos utilizando las APIs de Conekta. A su vez, te compartimos un video explicativo del proceso a continuación.
Primeros pasos
- Instalar e incluir alguna de nuestras SDKs en tu proyecto.
- Utilizar tu propia llave privada. Si no la conoces, puedes obtenerla aquí.
Paso 1 - Crea un "customer"
curl -H "Accept: application/vnd.conekta-v2.0.0+json" \
-H "Content-type: application/json" \
-u key_XXXXXXXXXXXX: \
-X POST -d '{
"name": "Juan Perez",
"email": "[email protected]"
}' https://api.conekta.io/customers
<?php
//Inicialización del cliente Conekta a través de la adición de la llave privada y versión del API.
require_once("/path/to/lib/Conekta.php");
\Conekta\Conekta::setApiKey("key_eYvWV7gSDkNYXsmr");
\Conekta\Conekta::setApiVersion("2.0.0");
$validCustomer = [
'name' => "Payment Link Name",
'email' => "Juan Perez"
];
$customer = Customer::create($validCustomer);
# Inicialización del cliente Conekta a través de la adición de la llave privada y versión del API
import conekta
conekta.api_key = "key_eYvWV7gSDkNYXsmr"
conekta.api_version = "2.0.0"
# Para los siguientes pasos en la integración un token_id de prueba se provee.
# Para tener acceso al token que se generó en el paso 1.0 → es necesario accesarlo en el objeto conektaSuccessResponseHandler["id"]
# Generación del cliente y la información de pago.
try:
customer = conekta.Customer.create({
'name': 'Fulanito Pérez',
'email': '[email protected]',
'phone': '5555555555'
})
except conekta.ConektaError as e:
print(e.message)
# Inicialización del cliente Conekta a través de la adición de la llave privada y versión del API
require "conekta"
Conekta.api_key = "key_eYvWV7gSDkNYXsmr" # <-- Mock private key, please use YOUR personal private key
Conekta.api_version = "2.0.0"
valid_customer = {
name: "Payment Link Name",
email: "[email protected]"
}
customer = Conekta::Customer.create(valid_customer)
//Inicialización del cliente Conekta a través de la adición de la llave privada y versión del API.
var conekta = require('conekta');
conekta.api_key = 'key_eYvWV7gSDkNYXsmr'; // <-- Mock private key, please use YOUR personal private key
conekta.api_version = '2.0.0';
let customer = conekta.Customer.create({
name: "Payment Link Name",
email: "[email protected]"
}, function(err, res) {
if(err){
console.log(err);
return;
}
console.log(res.toObject());
});
using Newtonsoft.Json;
using conekta;
conekta.Api.apiKey = "key_eYvWV7gSDkNYXsmr";
conekta.Api.version = "2.0.0";
var validCustomer = new
{
name = "Payment Link Name",
email = "[email protected]"
};
var customer = new Customer().create(validCustomer);
import (
"fmt"
conekta "github.com/conekta/conekta-go"
"github.com/conekta/conekta-go/customer"
)
conekta.APIKey = "key_pMcnDF4zFyWKyLG15LuqwA"
customerParams := &conekta.CustomerParams{
Name: "Payment Link Name",
Email: "[email protected]",
}
customerResponse, err := customer.Create(customerParams)
//Inicialización del cliente Conekta a través de la adición de la llave privada y versión del API.
Conekta.setApiKey("key_eYvWV7gSDkNYXsmr"); // <-- Mock private key, please use YOUR personal private key
com.conekta.Conekta.apiVersion = "2.0.0"
Customer customer = Customer.create(
new JSONObject("{"
+ "'name': 'Fulanito Pérez', "
+ "'email': '[email protected]'"
+ "}"
)
);
Esto regresa una respuesta como la siguiente:
{
"livemode": false,
"name": "Vicente Mendoza",
"email": "[email protected]",
"id": "cus_2neG7CYEdeda9BBGU",
"object": "customer",
"created_at": 1588684774,
"corporate": false,
"custom_reference": ""
}
<?php
echo $customer->livemode;
echo $customer->name;
echo $customer->email;
echo $customer->id;
echo $customer->object;
print(customer.livemode);
print(customer.name);
print(customer.email);
print(customer.id);
puts customer.livemode
puts customer.name
puts customer.email
puts customer.id
puts customer.object
console.log(customer.livemode);
console.log(customer.name);
console.log(customer.email);
console.log(customer.id);
Console.WriteLine(customer.livemode);
Console.WriteLine(customer.name);
Console.WriteLine(customer.email);
Console.WriteLine(customer.id);
Console.WriteLine(customer._object);
fmt.Println("Livemode: %v\n", customerResponse.Livemode)
fmt.Println("Name: %v\n", customerResponse.Name)
fmt.Println("Email: %v\n", customerResponse.Email)
fmt.Println("ID: %v\n", customerResponse.ID)
System.out.println(customer.livemode);
System.out.println(customer.name);
System.out.println(customer.email);
System.out.println(customer.id);
Paso 2 - Crear una orden vacía con opciones de checkout
El siguiente snippet incorpora todas las partes del paso 1. Copia y pega el siguiente fragmento de código en tu sandbox y corre el código para crear una orden y un checkout object al mismo tiempo.
curl -H "Accept: application/vnd.conekta-v2.0.0+json" \
-H "Content-type: application/json" \
-u key_XXXXXXXXXXX: \
-X POST -d '{
"currency": "MXN",
"customer_info": {
"customer_id": "cus_2nHprwaWFn7QJ21Lj"
},
"line_items": [{
"name": "Box of Cohiba S1s",
"unit_price": 35000,
"quantity": 1
}],
"shipping_lines": [{
"amount": 0
}],
"checkout": {
"allowed_payment_methods": ["cash", "card", "bank_transfer"],
"monthly_installments_enabled": true,
"monthly_installments_options": [3, 6, 9, 12]
},
"shipping_contact": {
"phone": "+5215555555555",
"receiver": "Marvin Fuller",
"address": {
"street1": "Nuevo Leon 4",
"country": "MX",
"postal_code": "06100"
}
}
}' https://api.conekta.io/orders
<?php
$validOrderWithCheckout = array(
'line_items'=> array(
array(
'name'=> 'Box of Cohiba S1s',
'description'=> 'Imported From Mex.',
'unit_price'=> 120000,
'quantity'=> 1,
'sku'=> 'cohbs1',
'category'=> 'food',
'tags' => array('food', 'mexican food')
)
),
'checkout' => array(
'allowed_payment_methods' => array("cash", "card", "bank_transfer"),
'monthly_installments_enabled' => true,
'monthly_installments_options' => array(3, 6, 9, 12)
),
'customer_info' => array(
'customer_id' => 'cus_2nHprwaWFn7QJ21Lj'
),
'currency' => 'mxn',
'metadata' => array('test' => 'extra info')
);
$order = Order::create($validOrderWithCheckout);
valid_order_with_checkout = {
line_items: [
{
name: 'Box of Cohiba S1s',
description: 'Imported From Mex.',
unit_price: 120000,
quantity: 1,
sku: 'cohbs1',
category: 'food',
tags: ['food', 'mexican food']
}
],
checkout: {
allowed_payment_methods: ["cash", "card", "bank_transfer"],
monthly_installments_enabled: true,
monthly_installments_options: [3, 6, 9, 12]
},
customer_info: {
customer_id: 'cus_2nHprwaWFn7QJ21Lj'
},
currency: 'mxn',
metadata: {test: 'extra info'}
}
order = Conekta::Order.create(valid_order_with_checkout)
puts order.inspect
checkout_order_object = {
"currency": "MXN",
"customer_info": {
"customer_id": "cus_2o3FvMEBiKitVK1vQ"
},
"line_items": [{
"name": "Box of Cohiba S1s",
"unit_price": 300000,
"quantity": 1
}],
"shipping_lines": [{
"amount": 0
}],
"checkout": {
"allowed_payment_methods": ["cash", "card", "bank_transfer"],
"force_3ds_flow": False,
"monthly_installments_enabled": False,
"monthly_installments_options": [3,6,9,12,18],
"expires_at": 1609891200
},
"shipping_contact": {
"phone": "+5215555555555",
"receiver": "Marvin Fuller",
"address": {
"street1": "Nuevo Leon 4",
"country": "MX",
"postal_code": "06100"
}
}
}
order = self.client.Order.create(order)
checkout = order.createCheckout(checkout_order_object)
let checkoutOrderObject = {
"currency": "MXN",
"customer_info": {
"customer_id": "cus_2o3FvMEBiKitVK1vQ"
},
"line_items": [{
"name": "Box of Cohiba S1s",
"unit_price": 300000,
"quantity": 1
}],
"checkout": {
"allowed_payment_methods": ["cash", "card", "bank_transfer"],
"force_3ds_flow": false,
"monthly_installments_enabled": false,
"monthly_installments_options": [3,6,9,12,18],
"expires_at": 1609891200
},
"shipping_contact": {
"phone": "5555555555",
"receiver": "Marvin Fuller"
}
};
conekta.Order.create(checkoutOrderObject, function(err, res) {
if(err){
console.log(err);
return;
}
console.log(res.toObject());
});
using Newtonsoft.Json;
var validOrderWithCheckout = new
{
line_items = new
[
new
{
name = "Box of Cohiba S1s",
description = "Imported From Mex.",
unit_price = 120000,
quantity = 1,
sku = "cohbs1",
category = "food",
tags = new string[]
{
"food",
"mexican food"
}
}
],
checkout = new
{
type = "Integration",
allowed_payment_methods = new string[]
{
"cash",
"card",
"bank_transfer"
},
monthly_installments_enabled = true,
monthly_installments_options = new int[]
{
3,
6,
9,
12
}
},
customer_info = new
{
customer_id = "cus_2oAokFrKM7CyVxGJm"
},
currency: "mxn",
metadata: new
{
test = "extra info"
}
};
var order = new Order()
.create(JsonConvert.SerializeObject(validOrderWithCheckout));
Console.WriteLine(order.id);
orderParams := &conekta.OrderParams{
Currency: "MXN",
CustomerInfo: &CustomerParams{
ID: customerResponse.ID,
},
LineItems: []*LineItemsParams{
{
Name: "Box of Cohiba S1s",
UnitPrice: 300000,
Quantity: 1,
},
},
Checkout: &OrderCheckoutParams{
Force3dsFlow: false,
MonthlyInstallmentsEnabled: false,
MonthlyInstallmentsOptions: []int64{3, 6, 9, 12, 18},
ExpiresAt: time.Now().Unix() + int64(259200) + int64(rand.Float64()*3600),
AllowedPaymentMethods: []string{"cash", "card", "bank_transfer"},
}
}
orderResponse, err := order.Create(orderParams)
try {
Order order = Order.create(
new JSONObject("{ 'currency': 'mxn'," +
" 'customer_info': {" +
" 'customer_id': 'cus_2o3FvMEBiKitVK1vQ'" +
" }," +
" 'line_items': [{" +
" 'name': 'Box of Cohiba S1s'," +
" 'unit_price': 300000," +
" 'quantity': 1," +
" }]," +
" 'checkout': {" +
" 'allowed_payment_methods': ['cash','card','bank_transfer']," +
" 'force_3ds_flow': false," +
" 'monthly_installments_enabled': false," +
" 'monthly_installments_options': [3,6,9,12,18]" +
" 'expired_at': " + (System.currentTimeMillis() / 1000L) + 259200 + "," +
" }," +
" 'shipping_contact': {" +
" 'phone': '5555555555'," +
" 'receiver': 'Marvin Fuller'" +
" }" +
"}")
);
} catch (Conekta::Error e) {
System.out.println(e.details.get(0).message);
}
Esto regresa una respuesta como la siguiente:
{
"livemode": false,
"amount": 35000,
"currency": "MXN",
"payment_status": "paid",
"amount_refunded": 0,
"checkout": {
"id": "42a4c95e-0db2-4ae8-9bb3-ea681acc8281",
"object": "checkout",
"status": "Issued",
"allowed_payment_methods": ["cash", "card", "bank_transfer"],
"needs_shipping_contact": true,
"livemode": true
},
"customer_info": {
"email": "[email protected]",
"name": "Mario Perez",
"corporate": false,
"customer_id": "cus_2nHprwaWFn7QJ21Lj",
"object": "customer_info"
},
"shipping_contact": {
"receiver": "Marvin Fuller",
"phone": "+5215555555555",
"address": {
"street1": "Nuevo Leon 4",
"country": "mx",
"residential": true,
"object": "shipping_address",
"postal_code": "06100"
},
"id": "ship_cont_2nYNo3xT815RRppom",
"object": "shipping_contact",
"created_at": 0
},
"object": "order",
"id": "ord_2nYNo3xT815RRppon",
"metadata": {},
"created_at": 1587129536,
"updated_at": 1587129537,
"line_items": {
"object": "list",
"has_more": false,
"total": 1,
"data": [{
"name": "Box of Cohiba S1s",
"unit_price": 35000,
"quantity": 1,
"object": "line_item",
"id": "line_item_2nYNo3xT815RRppoi",
"parent_id": "ord_2nYNo3xT815RRppon",
"metadata": {},
"antifraud_info": {}
}]
},
"shipping_lines": {
"object": "list",
"has_more": false,
"total": 1,
"data": [{
"amount": 0,
"object": "shipping_line",
"id": "ship_lin_2nYNo3xT815RRppoj",
"parent_id": "ord_2nYNo3xT815RRppon"
}]
}
}
<?php
print_r((array) $order->checkout->allowed_payment_methods); // array("cash", "card", "bank_transfer")
print_r($order->checkout->monthly_installments_enabled); // true
print_r((array) $order->checkout->monthly_installments_options); // array(3, 6, 9, 12)
print_r($order->checkout->object); // 'checkout'
print_r($order->checkout->type); // 'Integration'
puts order.checkout.allowed_payment_methods.inspect
puts order.checkout.monthly_installments_enabled
puts order.checkout.monthly_installments_options.inspect
puts order.checkout.object
puts order.checkout.type
print(order.checkout.allowed_payment_methods)
print(order.checkout.monthly_installments_enabled)
print(order.checkout.monthly_installments_options)
print(order.checkout.object)
print(order.checkout.type)
console.log(order.checkout.allowed_payment_methods)
console.log(order.checkout.monthly_installments_enabled)
console.log(order.checkout.monthly_installments_options)
console.log(order.checkout.object)
console.log(order.checkout.type)
Console.WriteLine(order.checkout.allowed_payment_methods.Length);
Console.WriteLine(order.checkout.monthly_installments_enabled);
Console.WriteLine(order.checkout.monthly_installments_options.Length);
Console.WriteLine(order.checkout._object);
Console.WriteLine(order.checkout.type);
fmt.Println("AllowedPaymentMethod: %v\n", orderResponse.Checkout.AllowedPaymentMethods)
fmt.Println("MonthlyInstallmentsEnabled: %v\n", orderResponse.Checkout.MonthlyInstallmentsEnabled)
fmt.Println("MonthlyInstallmentOptions: %v\n", orderResponse.Checkout.MonthlyInstallmentsOptions)
fmt.Println("Type: %v\n", orderResponse.Checkout.Type)
System.out.println(order.checkout.allowed_payment_methods);
System.out.println(order.checkout.monthly_installments_enabled);
System.out.println(order.checkout.monthly_installments_options);
System.out.println(order.checkout.object);
System.out.println(order.checkout.type);
Paso 3 - Inicializar el iframe
Incrustar el iframe en el checkout
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Checkout</title>
<script type="text/javascript" src="https://pay.conekta.com/v1.0/js/conekta-checkout.min.js"></script>
</head>
<body>
<div id="conektaIframeContainer" style="height: 700px;"></div>
<script type="text/javascript">
window.ConektaCheckoutComponents.Integration({
targetIFrame: "#conektaIframeContainer",
checkoutRequestId: "42a4c95e-0db2-4ae8-9bb3-ea681acc8281", // checkout request id
publicKey: "public_api_key_XXXXXXXX",
options: {},
styles: {},
onFinalizePayment: function(event){
console.log(event);
}
})
</script>
</body>
</html>
Paso 4 - Personalizar estilos
Puedes personalizar el aspecto visual en el Checkout para que mantenga la armonía con tu sitio.
Paso 5 - Meses sin intereses
Puedes configurar el checkout para que pueden funcionar con meses sin intereses si en las peticiones agregas estas dos variables: monthly_installments_enabled para activarlo y monthly_installments_options con los meses habilitados, Ej 3, 6, 9, 12, 18.
Ejemplo:
"checkout": {
"monthly_installments_enabled": true,
"monthly_installments_options": [3, 6, 9, 12, 18],
}
Consideraciones para MSI
- Monto mínimo para meses sin intereses es $300 MXN
- Puedes colocar mínimo 3 meses y máximo 18 meses
- 18 meses únicamente es con Citibanamex
Toma en cuenta la siguiente tabla:
Umbral de Monto (MXN) | MSI |
---|---|
$300-$599 | Permite 3 MSI (todos los bancos) |
$600-$899 | Permite hasta 6 MSI (todos los bancos) |
$900-$1199 | Permite hasta 9 MSI (todos los bancos) |
$1200-$1790 | Permite hasta 12 MSI (todos los bancos) |
$1800-En adelante | Permite hasta 18 MSI (Solo Citibanamex) |
<!-- ORIGINAL PASO 6 -->
<!--
TITULO: Paso 6 - Guardado de tarjetas
TEXTO: Si requiere que el checkout pueda permitir que las tarjetas sean guardadas por el usuario, bastará con habilitar on_demand_enabled al crear la orden en el paso 2. Con esto el usuario en sus posteriores compras no tendrá que volver a introducir su tarjeta.
Siga el siguiente ejemplo
EJEMPLO EN CURL:
curl -H "Accept: application/vnd.conekta-v2.0.0+json" \
-H "Content-type: application/json" \
-u key_XXXXXXXXXXX: \
-X POST -d '{
"currency": "MXN",
"customer_info": {
"customer_id": "cus_2nHprwaWFn7QJ21Lj"
},
"line_items": [{
"name": "Box of Cohiba S1s",
"unit_price": 35000,
"quantity": 1
}],
"shipping_lines": [{
"amount": 0
}],
"checkout": {
"allowed_payment_methods": ["cash", "card", "bank_transfer"],
"monthly_installments_enabled": true,
"monthly_installments_options": [3, 6, 9, 12],
"on_demand_enabled": true
},
"shipping_contact": {
"phone": "+5215555555555",
"receiver": "Marvin Fuller",
"address": {
"street1": "Nuevo Leon 4",
"country": "MX",
"postal_code": "06100"
}
}
}' https://api.conekta.io/orders
EJEMPLO EN PHP
<?php
$validOrderWithCheckout = array(
'line_items'=> array(
array(
'name'=> 'Box of Cohiba S1s',
'description'=> 'Imported From Mex.',
'unit_price'=> 120000,
'quantity'=> 1,
'sku'=> 'cohbs1',
'category'=> 'food',
'tags' => array('food', 'mexican food')
)
),
'checkout' => array(
'allowed_payment_methods' => array("cash", "card", "bank_transfer"),
'monthly_installments_enabled' => true,
'monthly_installments_options' => array(3, 6, 9, 12)
'on_demand_enabled' => true
),
'customer_info' => array(
'name' => 'Juan Perez',
'email' => '[email protected]',
'phone' => '5566982090'
),
'currency' => 'mxn',
'metadata' => array('test' => 'extra info')
);
$order = Order::create($validOrderWithCheckout);
EJEMPLO EN RUBY
valid_order_with_checkout =
{
line_items: [
{
name: 'Box of Cohiba S1s',
description: 'Imported From Mex.',
unit_price: 120000,
quantity: 1,
sku: 'cohbs1',
category: 'food',
tags: ['food', 'mexican food']
}
],
checkout: {
type: 'Integration',
allowed_payment_methods: ["cash", "card", "bank_transfer"],
monthly_installments_enabled: true,
monthly_installments_options: [3, 6, 9, 12],
on_demand_enabled: true
},
customer_info: {
name: 'Juan Perez',
email: '[email protected]',
phone: '5566982090'
},
currency: 'mxn',
metadata: {'test' => 'extra info'}
}
order = Conekta::Order.create(valid_order_with_checkout)
EJEMPLO EN NODE
validOrderWithCheckout =
{
line_items: [
{
name: 'Box of Cohiba S1s',
description: 'Imported From Mex.',
unit_price: 120000,
quantity: 1,
sku: 'cohbs1',
category: 'food',
tags: ['food', 'mexican food']
}
],
checkout: {
type: 'Integration',
allowed_payment_methods: ["cash", "card", "bank_transfer"],
monthly_installments_enabled: true,
monthly_installments_options: [3, 6, 9, 12],
on_demand_enabled: true
},
customer_info: {
name: 'Juan Perez',
email: '[email protected]',
phone: '5566982090'
},
currency: 'mxn',
metadata: {'test' => 'extra info'}
}
conekta.Order.create(validOrderWithCheckout, function(err, res) {
if(err){
console.log(err);
return;
}
console.log(res.toObject());
});
EJEMPLO EN C#
using Newtonsoft.Json;
var validOrderWithCheckout = new
{
line_items = new
[
new
{
name = "Box of Cohiba S1s",
description = "Imported From Mex.",
unit_price = 120000,
quantity = 1,
sku = "cohbs1",
category = "food",
tags = new string[]
{
"food",
"mexican food"
}
}
],
checkout = new
{
type = "Integration",
allowed_payment_methods = new string[]
{
"cash",
"card",
"bank_transfer"
},
monthly_installments_enabled = true,
monthly_installments_options = new int[]
{
3,
6,
9,
12
}
},
customer_info = new
{
customer_id = "cus_2oAokFrKM7CyVxGJm"
},
currency: "mxn",
metadata: new
{
test = "extra info"
}
};
var order = new Order()
.create(JsonConvert.SerializeObject(validOrderWithCheckout));
EJEMPLO EN GO
orderParams := &conekta.OrderParams{
Currency: "MXN",
CustomerInfo: &CustomerParams{
ID: customerResponse.ID,
},
LineItems: []*LineItemsParams{
{
Name: "Box of Cohiba S1s",
UnitPrice: 120000,
Quantity: 1,
},
},
Checkout: &OrderCheckoutParams{
Type: "Integration",
OnDemandEnabled: true,
MonthlyInstallmentsEnabled: true,
MonthlyInstallmentsOptions: []int64{3, 6, 9, 12},
ExpiresAt: time.Now().Unix() + int64(259200) + int64(rand.Float64()*3600),
AllowedPaymentMethods: []string{"cash", "card", "bank_transfer"},
}
}
orderResponse, err := order.Create(orderParams)
EJEMPLO EN JAVA
try {
Order order = Order.create(
new JSONObject("{ 'currency': 'mxn'," +
" 'checkout': {" +
" 'allowed_payment_methods': ['cash','card','bank_transfer']," +
" 'monthly_installments_enabled': false," +
" 'monthly_installments_options': [3,6,9,12,18]," +
" 'on_demand_enabled': true," +
" 'type': 'Integration'" + " }," +
" 'customer_info': {" +
" 'name': 'Juan Perez'," +
" 'email': '[email protected]'," +
" 'phone': '5566982090'" +
" }," +
" 'line_items': [{" +
" 'name': 'Box of Cohiba S1s'," +
" 'unit_price': 300000," +
" 'quantity': 1" +
" }]" +
"}")
);
} catch (Conekta::Error e) {
System.out.println(e.details.get(0).message);
}
PARRAFO 2: En una primer compra el cliente vería una opción para guardar la tarjeta de la siguiente manera, basta con habilitar el checkbox de "¿Deseas guardar la información de tu tarjeta?"
PARRAFO 3: Al realizarse la compra de manera exitosa la tarjeta es guardada y en una segunda compra el cliente podría pagar con la tarjeta guardada.
LAS IMAGENES SON DEL CHECKOUT CON LA IMAGEN GUARDADA
-->
Al realizarse la compra de manera exitosa la tarjeta es guardada y en una segunda compra el cliente podría pagar con la tarjeta guardada.
Paso 6 - Recibir la notificación de pago
Una vez configurado un webhook tu puedes recibir el evento charge.paid y order.paid cada que se reciba un pago exitoso.
¡Listo!
Recuerda cambiar tus llaves pública y privada de pruebas por tus llaves de producción después de realizar pruebas.