Skip to main content

Generic debit / sale

A debit transaction via C3API is executed through a mandatory two-step process: card acquisition followed by payment execution.

The first step reads and identifies the card without performing authorization, allowing merchant-side validation and business logic.

Card acquisition
public virtual C3ApiC3RspnExt processC3CardAcquisition(
string tpvNumber,
string cashierNumber = null,
long amount = 0,
string currency = "978"
)

Only after explicit confirmation does the second step trigger authorization, risk checks, and transaction recording.

Debit after card acquisition
public virtual C3ApiC3RspnExt processC3DebitAfterCardAcquisition(
string tpvNumber,
string cashierNumber,
long amount,
string currency,
string ticketNumber,
string userData1,
string userData2 = null
)

If the merchant decides to stop the transaction after the card has been read, a specific abort command must be sent. This operation explicitly terminates the transaction after card acquisition and before authorization, ensuring that no request is sent to the issuer. It is typically used in two‑step (X/Y) flows when cancellation is required due to user action, system error, or business rules (for example, an unauthorized card type returned in the X‑response).

If processing is interrupted for any reason between the two steps, always call abort after card acquisition before starting a new two-step sequence. Skipping the abort leaves the terminal in an undefined state and will result in 0311/0014 on the next Y call.

Abort after card acquisition
public virtual C3ApiC3RspnExt processC3AbortAfterCardAcquisition(
string tpvNumber,
string cashierNumber = null
)