Track Transaction Errors
Transaction error events can be used to track issues during any step of a transaction being processed by the system. The API is generic and can be used in any case of an incomplete transaction, including payment processor/gateway errors. These data can be combined with the rich Snowplow schema to provide insights such as:
- Fraud rejections and other risk related rejections
- Processor/gateway internal errors
Additionally by tracking the error types, soft or hard, and the resolution selected by your system, you can test and optimize the flows and experience you provide to your customers facing issues with completing a transaction.
Tracking transaction errors
In this section, we will showcase how to track a transaction error event for a transaction. In many cases, transaction processing is completed through a backend system and not the website frontend, that is why we also showcase a server-side language examples. You can use any of our trackers to achieve the same result.
trackTransactionError
To track a transaction error you can use the trackTransactionError method with the following attributes:
import { trackTransactionError } from "@snowplow/browser-plugin-snowplow-ecommerce";
trackTransactionError({
resolution,
error_code,
error_shortcode,
error_description,
error_type,
transaction
});
- Where
resolutionis the system action selected in this failure event E.g. Allowing retries, blocking the payment gateway, contacting the user or other. - Where
error_codeis the error-identifying code for the transaction issue E.g. E522. - Where
error_shortcodeis the shortcode for the transaction error E.g declined_by_api, pm_card_radarBlock. - Where
error_descriptionis the longer description for the transaction error. - Where
error_typeis the type of error the specific issue is regarded as in the standard classification of hard and soft. Hard error types mean the customer must provide another form of payment e.g. an expired card. Soft errors can be the result of temporary issues where retrying might be successful e.g. processor declined the transaction. - Where
transactionis the transaction the issue occurred in.
Example usage:
import { trackTransactionError } from "@snowplow/browser-plugin-snowplow-ecommerce";
trackTransactionError({
resolution: "rejection",
error_code: "E123",
error_shortcode: "CARD_DECLINE",
error_description: "Card has been declined by the issuing bank.",
error_type: "hard",
transaction: {
revenue: 45,
currency: "EUR",
transaction_id: "T12345",
payment_method: "card"
}
});
trackTransactionError
To track a transaction error you can use the trackTransactionError method with the following attributes:
/* {trackerName} is a placeholder for the initialized tracker on your page. */
window.snowplow("trackTransactionError:{trackerName}", {
resolution,
error_code,
error_shortcode,
error_description,
error_type,
transaction
});
- Where
resolutionis the system action selected in this failure event E.g. Allowing retries, blocking the payment gateway, contacting the user or other. - Where
error_codeis the error-identifying code for the transaction issue E.g. E522. - Where
error_shortcodeis the shortcode for the transaction error E.g declined_by_api, pm_card_radarBlock. - Where
error_descriptionis the longer description for the transaction error. - Where
error_typeis the type of error the specific issue is regarded as in the standard classification of hard and soft. Hard error types mean the customer must provide another form of payment e.g. an expired card. Soft errors can be the result of temporary issues where retrying might be successful e.g. processor declined the transaction. - Where
transactionis the transaction the issue occurred in.
Example usage:
window.snowplow("trackTransactionError:{trackerName}", {
resolution: "rejection",
error_code: "E123",
error_shortcode: "CARD_DECLINE",
error_description: "Card has been declined by the issuing bank.",
error_type: "hard",
transaction: {
revenue: 45,
currency: "EUR",
transaction_id: "T12345",
payment_method: "card"
}
});
Track transaction errors using a self describing event
To track transaction errors in the Node.js tracker, you can use the buildSelfDescribingEvent method together with the correct parameters for the transaction error event.
/* Where `t` is a placeholder for the initialized tracker instance on your application. */
t.track(buildSelfDescribingEvent({
event: {
schema: "iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2",
data: {
type: "trns_error"
}
}
}), [
/* Transaction Error context */
{
schema: "iglu:com.snowplowanalytics.snowplow.ecommerce/transaction_error/jsonschema/1-0-0",
data: {
/* ...Transaction error data */
}
},
/* Transaction context */
{
schema: "iglu:com.snowplowanalytics.snowplow.ecommerce/transaction/jsonschema/1-0-0",
data: {
/* ...Transaction data */
}
}
]);
Where transaction error data can include:
resolutionas the system action selected in this failure event E.g. Allowing retries, blocking the payment gateway, contacting the user or other.error_codeas the error-identifying code for the transaction issue E.g. E522.error_shortcodeas the shortcode for the transaction error E.g declined_by_api, pm_card_radarBlock.error_descriptionas the longer description for the transaction error.error_typeas the type of error the specific issue is regarded as in the standard classification of hard and soft. Hard error types mean the customer must provide another form of payment e.g. an expired card. Soft errors can be the result of temporary issues where retrying might be successful e.g. processor declined the transaction. For the transaction taking part in the process, an additional transaction data context is added on the contexts to be sent with the event.
Example usage:
/* Where `t` is a placeholder for the initialized tracker instance on your application. */
t.track(buildSelfDescribingEvent({
event: {
schema: "iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2",
data: {
type: "trns_error"
}
}
}), [
/* Transaction Error context */
{
schema: "iglu:com.snowplowanalytics.snowplow.ecommerce/transaction_error/jsonschema/1-0-0",
data: {
resolution: "rejection",
error_code: "E123",
error_shortcode: "CARD_DECLINE",
error_description: "Card has been declined by the issuing bank.",
error_type: "hard",
}
},
/* Transaction context */
{
schema: "iglu:com.snowplowanalytics.snowplow.ecommerce/transaction/jsonschema/1-0-0",
data: {
revenue: 45,
currency: "EUR",
transaction_id: "T12345",
payment_method: "card"
}
}
]);
To learn more about tracking self describing events in Node.js take a look at the buildSelfDescribingEvent documentation.
Where transaction can have the following attributes:
| attribute | type | description | required |
|---|---|---|---|
| transaction_id | string | The ID of the transaction | ✅ |
| currency | string | The currency used for the transaction (ISO 4217). | ✅ |
| revenue | number | The revenue of the transaction. | ✅ |
| payment_method | string | The payment method used for the transaction. | ✅ |
| total_quantity | number | Total quantity of items in the transaction. | ✅ |
| tax | number | Total amount of tax on the transaction. | ✘ |
| shipping | number | Total cost of shipping on the transaction. | ✘ |
| discount_code | string | Discount code used. | ✘ |
| discount_amount | number | Discount amount taken off. | ✘ |
| credit_order | boolean | Whether the transaction is a credit order or not. | ✘ |