Auth Only

This transaction obtains real-time authorization for an EMV, magnetic stripe or contactless transaction but does not place the authorization in the Settlement batch.

This transaction type guarantees that funds are available on the card and reduces the cardholder's limit to buy for a pre-determined period (usually 7 - 10 days depending on the issuing bank).

To place the Auth Only transaction in the Open batch, use Pre-Auth Complete to convert the transaction into a Sale or use Auth Only Reversal to delete and restore the funds in the card.

These are the processing options that you can integrate with a Pre-Auth card transaction.

Code Samples

CWS

Request

method
string | required
startPaymentTransaction
 
requestId
string | required
Transaction Request ID
 
targetType
string | required
paymentGatewayConverge
 
parameters
JSONObject | required
All relevant parameters for Pre-Auth transactions.
 
paymentGatewayId
string | required
Payment Gateway ID
Unique identifier of the payment gateway as returned in the openPaymentGateway transaction response.
transactionType
string | required
Transaction Type
Valid value: PRE_AUTH
baseTransactionAmount
JSONObject | required
Transaction Amount to Pre-Authorize
"baseTransactionAmount" : { "currencyCodeStr" : "USD", "amountInMinorUnits" : 1900 },
tenderType
string | required
Tender Type
Valid value: CARD or CASH
discountAmounts
array | optional
Discount Amount
Deducted from baseTransactionAmount.
key: "currencyCode" ("USD") key: "value" ("2000" - in minor units)

Example

Request
 {
  "method" : "startPaymentTransaction",
  "requestId" : "721787309",
  "targetType" : "paymentGatewayConverge",
  "version" : "1.0",
  "parameters" : {
    "paymentGatewayId" : "cc9b37e3-1a59-4c8b-a3e6-8e9b18468ab8",
    "transactionType" : "PRE_AUTH",
    "baseTransactionAmount" : {
      "value" : 3900,
      "currencyCode" : "USD"
    },
    "tenderType" : "CARD",
    "cardType" : null,
    "isTaxInclusive" : false,
    "taxAmounts" : [{
      "value" : 0,
      "currencyCode" : "USD"
    }],
    "discountAmounts" : null,
  }
}
Response
{
  "requestId" : "721787331",
  "statusDetails" : "REQUEST_ACCEPTED",
  "data" : {
    "paymentGatewayCommand" : {
      "completed" : true,
      "eventQueue" : [ ],
      "chanId" : "0ea7e529-dc2f-43a7-9ace-a6293401c4b1",
      "paymentTransactionData" : {
        "result" : "APPROVED",
        "authCode" : "******",
        "date" : "Mon Mar 07 13:08:42 MST 2016",
        "cardEntryType" : "SWIPE",
        "resultMessage" : "APPROVED",
        "cardScheme" : "VISA",
        "amount" : {
          "currencyCode" : "USD",
          "value" : 3900
        },
        "id" : "070316A15-D808755A-4283-4280-B4D6-5029D84F34B3",
        "transactionType" : "PRE_AUTH",
        "approved" : "yes",
        "errors" : [ ],
        "maskedPan" : "******",
        "tenderType" : "CARD",
        "balanceDue" : {
          "currencyCode" : "UNKNOWN",
          "value" : 0
        }
      }
    }
  }
}

Java

  1. Initialize Commerce SDK and receive an ECLAccountInterface instance named account.

  2. Create a money object by specifying a currency code and an amount.

    ECLMoney amount = new ECLMoney(ECLCurrencyCode.USD, 300L);
  3. Create a transaction reference.

    ECLPreAuthTransactionInterface transaction = account.getTransactionProcessor().createPreAuthTransactionWithSubtotal(amount);
  4. Create a card tender instance.

    ECLCardTenderInterface tender = account.getTransactionProcessor().createCardTender();

Objective-C

  1. Initialize Commerce SDK and receive an ECLAccountInterface instance named account.

  2. Create a money object by specifying a currency code and an amount.

    ECLMoney *amount = [[ECLMoney alloc] initWithMinorUnits:300 withCurrencyCode:ECLCurrencyCode_USD];
  3. Create a transaction protocol.

    id<ECLCurrencyTransactionProtocol> saleTransaction = [[_account transactionProcessor] createPreAuthTransactionWithSubtotal:amount];
  4. Create a card tender instance.

    id<ECLCardTenderProtocol> tender = [account.transactionProcessor createCardTender];

C#

Request

PaymentArgs bea = new PaymentArgs();
Money m = new Money(Money.CurrencyCodefromString("USD"), myAmount);
bea.baseTransactionAmount = m;
bea.tenderType = TenderType.CARD;            
bea.transactionType = TransactionType.PRE_AUTH;

bea.paymentGatewayId = m_PaymentGatewayId; 

m_CWS.StartPaymentTransaction(bea, MyNotifyCWSEvent, MyPaymentComplete);