Documentazione Webhook

Questi webhook vengono inviati al tuo endpoint configurato ogni volta che si verificano eventi rilevanti per le transazioni e le sottoscrizioni. È fondamentale che il tuo sistema riceva e processi correttamente questi webhook per mantenere i dati sincronizzati e gestire correttamente il ciclo di vita degli ordini e delle sottoscrizioni.


1. charge.dispute.created

Descrizione: Questo evento viene inviato quando un cliente avvia una contestazione (dispute/chargeback) per un pagamento. Questo può accadere per vari motivi (es. transazione non riconosciuta, prodotto/servizio non ricevuto, ecc.).

Esempio JSON Payload:

{
  "object": {
    "id": "du_1SmDrw4WQf8bHmbTiD2XnPPf",
    "object": "dispute",
    "amount": 14640,
    "balance_transaction": "txn_1SmDsC4WQf8bHmbTJ8ChVwvu",
    "balance_transactions": [
      {
        "id": "txn_1SmDsC4WQf8bHmbTJ8ChVwvu",
        "object": "balance_transaction",
        "amount": -14640,
        "available_on": 1767619863,
        "balance_type": "payments",
        "created": 1767619863,
        "currency": "eur",
        "description": "Chargeback withdrawal for py_3SfhHu4WQf8bHmbT1XwxNweJ",
        "exchange_rate": null,
        "fee": 350,
        "fee_details": [
          {
            "amount": 350,
            "application": null,
            "currency": "eur",
            "description": "Dispute fee",
            "type": "stripe_fee"
          }
        ],
        "net": -14990,
        "reporting_category": "dispute",
        "source": "du_1SmDrw4WQf8bHmbTiD2XnPPf",
        "status": "available",
        "type": "adjustment"
      }
    ],
    "charge": "py_3SfhHu4WQf8bHmbT1XwxNweJ",
    "created": 1767619848,
    "currency": "eur",
    "enhanced_eligibility_types": [],
    "evidence": {
      "access_activity_log": null,
      "billing_address": null,
      "cancellation_policy": null,
      "cancellation_policy_disclosure": null,
      "cancellation_rebuttal": null,
      "customer_communication": null,
      "customer_email_address": null,
      "customer_name": null,
      "customer_purchase_ip": null,
      "customer_signature": null,
      "duplicate_charge_documentation": null,
      "duplicate_charge_explanation": null,
      "duplicate_charge_id": null,
      "enhanced_evidence": {},
      "product_description": null,
      "receipt": null,
      "refund_policy": null,
      "refund_policy_disclosure": null,
      "refund_refusal_explanation": null,
      "service_date": null,
      "service_documentation": null,
      "shipping_address": null,
      "shipping_carrier": null,
      "shipping_date": null,
      "shipping_documentation": null,
      "shipping_tracking_number": null,
      "uncategorized_file": null,
      "uncategorized_text": null
    },
    "evidence_details": {
      "due_by": 0,
      "enhanced_eligibility": {},
      "has_evidence": false,
      "past_due": false,
      "submission_count": 0
    },
    "is_charge_refundable": false,
    "livemode": true,
    "metadata": {},
    "payment_intent": "pi_3SfhHu4WQf8bHmbT1MxdpTdV",
    "reason": "insufficient_funds",
    "status": "lost"
  },
  "previous_attributes": null
}

Campi Chiave e Azioni per il Merchant:


2. checkout.session.completed

Descrizione: Questo evento molto importante viene inviato quando una sessione di Checkout è completata con successo. Significa che il cliente ha completato il flusso di pagamento, il pagamento è stato autorizzato (o è andato a buon fine immediatamente per metodi di pagamento come carte di debito dirette, alcuni wallet digitali, ecc.). È il segnale che devi considerare l’ordine come “pagato” e procedere con l’erogazione del prodotto/servizio.

Esempio JSON Payload:

