Authorize.net

Authentication

Connecting your Authorize.net account with Leapfin is simple, and should take ~5-10 minutes. There are 2 keys we need in order to import your Authorize.net data on your behalf:

  1. API Login Id
  2. Transaction Key

Please follow the instructions below step-by-step:

  1. First, please login Leapfin, and navigate to the integrations set up page.
  2. Next, click on Connect button next to Authorize.net, there are two key Leapfin needs: API Login Id and Transaction Key.

Please follow the instructions listed below to get the API Login Id and Transaction Key:

  1. Log into the Merchant Interface.
  2. Click Account from the main toolbar.
  3. Click Settings in the main left-side menu.
  4. Click API Credentials & Keys. On this page, you will see the API Login Id.
  5. Select New Transaction Key.
    Note: When obtaining a new Transaction Key, you may choose to disable the old Transaction Key by clicking the box titled, Disable Old Transaction Key Immediately. You may want to do this if you suspect your previous Transaction Key is being used fraudulently.
  6. Click Submit to continue.
  7. Request and enter PIN for verification.
  8. Your new Transaction Key is displayed.

Note: The API Login ID is different than your user login ID. Your user login ID allows you to log into your Merchant Interface user account. The API Login ID grants a merchant access to submit transactions to the payment gateway.

To learn more, please reference Authorize.net's documentation or FAQ on this.

Data Sources

Once authenticated, Leapfin will pull relevant data from Authorize.net via the Transaction Reporting API. This API can be used to access transaction history and details. Leapfin uses the following endpoints:

To learn more about the API, please click here.

Batch

A settled batch list contains an aggregation of all the transactions that have been automatically aggregated every 24 hours by Authorize.net into a batch. Please refer to the service web endpoint here to learn more.

Sample data

{
      "batchId": "10190000",
      "settlementTimeUTC": "2014-10-24T18:59:12Z",
      "settlementTimeUTCSpecified": true,
      "settlementTimeLocal": "2014-10-24T16:29:12",
      "settlementTimeLocalSpecified": true,
      "settlementState": "settledSuccessfully",
      "paymentMethod": "eCheck",
      "statistics": [
          {
              "accountType": "eCheck",
              "chargeAmount": 12.22,
              "chargeCount": 1,
              "refundAmount": 0,
              "refundCount": 0,
              "voidCount": 0,
              "declineCount": 0,
              "errorCount": 0,
              "returnedItemAmount": 0,
              "returnedItemAmountSpecified": true,
              "returnedItemCount": 0,
              "returnedItemCountSpecified": true,
              "chargebackAmount": 0,
              "chargebackAmountSpecified": true,
              "chargebackCount": 0,
              "chargebackCountSpecified": true,
              "correctionNoticeCount": 0,
              "correctionNoticeCountSpecified": true,
              "chargeChargeBackAmount": 0,
              "chargeChargeBackAmountSpecified": true,
              "chargeChargeBackCount": 0,
              "chargeChargeBackCountSpecified": true,
              "refundChargeBackAmount": 0,
              "refundChargeBackAmountSpecified": true,
              "refundChargeBackCount": 0,
              "refundChargeBackCountSpecified": true,
              "chargeReturnedItemsAmount": 12.21,
              "chargeReturnedItemsAmountSpecified": true,
              "chargeReturnedItemsCount": 1,
              "chargeReturnedItemsCountSpecified": true,
              "refundReturnedItemsAmount": 0,
              "refundReturnedItemsAmountSpecified": true,
              "refundReturnedItemsCount": 0,
              "refundReturnedItemsCountSpecified": true
          }
      ],
        "currencyCode": "USD"
}

Transaction Details

Based on the settled batch, Leapfin will retrieve all the relevant transactions within a respective batch as an intermediary state in order to access transaction details for accurate mapping. Each transaction within the list is mapped into it's own transaction. Please refer to the web service endpoint to learn more about the intermedia.

Then, Leapfin uses the transactions details endpoint for all transactions referenced within the settlement batch to retrieve complete details. Please refer to the web service endpoint to learn more.

Sample data

