Skip to content

Stripe

Stripe es una plataforma integral de infraestructura financiera que permite a las empresas aceptar pagos, gestionar operaciones de ingresos y facilitar el comercio global a través de una línea de productos de API y servicios integrados.

Al integrar Braze y Stripe, puedes:

  • Actualizar los perfiles de usuario en Braze con datos de pago y facturación en tiempo real de Stripe.
  • Desencadenar mensajería en Braze basándote en eventos de Stripe como inicio de prueba, activación de suscripción, cancelación de suscripción y más.
  • Personalizar la mensajería de Braze en función del historial de pagos de un usuario o del estado de facturación recibido mediante webhooks de Stripe.

Requisitos previos

Requisito Descripción
Cuenta de Stripe Se requiere una cuenta de Stripe con acceso a webhooks para aprovechar esta integración.
Transformación de datos de Braze Se necesita una URL de transformación de datos para recibir datos de Stripe.

Integración

Paso 1: Configura la transformación de datos de Braze para aceptar los webhooks de Stripe

En el panel de Braze, ve a Configuración de datos > Transformación de datos.

Selecciona Crear transformación para darle un nombre a tu transformación y, a continuación, elige tu experiencia de edición.

Detalles de transformación con la opción de elegir "Utilizar una plantilla" o "Empezar de cero" para tu experiencia de edición.

Selecciona Utilizar una plantilla para examinar una biblioteca de plantillas, incluidos los ejemplos de transformación de datos. O bien, selecciona Empezar de cero para cargar una plantilla de código predeterminada.

Si empiezas de cero, elige un destino para tu transformación. Todavía puedes insertar una plantilla de código de la biblioteca de plantillas.

Más sobre destinos
  • POST: Track users: Transforma los webhooks de una plataforma de origen en actualizaciones del perfil de usuario, como atributos, eventos o compras.
  • PUT: Update multiple catalog items: Transforma los webhooks de una plataforma de origen en actualizaciones de elementos del catálogo.
  • DELETE: Delete multiple catalog items: Transforma los webhooks de una plataforma de origen en eliminaciones de elementos del catálogo.
  • PATCH: Edit multiple catalog items: Transforma los webhooks de una plataforma de origen en ediciones de elementos del catálogo.
  • POST: Send messages immediately via API Only: Transforma los webhooks de una plataforma de origen para enviar mensajes inmediatos a usuarios designados.

Después de crear tu transformación, verás la vista detallada de la transformación. Aquí puedes ver el webhook más reciente recibido para esta transformación en Webhook details y un espacio para escribir tu código de transformación en Transformation code.

Copia tu URL del webhook para utilizarla en el siguiente paso.

Paso 2: Configura los webhooks de Stripe

Sigue los pasos en la documentación de webhooks de Stripe para configurar un webhook.

Agrega la URL del webhook de tu transformación de datos como la URL de destino y selecciona los tipos de eventos que deseas enviar a Braze. Consulta la documentación de Stripe para obtener una lista completa de los tipos de eventos.

Un ejemplo de configuración de webhook de Stripe.

A continuación, envía un evento de prueba a tu transformación de datos.

Paso 3: Escribe el código de transformación para aceptar los eventos de Stripe que hayas elegido

A continuación, transformarás la carga útil del webhook que se enviará desde Stripe a un valor de retorno de objeto JavaScript.

  1. Actualiza tu transformación de datos y asegúrate de que puedes ver la carga útil de prueba de Stripe en la sección Detalles del webhook.
  2. Actualiza el código de tu transformación de datos para que sea compatible con los eventos de Stripe que hayas elegido.
  3. Selecciona Validate para obtener una vista previa de la salida de tu código y comprobar si es una solicitud /users/track aceptable.
  4. Guarda y activa tu transformación de datos.

Un ejemplo de detalles del webhook y código de transformación.

Formato del cuerpo de la solicitud