{
  "id": "evt_1abc2E2eZvKYlo2C45abc67e",
  "object": "event",
  "api_version": "2020-08-27",
  "created": 1678887000,
  "data": {
    "object": {
      "id": "cs_test_a1B2cDeFgHiJkLmNoPqRsTuVwXyZ0",
      "object": "checkout.session",
      "allow_promotion_codes": null,
      "amount_subtotal": 3000,
      "amount_total": 3000,
      "billing_address_collection": "auto",
      "cancel_url": "https://example.com/checkout/cancel?session_id={CHECKOUT_SESSION_ID}",
      "client_reference_id": null,
      "currency": "eur",
      "customer": "cus_AbCdEfGhIjKlMnOpQrStUvWxYz0",
      "customer_details": {
        "address": {
          "city": null,
          "country": "IT",
          "line1": null,
          "line2": null,
          "postal_code": null,
          "state": null
        },
        "email": "[email protected]",
        "name": "Test Customer",
        "phone": null,
        "tax_exempt": "none",
        "tax_ids": []
      },
      "customer_email": null,
      "livemode": false,
      "locale": null,
      "metadata": {
        "orderId": "ORDER-1234",
        "transactionId": "testTxnMultiProduct"
      },
      "mode": "payment",
      "payment_intent": "pi_3abc2F2eZvKYlo2C56abc78f",
      "payment_link": null,
      "payment_method_options": {},
      "payment_method_types": [
        "card"
      ],
      "payment_status": "paid",
      "recovered_from": null,
      "setup_intent": null,
      "shipping_address_collection": null,
      "shipping_options": [],
      "shipping_rate": null,
      "status": "complete",
      "submit_type": null,
      "subscription": null,
      "success_url": "https://example.com/checkout/success?session_id={CHECKOUT_SESSION_ID}",
      "total_details": {
        "amount_discount": 0,
        "amount_shipping": 0,
        "amount_tax": 0
      },
      "total_line_items": 1
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "checkout.session.completed"
}

Campi Chiave e Azioni per il Merchant:

Azioni per il Merchant:

  1. Verifica payment_status: "paid": Assicurati sempre che data.object.payment_status sia "paid".
  2. Trova/Crea Ordine: Utilizza i data.object.metadata (es. orderId) per trovare l’ordine corrispondente nel tuo sistema. Se non esiste, potrebbe esserci un problema (ma in genere dovresti aver creato un ordine prima di reindirizzare al checkout). Se necessario, potresti creare un ordine nel tuo sistema basandoti sui dati della sessione (prodotti, quantità, cliente, ecc.).
  3. Aggiorna lo Stato dell’Ordine: Imposta lo stato dell’ordine nel tuo sistema come “Pagato”, “In elaborazione”, “Confermato” o uno stato simile che indichi che il pagamento è andato a buon fine e l’ordine può essere processato.
  4. Associa Cliente (se nuovo): Se è un nuovo cliente, associa l’ID cliente (data.object.customer) al cliente nel tuo sistema.
  5. Gestisci la Sottoscrizione (se presente): Se data.object.subscription non è null, significa che è stata creata una sottoscrizione. Salva l’ID della sottoscrizione (data.object.subscription) e associalo all’utente/cliente nel tuo sistema. Potresti dover attivare l’accesso al servizio/prodotto sottoscritto.
  6. Invia Email di Conferma: Invia un’email di conferma d’ordine al cliente.

3. customer.subscription.deleted

Descrizione: Questo evento viene inviato quando una sottoscrizione viene cancellata.

Esempio JSON Payload:

{
  "id": "evt_1abc2F2eZvKYlo2C67abc89g",
  "object": "event",
  "api_version": "2020-08-27",
  "created": 1678887600,
  "data": {
    "object": {
      "id": "sub_AbCdEfGhIjKlMnOpQrStUvWxYz1",
      "object": "subscription",
      "application_fee_percent": null,
      "automatic_tax": {
        "enabled": false
      },
      "billing_cycle_anchor": 1678887600,
      "billing_thresholds": null,
      "cancel_at": null,
      "cancel_at_period_end": false,
      "canceled_at": 1678887600,
      "collection_method": "charge_automatically",
      "created": 1678887600,
      "currency": "eur",
      "current_period_end": 1681569600,
      "current_period_start": 1678887600,
      "customer": "cus_AbCdEfGhIjKlMnOpQrStUvWxYz0",
      "days_until_due": null,
      "default_payment_method": "pm_1abc2G2eZvKYlo2C78abc90h",
      "default_source": null,
      "default_tax_rates": [],
      "discount": null,
      "ended_at": 1678887600,
      "items": {
        "object": "list",
        "data": [
          {
            "id": "si_1abc2H2eZvKYlo2C89abca0i",
            "object": "subscription_item",
            "billing_thresholds": null,
            "created": 1678887600,
            "metadata": {},
            "plan": {
              "id": "price_1R14Hi4Y0rDkdD0j0wJm6iRC", // Price ID del piano mensile "Test Product 1"
              "object": "plan",
              // ... (dettagli del piano) ...
            },
            "price": {
              "id": "price_1R14Hi4Y0rDkdD0j0wJm6iRC", // Price ID del piano mensile "Test Product 1"
              "object": "price",
              // ... (dettagli del prezzo) ...
            },
            "quantity": 1,
            "subscription": "sub_AbCdEfGhIjKlMnOpQrStUvWxYz1",
            "tax_rates": []
          }
        ],
        "has_more": false,
        "total_count": 1,
        "url": "/v1/subscription_items?subscription=sub_AbCdEfGhIjKlMnOpQrStUvWxYz1"
      },
      "latest_invoice": "in_1abc2I2eZvKYlo2C90abc12j",
      "livemode": false,
      "metadata": {
        "orderId": "ORDER-1234",
        "transactionId": "testTxnMultiProduct"
      },
      "next_pending_invoice_item_invoice": null,
      "pause_collection": null,
      "payment_settings": {
        "payment_method_options": null,
        "payment_method_types": null
      },
      "pending_invoice_item_interval": null,
      "pending_setup_intent": null,
      "pending_update": null,
      "plan": { // Deprecated, use items.data[0].plan
        "id": "price_1R14Hi4Y0rDkdD0j0wJm6iRC",
        // ... (dettagli del piano) ...
      },
      "price": { // Deprecated, use items.data[0].price
        "id": "price_1R14Hi4Y0rDkdD0j0wJm6iRC",
        // ... (dettagli del prezzo) ...
      },
      "proration_behavior": "create_prorations",
      "start_date": 1678887600,
      "status": "canceled",
      "transfer_data": null,
      "trial_end": null,
      "trial_start": null
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "customer.subscription.deleted"
}

Campi Chiave e Azioni per il Merchant:

Azioni per il Merchant:

  1. Trova la Sottoscrizione: Utilizza data.object.id per trovare la sottoscrizione corrispondente nel tuo sistema.
  2. Disattiva Accesso: Revoca l’accesso al servizio/prodotto per l’utente associato a questa sottoscrizione. La modalità di revoca dipende dalla tua implementazione (potrebbe essere immediata o alla fine del periodo corrente, a seconda di data.object.cancel_at_period_end).
  3. Aggiorna lo Stato della Sottoscrizione: Imposta lo stato della sottoscrizione nel tuo sistema come “Cancellata” o “Inattiva”.
  4. Notifiche Interne/Clienti (Opzionale): Potresti voler inviare una notifica interna al team o un’email al cliente per confermare la cancellazione della sottoscrizione.

4. invoice.payment_failed

Descrizione: Questo evento viene inviato quando si tenta di addebitare un pagamento ricorrente per una sottoscrizione (generando una fattura - invoice), ma il pagamento fallisce. Questo può accadere per vari motivi (es. carta scaduta, fondi insufficienti, ecc.).

Esempio JSON Payload:

{
  "id": "evt_1abc2G2eZvKYlo2C91abca2k",
  "object": "event",
  "api_version": "2020-08-27",
  "created": 1678888200,
  "data": {
    "object": {
      "id": "in_1abc2J2eZvKYlo2CaBcDeFg2",
      "object": "invoice",
      "account_country": "IT",
      "account_name": "Your Business Name",
      "amount_due": 1000,
      "amount_paid": 0,
      "amount_remaining": 1000,
      "application_fee_amount": null,
      "attempt_count": 1,
      "attempted": true,
      "auto_advance": true,
      "billing_reason": "subscription_cycle",
      "charge": null, // Potrebbe essere null se il pagamento fallisce subito
      "collection_method": "charge_automatically",
      "created": 1678888200,
      "currency": "eur",
      "customer": "cus_AbCdEfGhIjKlMnOpQrStUvWxYz0",
      "customer_address": {
        "city": null,
        "country": "IT",
        "line1": null,
        "line2": null,
        "postal_code": null,
        "state": null
      },
      "customer_email": "[email protected]",
      "customer_name": "Test Customer",
      "customer_phone": null,
      "customer_tax_exempt": "none",
      "customer_tax_ids": [],
      "default_payment_method": "pm_1abc2G2eZvKYlo2C78abc90h",
      "default_tax_rates": [],
      "discount_percent": 0.0,
      "discounts": [],
      "due_date": null,
      "ending_balance": 0,
      "finalized_at": 1678888200,
      "footer": null,
      "hosted_invoice_url": null,
      "invoice_pdf": null,
      "last_finalization_error": {
        "code": "payment_method_declined",
        "decline_code": "generic_decline",
        "doc_url": "https://xxx.com/docs/error-codes/card-declines",
        "message": "Your card was declined.",
        "param": null,
        "payment_method": {
          "id": "pm_1abc2G2eZvKYlo2C78abc90h",
          "object": "payment_method",
          // ... (dettagli del metodo di pagamento) ...
        },
        "type": "card_error"
      },
      "lines": {
        "object": "list",
        "data": [
          {
            "id": "il_1abc2K2eZvKYlo2CaBcDeFg3",
            "object": "line_item",
            "amount": 1000,
            "currency": "eur",
            "description": "Test Product 1 (Monthly)",
            "discount_amounts": [],
            "discountable": false,
            "invoice_item": "ii_1abc2L2eZvKYlo2CaBcDeFg4",
            "livemode": false,
            "metadata": {},
            "period": {
              "end": 1681569600,
              "start": 1678887600
            },
            "plan": {
              "id": "price_1R14Hi4Y0rDkdD0j0wJm6iRC",
              // ... (dettagli del piano) ...
            },
            "price": {
              "id": "price_1R14Hi4Y0rDkdD0j0wJm6iRC",
              // ... (dettagli del prezzo) ...
            },
            "proration": false,
            "quantity": 1,
            "subscription": "sub_AbCdEfGhIjKlMnOpQrStUvWxYz1",
            "subscription_item": "si_1abc2H2eZvKYlo2C89abca0i",
            "tax_amounts": [],
            "tax_rates": [],
            "type": "subscription"
          }
        ],
        "has_more": false,
        "total_count": 1,
        "url": "/v1/invoices/in_1abc2J2eZvKYlo2CaBcDeFg2/lines"
      },
      "livemode": false,
      "metadata": {
        "orderId": "ORDER-1234",
        "transactionId": "testTxnMultiProduct"
      },
      "next_payment_attempt": 1678888800, // Prossimo tentativo di pagamento (timestamp)
      "number": "6B0D-0001",
      "paid": false,
      "payment_intent": null, // Potrebbe essere null se il pagamento fallisce subito
      "payment_settings": {
        "payment_method_options": null,
        "payment_method_types": null
      },
      "period_end": 1681569600,
      "period_start": 1678887600,
      "post_payment_credit_notes_amount": 0,
      "pre_payment_credit_notes_amount": 0,
      "receipt_number": null,
      "rendering_options": {},
      "starting_balance": 0,
      "statement_descriptor": null,
      "status": "open", // Stato della fattura: "open" significa non pagata
      "subscription": "sub_AbCdEfGhIjKlMnOpQrStUvWxYz1",
      "subtotal": 1000,
      "tax_percent": 0.0,
      "tax_rates": [],
      "threshold_reason": null,
      "total": 1000,
      "total_discount_amounts": [],
      "total_tax_amounts": [],
      "webhooks_delivered_at": null
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "invoice.payment_failed"
}

Campi Chiave e Azioni per il Merchant:

Azioni per il Merchant:

  1. Trova la Sottoscrizione: Utilizza data.object.subscription per identificare la sottoscrizione nel tuo sistema.
  2. Aggiorna lo Stato della Sottoscrizione: Imposta lo stato della sottoscrizione nel tuo sistema come “Pagamento Fallito”, “In Morosità” o simile.

5. invoice.payment_succeeded

Descrizione: Evento positivo! Viene inviato quando il pagamento di una fattura (solitamente ricorrente per una sottoscrizione) ha avuto successo. Significa che l’addebito è andato a buon fine.

Esempio JSON Payload:

{
  "id": "evt_1abc2H2eZvKYlo2C01abca3l",
  "object": "event",
  "api_version": "2020-08-27",
  "created": 1678888800,
  "data": {
    "object": {
      "id": "in_1abc2M2eZvKYlo2CaBcDeFg5",
      "object": "invoice",
      "account_country": "IT",
      "account_name": "Your Business Name",
      "amount_due": 1000,
      "amount_paid": 1000,
      "amount_remaining": 0,
      "application_fee_amount": null,
      "attempt_count": 1,
      "attempted": true,
      "auto_advance": true,
      "billing_reason": "subscription_cycle",
      "charge": "ch_1abc2N2eZvKYlo2C12abca4m",
      "collection_method": "charge_automatically",
      "created": 1678888800,
      "currency": "eur",
      "customer": "cus_AbCdEfGhIjKlMnOpQrStUvWxYz0",
      "customer_address": {
        // ... (dettagli indirizzo cliente) ...
      },
      "customer_email": "[email protected]",
      "customer_name": "Test Customer",
      "customer_phone": null,
      "customer_tax_exempt": "none",
      "customer_tax_ids": [],
      "default_payment_method": "pm_1abc2G2eZvKYlo2C78abc90h",
      "default_tax_rates": [],
      "discount_percent": 0.0,
      "discounts": [],
      "due_date": null,
      "ending_balance": 0,
      "finalized_at": 1678888800,
      "footer": null,
      "hosted_invoice_url": null,
      "invoice_pdf": null,
      "lines": {
        // ... (line items della fattura) ...
      },
      "livemode": false,
      "metadata": {
        "orderId": "ORDER-1234",
        "transactionId": "testTxnMultiProduct"
      },
      "next_payment_attempt": null,
      "number": "6B0D-0002",
      "paid": true, // Pagamento avvenuto con successo!
      "payment_intent": "pi_3abc2O2eZvKYlo2C23abca5n",
      "payment_settings": {
        "payment_method_options": null,
        "payment_method_types": null
      },
      "period_end": 1681569600,
      "period_start": 1678887600,
      "post_payment_credit_notes_amount": 0,
      "pre_payment_credit_notes_amount": 0,
      "receipt_number": null,
      "rendering_options": {},
      "starting_balance": 0,
      "statement_descriptor": null,
      "status": "paid", // Stato della fattura: "paid" = pagata
      "subscription": "sub_AbCdEfGhIjKlMnOpQrStUvWxYz1",
      "subtotal": 1000,
      "tax_percent": 0.0,
      "tax_rates": [],
      "threshold_reason": null,
      "total": 1000,
      "total_discount_amounts": [],
      "total_tax_amounts": [],
      "webhooks_delivered_at": null
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "invoice.payment_succeeded"
}

Campi Chiave e Azioni per il Merchant:

Azioni per il Merchant:

  1. Trova la Sottoscrizione: Utilizza data.object.subscription per identificare la sottoscrizione nel tuo sistema.
  2. Aggiorna lo Stato della Sottoscrizione: Se la sottoscrizione era in stato di “Pagamento Fallito” o simile, riportala a uno stato “Attiva” o “Pagata”.
  3. Aggiorna Data di Scadenza/Rinnovo: Aggiorna la data di scadenza/rinnovo della sottoscrizione nel tuo sistema in base al periodo di fatturazione appena pagato.
  4. Registra Pagamento: Registra il pagamento nel tuo sistema contabile/gestionale, associandolo alla sottoscrizione e all’ordine (se applicabile).

6. payment_intent.payment_failed

Descrizione: Questo evento viene inviato quando un tentativo di pagamento non ricorrente (PaymentIntent) fallisce. Questo può accadere durante un checkout one-time o quando si tenta di effettuare un pagamento manuale tramite PaymentIntent.

Esempio JSON Payload:

{
  "id": "evt_1abc2I2eZvKYlo2C34abc56d",
  "object": "event",
  "api_version": "2020-08-27",
  "created": 1678889400,
  "data": {
    "object": {
      "id": "pi_3abc2P2eZvKYlo2C34abc67o",
      "object": "payment_intent",
      "amount": 2000,
      "amount_capturable": 0,
      "amount_details": {
        "tip": {}
      },
      "amount_received": 0,
      "application": null,
      "application_fee_amount": null,
      "automatic_payment_methods": {
        "enabled": false,
        "allow_redirects": "always"
      },
      "canceled_at": null,
      "cancellation_reason": null,
      "capture_method": "automatic",
      "client_secret": "pi_3abc2P2eZvKYlo2C34abc67o_secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "confirmation_method": "automatic",
      "created": 1678889400,
      "currency": "eur",
      "customer": "cus_AbCdEfGhIjKlMnOpQrStUvWxYz0",
      "description": null,
      "last_payment_error": {
        "code": "card_declined",
        "decline_code": "do_not_honor",
        "doc_url": "https://xxx.com/docs/error-codes/card-declines",
        "message": "Your card was declined.",
        "param": null,
        "payment_method": {
          "id": "pm_1abc2Q2eZvKYlo2C45abc78p",
          "object": "payment_method",
          // ... (dettagli del metodo di pagamento) ...
        },
        "type": "card_error"
      },
      "latest_charge": "ch_1abc2R2eZvKYlo2C56abca8q",
      "livemode": false,
      "metadata": {
        "orderId": "ORDER-1234",
        "transactionId": "testTxnMultiProduct"
      },
      "next_action": null,
      "on_behalf_of": null,
      "payment_method": null,
      "payment_method_options": {
        "card": {
          "installments": null,
          "mandate_options": null,
          "network": null,
          "request_three_d_secure": "automatic"
        }
      },
      "payment_method_types": [
        "card"
      ],
      "processing_error": null,
      "receipt_email": null,
      "review": null,
      "setup_future_usage": null,
      "shipping": null,
      "source": null,
      "statement_descriptor": null,
      "statement_descriptor_suffix": null,
      "status": "requires_payment_method", // Stato: richiede un metodo di pagamento
      "transfer_data": null,
      "transfer_group": null
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "payment_intent.payment_failed"
}

Campi Chiave e Azioni per il Merchant:

Azioni per il Merchant:

  1. Trova l’Ordine: Utilizza data.object.metadata (es. orderId) per trovare l’ordine corrispondente nel tuo sistema.
  2. Aggiorna lo Stato dell’Ordine: Imposta lo stato dell’ordine come “Pagamento Fallito”, “In Attesa di Pagamento” o simile.
  3. Notifica il Cliente: Invia un’email al cliente informandolo del fallimento del pagamento e invitandolo a riprovare o aggiornare i dati di pagamento. Potresti reindirizzarlo nuovamente alla pagina di checkout (magari riutilizzando il client_secret del PaymentIntent se applicabile, ma attenzione alla sicurezza e alla scadenza).
  4. Riprova (Opzionale): A seconda del flusso di checkout, potresti offrire al cliente la possibilità di riprovare il pagamento direttamente dalla tua interfaccia, riutilizzando lo stesso PaymentIntent o creandone uno nuovo.

7. payment_intent.succeeded

Descrizione: Evento positivo! Indica che un pagamento non ricorrente (PaymentIntent) è andato a buon fine. Simile a checkout.session.completed, ma più generico e può avvenire anche al di fuori di una sessione di checkout (es. pagamenti manuali lato server).

Esempio JSON Payload:

{
  "id": "evt_1abc2J2eZvKYlo2C45abca78q",
  "object": "event",
  "api_version": "2020-08-27",
  "created": 1678890000,
  "data": {
    "object": {
      "id": "pi_3abc2Q2eZvKYlo2C56abca9r",
      "object": "payment_intent",
      "amount": 2000,
      "amount_capturable": 0,
      "amount_details": {
        "tip": {}
      },
      "amount_received": 2000,
      "application": null,
      "application_fee_amount": null,
      "automatic_payment_methods": {
        "enabled": false,
        "allow_redirects": "always"
      },
      "canceled_at": null,
      "cancellation_reason": null,
      "capture_method": "automatic",
      "client_secret": "pi_3abc2Q2eZvKYlo2C56abca9r_secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "confirmation_method": "automatic",
      "created": 1678890000,
      "currency": "eur",
      "customer": "cus_AbCdEfGhIjKlMnOpQrStUvWxYz0",
      "description": null,
      "last_payment_error": null,
      "latest_charge": "ch_1abc2S2eZvKYlo2C67abc0s",
      "livemode": false,
      "metadata": {
        "orderId": "ORDER-1234",
        "transactionId": "testTxnMultiProduct"
      },
      "next_action": null,
      "on_behalf_of": null,
      "payment_method": {
        "id": "pm_1abc2R2eZvKYlo2C78abca1t",
        "object": "payment_method",
        // ... (dettagli metodo di pagamento) ...
      },
      "payment_method_options": {
        "card": {
          "installments": null,
          "mandate_options": null,
          "network": null,
          "request_three_d_secure": "automatic"
        }
      },
      "payment_method_types": [
        "card"
      ],
      "processing_error": null,
      "receipt_email": null,
      "review": null,
      "setup_future_usage": null,
      "shipping": null,
      "source": null,
      "statement_descriptor": null,
      "statement_descriptor_suffix": null,
      "status": "succeeded", // Stato: pagamento riuscito!
      "transfer_data": null,
      "transfer_group": null
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "payment_intent.succeeded"
}

Campi Chiave e Azioni per il Merchant:

Azioni per il Merchant:

  1. Trova l’Ordine: Utilizza data.object.metadata per trovare l’ordine corrispondente.
  2. Verifica status: "succeeded": Assicurati che data.object.status sia "succeeded".
  3. Aggiorna lo Stato dell’Ordine: Imposta lo stato dell’ordine come “Pagato”, “In elaborazione”, “Confermato” o simile.
  4. Registra Pagamento: Registra il pagamento nel tuo sistema contabile/gestionale.
  5. Eroga Prodotto/Servizio: Procedi con l’erogazione del prodotto/servizio ordinato dal cliente.
  6. Invia Email di Conferma: Invia un’email di conferma d’ordine al cliente.