{
    "transId": "12345",
    "refTransId": "12345",
    "splitTenderId": "12345",
    "submitTimeUTC": "2010-08-30T17:49:20.757Z",
    "submitTimeLocal": "2010-08-30T13:49:20.757",
    "transactionType": "authOnlyTransaction",
    "transactionStatus": "settledSuccessfully",
    "responseCode": "1",
    "responseReasonCode": "1",
    "responseReasonDescription": "Approval",
    "authCode": "000000",
    "AVSResponse": "X",
    "cardCodeResponse": "M",
    "CAVVResponse": "2",
    "FDSFilterAction": "authAndHold",
    "FDSFilters": {
      "FDSFilter": [
        {
          "name": "Hourly Velocity Filter",
          "action": "authAndHold"
        },
        {
          "name": "Amount Filter",
          "action": "report"
        }
      ]
    },
    "batch": {
      "batchId": "10190000",
      "settlementTimeUTC": "2010-08-30T17:49:20.757Z",
      "settlementTimeLocal": "2010-08-30T13:49:20.757",
      "settlementState": "settledSuccessfully"
    },
    "order": {
      "invoiceNumber": "INV00001",
      "description": "some description",
      "purchaseOrderNumber": "PO000001"
    },
    "requestedAmount": "5.00",
    "authAmount": "2.00",
    "settleAmount": "2.00",
    "tax": {
      "amount": "1.00",
      "name": "WA state sales tax",
      "description": "Washington state sales tax"
    },
    "shipping": {
      "amount": "2.00",
      "name": "ground based shipping",
      "description": "Ground based 5 to 10 day shipping"
    },
    "duty": { "amount": "1.00" },
    "lineItems": {
      "lineItem": [
        {
          "itemId": "ITEM00001",
          "name": "name of item sold",
          "description": "Description of item sold",
          "quantity": "1",
          "unitPrice": "6.95",
          "taxable": "true"
        },
        {
          "itemId": "ITEM00002",
          "name": "name of item sold",
          "description": "Description of item sold",
          "quantity": "1",
          "unitPrice": "6.95",
          "taxable": "true"
        }
      ]
    },
    "prepaidBalanceRemaining": "30.00",
    "taxExempt": "false",
    "payment": {
      "creditCard": {
        "cardNumber": "XXXX1111",
        "expirationDate": "XXXX",
        "cardType": "Visa"
      }
    },
    "customer": {
      "type": "individual",
      "id": "ABC00001",
      "email": "[email protected]"
    },
    "billTo": {
      "firstName": "John",
      "lastName": "Doe",
      "address": "123 Main St.",
      "city": "Bellevue",
      "state": "WA",
      "zip": "98004",
      "country": "US",
      "phoneNumber": "000-000-0000"
    },
    "shipTo": {
      "firstName": "John",
      "lastName": "Doe",
      "address": "123 Main St.",
      "city": "Bellevue",
      "state": "WA",
      "zip": "98004",
      "country": "US"
    },
    "recurringBilling": "false",
    "customerIP": "0.0.0.0",
    "subscription": {
      "id": "145521",
      "payNum": "1",
      "marketType": "eCommerce",
      "product": "Card Not Present",
      "returnedItems": {
        "returnedItem": {
          "id": "2148878904",
          "dateUTC": "2014-05-12T21:22:44Z",
          "dateLocal": "2014-05-12T14:22:44",
          "code": "R02", 
          "description": "Account Closed"
        }
      },
      "solution": {
        "id": "A1000000",
        "name": "Shopping Cart ABC",
        "vendorName": "JohnDoeCo"
      },
      "mobileDeviceId": "2354578983274523978"
    },
    "profile": {
      "customerProfileId": "1806660000",
      "customerPaymentProfileId": "1805320000"
    },
    "networkTransId": "123456789KLNNNNN",
    "originalNetworkTransId": "123456789NNNN",
    "originalAuthAmount": "12.00",
    "authorizationIndicator": "pre",
        "currencyCode": "USD"
}

Mapping Logic

authorizenet-transaction-details

On a lower level, Leapfin creates Payment or Refund records based on the type of transaction when mapping data.

Create a Payment

Leapfin creates a Payment record if authorizenet-transaction-details.transactionType in ["authCaptureTransaction", "authOnlyTransaction", "captureOnlyTransaction"]:

Target: leapfinPayment(schema)Source:
authorizenet-transaction-details (schema)
objectType“payment”
idauthorizenet-transaction-details.external_id
amountauthorizenet-transaction-details.settleAmount
currencyCodeauthorizenet-transaction-details.currencyCode
dateauthorizenet-transaction-details.submitTimeUTC
succeededDate- if status = "succeeded":
- succeededDate = authorizenet-transaction-details.batch.settlementTimeUTC
- else, succeededDate = null
descriptionnone
status- if authorizenet-transaction-details.batch.settlementState = "settledSuccessfully" and authorizenet-transaction-details.transactionStatus in ["refundSettledSuccessfully", "settledSuccessfully"]:
- status = "succeeded"
- else if authorizenet-transaction-details.batch.settlementState = "settlementError" or authorizenet-transaction-details.transactionStatus in ["communicationError", "declined", "expired", "generalError", "failedReview", "settlementError", "voided", ]:
- status = "failed"
- else
- status = "pending"
exchangeRatenone
customFields The following fields from source record are added:
- invoiceNumber = authorizenet-transaction-details.order.invoiceNumber
- purchaseOrderNumber = authorizenet-transaction-details.purchaseOrderNumber
- transactionStatus = authorizenet-transaction-details.transactionStatus
- batchId = authorizenet-transaction-details.batch.batchId
- taxAmount = authorizenet-transaction-details.tax.amount
- shippingAmount = authorizenet-transaction-details.shipping.amount
- dutyAmount = authorizenet-transaction-details.duty.amount
linksnone

Create a Refund

Leapfin creates a refund record if authorizenet-transaction-details.transactionType = "refundTransaction".

Target: leapfinRefund(schema)Source:
authorizenet-transaction-details (schema)
objectType“refund”
idauthorizenet-transaction-details.external_id
amountauthorizenet-transaction-details.settleAmount(negative)
currencyCodeauthorizenet-transaction-details.currencyCode
dateauthorizenet-transaction-details.submitTimeUTC
descriptionnone
status- if authorizenet-transaction-details.batch.settlementState = "settledSuccessfully" and authorizenet-transaction-details.transactionStatus in ["refundSettledSuccessfully", "settledSuccessfully"]:
- status = "succeeded"
- else if authorizenet-transaction-details.batch.settlementState = "settlementError" or authorizenet-transaction-details.transactionStatus in ["communicationError", "declined", "expired", "generalError", "failedReview", "settlementError", "voided", ]:
- status = "failed"
- else
- status = "pending"
exchangeRatenone
customFieldsThe following fields from source record are added:
- invoiceNumber = authorizenet-transaction-details.order.invoiceNumber
- purchaseOrderNumber = authorizenet-transaction-details.purchaseOrderNumber
- transactionStatus = authorizenet-transaction-details.transactionStatus
- batchId = authorizenet-transaction-details.batch.batchId
- taxAmount = authorizenet-transaction-details.tax.amount
- shippingAmount = authorizenet-transaction-details.shipping.amount
- dutyAmount = authorizenet-transaction-details.duty.amount
linksAdd a link to the Payment record with:
-- objectType = "payment"
-- id = authorizenet-transaction-details.refTransId

authorizenet-batch

When mapping data, Leapfin will look to create a Dispute record dependent on non-zero charge backs on items.

📘

Disputes

All dispute information is tied on the batch level for Authorize.net rather than the transaction level. With statistics, the response object will include a batch of all payments with the payment type and amount.

Create a Dispute

For each item in authorizenet-batch.statistics[], Leapfin will create a Dispute record if item.chargebackCount > 0

Target:
LeapfinDispute(schema)
Source:
authorizenet-batch (schema)
objectType"dispute"
idauthorizenet-batch.external_id
amountitem.chargebackAmount
currencyCodeauthorizenet-batch.currencyCode
status"lost"
dateauthorizenet-batch.settlementTimeUTC
initiatedDateauthorizenet-batch.settlementTimeUTC
resolvedDateauthorizenet-batch.settlementTimeUTC
descriptionnone
exchangeRatesnone
customFields- batchId = authorizenet-batch.batchId
- chargeChargeBackAmount = item.chargeChargeBackAmount
- refundChargeBackAmount = item.refundChargeBackAmount
linksnone