Este valor de retorno debe cumplir con el formato del cuerpo de la solicitud del endpoint /users/track:

  • El código de transformación se acepta en el lenguaje de programación JavaScript. Se admite cualquier flujo de control estándar de JavaScript, como la lógica if/else.
  • El código de transformación accede al cuerpo de la solicitud del webhook mediante la variable payload. Esta variable es un objeto que se completa al analizar el JSON del cuerpo de la solicitud.
  • Se admite cualquier característica compatible con nuestro endpoint /users/track, incluyendo:
    • Objetos de atributos de usuario, objetos de eventos y objetos de compra
    • Atributos anidados y propiedades de eventos personalizados anidadas
    • Actualizaciones de grupos de suscripción
    • Dirección de correo electrónico como identificador

Paso 4: Publica tu webhook de Stripe

Después de escribir tu transformación de datos, selecciona Validate para asegurarte de que el código de tu transformación de datos tiene el formato correcto y funcionará como se espera. Luego, guarda y activa tu transformación de datos. Después de activarla, los datos de eventos personalizados se registrarán en el perfil de un usuario cuando complete el evento.

Un evento personalizado de Stripe "Charge Succeeded" en un perfil de usuario de Braze.

Ejemplo de carga útil de webhook de Stripe

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
{
 "headers": {
   "Version": "HTTP/1.1",
   "X-Datadog-Trace-Id": "9124157397962821303",
   "X-Datadog-Parent-Id": "9124157397962821303",
   "X-Datadog-Sampling-Priority": "2",
   "Host": "xxx",
   "X-Request-Id": "xxx",
   "X-Real-Ip": "165.159.72.690",
   "X-Forwarded-For": "161.123.56.890",
   "X-Forwarded-Host": "xxx",
   "X-Forwarded-Port": "443",
   "X-Forwarded-Proto": "https",
   "X-Forwarded-Scheme": "https",
   "X-Scheme": "https",
   "X-Original-Forwarded-For": "12.345.678.123",
   "Cf-Ray": "9470a06172f8816e-IAD",
   "Cache-Control": "no-cache",
   "User-Agent": "Stripe/1.0 (+https://stripe.com/docs/webhooks)",
   "Accept-Encoding": "gzip",
   "Cf-Connecting-Ip": "12.123.456.789",
   "Cf-Visitor": "{\"scheme\":\"https\"}",
   "X-Worker-Executions": "1",
   "Cf-Worker": "xxx",
   "X-Fastly-Geoloc-Countrycode": "US",
   "Stripe-Signature": "t=xxx,v1=xxxx,v0=xxxx",
   "Cf-Ew-Via": "15",
   "Cdn-Loop": "cloudflare; loops=1; subreqs=1",
   "Accept": "*/*; q=0.5, application/xml"
 },
 "payload": {
   "id": "evt_3RTqw0RMEOaIvYpU1k2TFajH",
   "object": "event",
   "api_version": "2025-04-30.basil",
   "created": 1748465448,
   "data": {
     "object": {
       "id": "ch_3RTqw0RMEOaIvYpU1M9ZYtjP",
       "object": "charge",
       "amount": 100,
       "amount_captured": 100,
       "amount_refunded": 0,
       "application": null,
       "application_fee": null,
       "application_fee_amount": null,
       "balance_transaction": null,
       "billing_details": {
         "address": {
           "city": null,
           "country": null,
           "line1": null,
           "line2": null,
           "postal_code": null,
           "state": null
         },
         "email": null,
         "name": null,
         "phone": null,
         "tax_id": null
       },
       "calculated_statement_descriptor": "Stripe",
       "captured": true,
       "created": 1748465448,
       "currency": "usd",
       "customer": "cus_SOeDf39aosGb97",
       "description": "(created by Stripe CLI)",
       "destination": null,
       "dispute": null,
       "disputed": false,
       "failure_balance_transaction": null,
       "failure_code": null,
       "failure_message": null,
       "fraud_details": {},
       "livemode": false,
       "metadata": {},
       "on_behalf_of": null,
       "order": null,
       "outcome": {
         "advice_code": null,
         "network_advice_code": null,
         "network_decline_code": null,
         "network_status": "approved_by_network",
         "reason": null,
         "risk_level": "normal",
         "risk_score": 9,
         "seller_message": "Payment complete.",
         "type": "authorized"
       },
       "paid": true,
       "payment_intent": "pi_3RTqw0RMEOaIvYpU1pQl3Lmp",
       "payment_method": "pm_1RTqw0RMEOaIvYpU5VE8HFlp",
       "payment_method_details": {
         "card": {
           "amount_authorized": 100,
           "authorization_code": null,
           "brand": "visa",
           "checks": {
             "address_line1_check": null,
             "address_postal_code_check": null,
             "cvc_check": "pass"
           },
           "country": "US",
           "exp_month": 5,
           "exp_year": 2026,
           "extended_authorization": {
             "status": "disabled"
           },
           "fingerprint": "HAKdyqJ9xh2YhbzT",
           "funding": "credit",
           "incremental_authorization": {
             "status": "unavailable"
           },
           "installments": null,
           "last4": "4242",
           "mandate": null,
           "multicapture": {
             "status": "unavailable"
           },
           "network": "visa",
           "network_token": {
             "used": false
           },
           "network_transaction_id": "726575100121113",
           "overcapture": {
             "maximum_amount_capturable": 100,
             "status": "unavailable"
           },
           "regulated_status": "unregulated",
           "three_d_secure": null,
           "wallet": null
         },
         "type": "card"
       },
       "radar_options": {},
       "receipt_email": null,
       "receipt_number": null,
       "receipt_url": "https://pay.stripe.com/receipts/payment/xxx",
       "refunded": false,
       "review": null,
       "shipping": null,
       "source": null,
       "source_transfer": null,
       "statement_descriptor": null,
       "statement_descriptor_suffix": null,
       "status": "succeeded",
       "transfer_data": null,
       "transfer_group": null
     }
   },
   "livemode": false,
   "pending_webhooks": 3,
   "request": {
     "id": "req_jqtL1Q6CPaNx8x",
     "idempotency_key": "f0f9aee4-a889-4fcc-bc2e-fa41fa426f05"
   },
   "type": "charge.succeeded"
 }
}

Casos de uso de Data Transformation

Los siguientes son plantillas de ejemplo creadas con nuestra carga útil de webhook de Stripe de ejemplo. Estas plantillas pueden utilizarse como punto de partida. Puedes empezar desde cero o eliminar componentes específicos como consideres conveniente.

En esta plantilla de ejemplo, estamos registrando un evento personalizado en el perfil de Braze. El tipo de evento se enviará como nombre del evento personalizado, y el objeto de datos se pasará como propiedades del evento.

Caso de uso: cliente como identificador

En esta plantilla de ejemplo, estamos usando el campo customer como identificador.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/* This template is based on the source platform's documentation here: https://stripe.com/docs/webhooks


/* Braze's /users/track endpoint expects timestamps in an ISO 8601 format. To use the Unix timestamp within Stripe's charge succeeded event payload as the event timestamp in Braze must first be converted to ISO 8601. This can be done with the following code:
let unixTimestamp = payload.data.object.created;
let dateObj = new Date(unixTimestamp * 1000);
let isoString = dateObj.toISOString();


/* defines a variable 'brazecall' that will hold the request payload for the /users/track request
let brazecall;


/* if the type is charge.succeeded and customer field is not null, build the /users/track request to log an event to the user profile
if (payload.type == "charge.succeeded" && payload.data.object.customer) {
 brazecall = {
   "events": [
     {
       "external_id": payload.data.object.customer,
       "name": "Charge Succeeded",
       "time": isoString,
       "properties": {
         "amount": payload.data.object.amount,
         "paid": payload.data.object.paid,
         "status": payload.data.object.status
       }
     }
   ]
 };
}
/* After the /users/track request is assigned to brazecall, you will want to explicitly return brazecall to create an output
return brazecall;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "events": [
    {
      "external_id": "[email protected]",
      "name": "Charge Succeeded",
      "time": "2025-05-28T18:21:39.527Z",
      "properties": {
        "amount": 100,
    "paid":true,
    "Status":"succeeded"
    }
   }
  ]
}

Monitorización y solución de problemas

Consulta Monitorizar tu transformación para obtener más información sobre la monitorización y la solución de problemas de tu transformación.

New Stuff!