PHP Authorize.net Integration with JSON API: Process online payments with Authorize.net API

Recommend this page to a friend!
  Info   Documentation   View files (122)   Download .zip   Reputation   Support forum   Blog (1)    
Last Updated Ratings Unique User Downloads Download Rankings
2020-06-22 (1 month ago) Not yet rated by the usersTotal: 59 All time: 9,765 This week: 260
Version License PHP version Categories
authnetjson 4.1The PHP License7.2E-Commerce, Web services, PHP 7
Description Author

This package can be used to process online payments with Authorize.net API.

It can send HTTP requests to the Authorize.net JSON API Web server to execute several types of operations to obtain authorization for payments on the Internet. Currently it can:

- Authorize payments with a given credit card and capture the authorization results.
- Create a customer profile with his billing and shipping address and credit card details.
- Create a recurring subscription payment with credit card details
- Get processed transaction details
- Create a web hook to get payment processing response

Recommendations
Picture of John Conde
  Performance   Level  
Name: John Conde <contact>
Classes: 5 packages by
Country: United States United States
Age: 47
All time rank: 3375420 in United States United States
Week rank: 1
Innovation award
Innovation award
Nominee: 1x

Details

Latest Stable Version Total Downloads Scrutinizer Code Quality Build Status Code Coverage Maintainability License

AuthnetJSON

Library that abstracts Authorize.Net's JSON APIs.

Requirements

  • PHP 7.2+ (Support for PHP 7.2.0 - 7.4.*)
  • cURL PHP Extension
  • JSON PHP Extension
  • An Authorize.Net account

Support for PHP versions less than 7.2 has been removed from the master branch. There is a PHP 5.6 compatible branch available for development and releases for 5.6 may continue to be made as long as it is feasible to do so.

Installation

Simply add a dependency on stymiee/authnetjson to your project's composer.json file if you use Composer to manage the dependencies of your project.

Here is a minimal example of a composer.json file that just defines a dependency on AuthnetJSON:

{
    "require": {
        "stymiee/authnetjson": "~4.1"
    }
}

Basic Usage

Using this library usually consists of three steps:

  1. Initiate the library with the login credentials for your Authorize.Net account
  2. Make the API call passing any required parameters as an array
  3. Check for the results and use them appropriately

NOTE: If you are viewing any of the examples in a browser you will need to fill your Authorize.Net credentials in config.inc.php before usage

Simple usage:

$request = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY);
$response = $request->getTransactionDetailsRequest([
    'transId' => '2162566217'
]);
if ($response->isSuccessful()) {
    echo $json->transaction->transactionStatus;
}

The format of the array to be passed during the API call follows the structure outlined in Authorize.Net's Integration Guide.

Using the Authorize.Net Development Server

Authorize.Net provides a development environment for developers to test their integration against. To use this endpoint (as opposed to their production endpoint) set the optional third parameter of AuthnetApiFactory::getJsonApiHandler() to be 1 or use the built in class constant AuthnetApiFactory::USE_DEVELOPMENT_SERVER:

$json = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY, 
                                                AuthnetApiFactory::USE_DEVELOPMENT_SERVER);

Usage Examples

To help make how this library is used easier to understand example API calls are provided in the example directory. Examples for all of the current APIs calls are represented. You may need to make adjustments to get some to work as they may be dependent on valid values created from other API calls (i.e. a void will not work without a valid transaction ID).

Authorize and Capture (Basic)

$request = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY);
$response = $request->createTransactionRequest([
    'refId' => rand(1000000, 100000000),
    'transactionRequest' => [
        'transactionType' => 'authCaptureTransaction',
        'amount' => 5,
        'payment' => [
            'creditCard' => [
                'cardNumber' => '4111111111111111',
                'expirationDate' => '122026',
                'cardCode' => '999',
            ]
        ]
    ]
]);

if ($response->isSuccessful()) {
    echo $response->transactionResponse->authCode;
}

Authorize and Capture (Full)

$request = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY);
$response = $request->createTransactionRequest([
    'refId' => rand(1000000, 100000000),
    'transactionRequest' => [
        'transactionType' => 'authCaptureTransaction',
        'amount' => 5,
        'payment' => [
            'creditCard' => [
                'cardNumber' => '4111111111111111',
                'expirationDate' => '122026',
                'cardCode' => '999',
            ],
        ],
        'order' => [
            'invoiceNumber' => '1324567890',
            'description' => 'this is a test transaction',
        ],
        'lineItems' => [
            'lineItem' => [
                0 => [
                    'itemId' => '1',
                    'name' => 'vase',
                    'description' => 'Cannes logo',
                    'quantity' => '18',
                    'unitPrice' => '45.00'
                ],
                1 => [
                    'itemId' => '2',
                    'name' => 'desk',
                    'description' => 'Big Desk',
                    'quantity' => '10',
                    'unitPrice' => '85.00'
                ]
            ]
        ],
        'tax' => [
           'amount' => '4.26',
           'name' => 'level2 tax name',
           'description' => 'level2 tax',
        ],
        'duty' => [
           'amount' => '8.55',
           'name' => 'duty name',
           'description' => 'duty description',
        ],
        'shipping' => [
           'amount' => '4.26',
           'name' => 'level2 tax name',
           'description' => 'level2 tax',
        ],
        'poNumber' => '456654',
        'customer' => [
           'id' => '18',
           'email' => 'someone@blackhole.tv',
        ],
        'billTo' => [
           'firstName' => 'Ellen',
           'lastName' => 'Johnson',
           'company' => 'Souveniropolis',
           'address' => '14 Main Street',
           'city' => 'Pecan Springs',
           'state' => 'TX',
           'zip' => '44628',
           'country' => 'USA',
        ],
        'shipTo' => [
           'firstName' => 'China',
           'lastName' => 'Bayles',
           'company' => 'Thyme for Tea',
           'address' => '12 Main Street',
           'city' => 'Pecan Springs',
           'state' => 'TX',
           'zip' => '44628',
           'country' => 'USA',
        ],
        'customerIP' => '192.168.1.1',
        'transactionSettings' => [
            'setting' => [
                0 => [
                    'settingName' =>'allowPartialAuth',
                    'settingValue' => 'false'
                ],
                1 => [
                    'settingName' => 'duplicateWindow',
                    'settingValue' => '0'
                ],
                2 => [
                    'settingName' => 'emailCustomer',
                    'settingValue' => 'false'
                ],
                3 => [
                    'settingName' => 'recurringBilling',
                    'settingValue' => 'false'
                ],
                4 => [
                    'settingName' => 'testRequest',
                    'settingValue' => 'false'
                ]
            ])
        ],
        'userFields' => [
            'userField' => [
                0 => [
                    'name' => 'MerchantDefinedFieldName1',
                    'value' => 'MerchantDefinedFieldValue1',
                ],
                1 => [
                    'name' => 'favorite_color',
                    'value' => 'blue',
                ],
            ],
        ],
    ],
]);

if ($response->isSuccessful()) {
    echo $response->transactionResponse->authCode;
}

Create a Customer Profile

$request = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY);
$response = $request->createCustomerProfileRequest([
        'profile' => [
        'merchantCustomerId' => '12345',
        'email' => 'user@example.com',
        'paymentProfiles' => [
            'billTo' => [
                'firstName' => 'John',
                'lastName' => 'Smith',
                'address' => '123 Main Street',
                'city' => 'Townsville',
                'state' => 'NJ',
                'zip' => '12345',
                'phoneNumber' => '800-555-1234'
            ],
            'payment' => [
                'creditCard' => [
                'cardNumber' => '4111111111111111',
                'expirationDate' => '2026-08',
                ],
            ],
        ],
        'shipToList' => [
            'firstName' => 'John',
            'lastName' => 'Smith',
            'address' => '123 Main Street',
            'city' => 'Townsville',
            'state' => 'NJ',
            'zip' => '12345',
            'phoneNumber' => '800-555-1234'
        ],
    ],
    'validationMode' => 'liveMode'
]);

if ($response->isSuccessful()) {
    echo $response->customerProfileId;
}

Create a Recurring Subscription

$request = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY);
$response = $request->ARBCreateSubscriptionRequest([
    'refId' => 'Sample',
    'subscription' => [
        'name' => 'Sample subscription',
        'paymentSchedule' => [
            'interval' => [
                'length' => '1',
                'unit' => 'months'
            ],
            'startDate' => '2020-04-18',
            'totalOccurrences' => '12',
            'trialOccurrences' => '1'
        ],
        'amount' => '10.29',
        'trialAmount' => '0.00',
        'payment' => [
            'creditCard' => [
                'cardNumber' => '4111111111111111',
                'expirationDate' => '2016-08'
            ])
        ],
        'billTo' => [
            'firstName' => 'John',
            'lastName' => 'Smith'
        ]
    ]
]);

if ($response->isSuccessful()) {
    echo $response->subscriptionId;
}

Get a List of Settled Batches

$request = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY);
$response = $request->getSettledBatchListRequest([
    'includeStatistics'   => 'true',
    'firstSettlementDate' => '2020-01-01T08:15:30',
    'lastSettlementDate'  => '2020-01-30T08:15:30',
]);

if ($response->isSuccessful()) {
    foreach ($response->batchList as $batch) {
        echo $batch->batchId;
    }
}

Get Transaction Detail From CIM API Calls

Some CIM API calls process an AUTH_CAPTURE transaction and return data similar to AIM AUTH_CAPTURE transactions. To access this information you can call AuthnetJsonResponse::getTransactionResponseField() using the field name or field number. For example, if you are looking for the transaction ID you can use:

$response->getTransactionResponseField('TransactionID');

or

$response->getTransactionResponseField(7);

Field name and number can be found in the Authorize.Net AIM Guide. Note that the field name has all spaces removed so TransactionID becomes TransactionID.

Create a Webhook

$response = $request->createWebhooks([
    "net.authorize.customer.subscription.expiring",
    "net.authorize.customer.subscription.suspended",
    "net.authorize.payment.authcapture.created",
    "net.authorize.payment.authorization.created",
    "net.authorize.payment.capture.created",
    "net.authorize.payment.fraud.approved",
    "net.authorize.payment.fraud.declined",
    "net.authorize.payment.fraud.held",
    "net.authorize.payment.priorAuthCapture.created",
    "net.authorize.payment.refund.created",
    "net.authorize.payment.void.created"
], 'http://www.example.com:55950/api/webhooks', 'active');

Validate and access a Webhook

$payload = file_get_contents("php://input");
$webhook = new AuthnetWebhook(AUTHNET_SIGNATURE, $payload);
if ($webhook->isValid()) {
    // Access notifcation values
    // echo $webhook->eventType;
}

If apache_request_headers()/getallheaders() are not available to you, you can will need to get the HTTP request

headers and pass them as the third parameter to `AuthnetWebhook()`.

$headers = yourGetHeadersFunction();
$payload = file_get_contents("php://input");
$webhook = new AuthnetWebhook(AUTHNET_SIGNATURE, $payload, $headers);
if ($webhook->isValid()) {
    // Access notifcation values
    // echo $webhook->eventType;
}

Accept.js

To see examples of an Accept.js powered self hosted payment form, an Authorize.Net hosted payment form, and a hosted customer profile page, visit the Accept.js examples directory.

Debugging

To assist with debugging the __toString() method has been overridden to output important elements pertaining to the usage of this library. Simple echo your AuthnetJSON object to see:

  • The API Login ID used
  • The API transaction Key used
  • The API endpoint the request was sent to
  • The request JSON
  • The response JSON

Basic Usage:

$request = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY);
$response = $request->getUnsettledTransactionListRequest();
echo $request, $response;

Support

If you require assistance using this library start by viewing the HELP.md file included in this package. It includes common problems and their solutions.

If you need additional assistance, I can be found at Stack Overflow. Be sure when you ask a question pertaining to the usage of this class be sure to tag your question with the PHP and Authorize.Net tags. Make sure you follow their guide for asking a good question as poorly asked questions will be closed and I will not be able to assist you.

Do not use Stack Overflow to report bugs. Bugs may be reported here.

  Files  
File Role Description
.github (1 directory)
examples (8 directories)
src (2 directories)
tests (13 files)
.editorconfig Data Auxiliary data
CHANGELOG Data Auxiliary data
composer.json Data Auxiliary data
config.inc.php.dist Example Example script
CONTRIBUTING.md Data Auxiliary data
HELP.md Data Auxiliary data
license.txt Doc. Documentation
phpdoc.xml Data Auxiliary data
phpunit.xml Data Auxiliary data
README.md Doc. Documentation
SECURITY.md Data Auxiliary data

  Files  /  .github  
File Role Description
workflows (1 file)

  Files  /  .github  /  workflows  
File Role Description
   php.yml Data Auxiliary data

  Files  /  examples  
File Role Description
acceptjs (3 files)
aim (18 files)
arb (16 files)
cim (23 files)
fraud (2 files)
reporting (8 files)
sim (1 file)
webhooks (8 files)

  Files  /  examples  /  acceptjs  
File Role Description
   getHostedPaymentPageRequest.php Example Example script
   getHostedProfilePageRequest.php Example Example script
   selfHostedPaymentForm.php Example Example script

  Files  /  examples  /  aim  
File Role Description
   createTransactionRequest_authCapture.php Example Example script
   createTransactionRequest_authOnly.php Example Example script
   createTransactionRequest_captureOnly.php Example Example script
   createTransactionRequest_partialAuth.php Example Example script
   createTransactionR...ypalAuthCapture.php Example Example script
   createTransactionR...CaptureContinue.php Example Example script
   createTransactionR..._paypalAuthOnly.php Example Example script
   createTransactionR...uthOnlyContinue.php Example Example script
   createTransactionR...aypalGetDetails.php Example Example script
   createTransactionR...riorAuthCapture.php Example Example script
   createTransactionR...st_paypalRefund.php Example Example script
   createTransactionRequest_paypalVoid.php Example Example script
   createTransactionR...riorAuthCapture.php Example Example script
   createTransactionRequest_refund.php Example Example script
   createTransactionR...st_visaCheckout.php Example Example script
   createTransactionRequest_void.php Example Example script
   decryptPaymentDataRequest.php Example Example script
   sendCustomerTransa...nReceiptRequest.php Example Example script

  Files  /  examples  /  arb  
File Role Description
   ARBCancelSubscriptionRequest.php Example Example script
   ARBCreateSubscriptionRequest.php Example Example script
   ARBCreateSubscript...uestFromProfile.php Example Example script
   ARBCreateSubscript...uestFromProfile.php Example Example script
   ARBCreateSubscript...uestFromProfile.php Example Example script
   ARBCreateSubscript...uestFromProfile.php Example Example script
   ARBGetSubscriptionListRequest.php Example Example script
   ARBGetSubscriptionListRequest.php Example Example script
   ARBGetSubscriptionListRequest.php Example Example script
   ARBGetSubscriptionListRequest.php Example Example script
   ARBGetSubscriptionRequest.php Example Example script
   ARBGetSubscriptionRequest.php Example Example script
   ARBGetSubscriptionRequest.php Example Example script
   ARBGetSubscriptionRequest.php Example Example script
   ARBGetSubscriptionStatusRequest.php Example Example script
   ARBUpdateSubscriptionRequest.php Example Example script

  Files  /  examples  /  cim  
File Role Description
   createCustomerPaymentProfileRequest.php Example Example script
   createCustomerProfileRequest.php Example Example script
   createCustomerProf...iplePayAccounts.php Example Example script
   createCustomerProf...est_authCapture.php Example Example script
   createCustomerProf...equest_authOnly.php Example Example script
   createCustomerProf...est_captureOnly.php Example Example script
   createCustomerProf...riorAuthCapture.php Example Example script
   createCustomerProf...nRequest_refund.php Example Example script
   createCustomerProf...ionRequest_void.php Example Example script
   createCustomerShippingAddressRequest.php Example Example script
   deleteCustomerPaymentProfileRequest.php Example Example script
   deleteCustomerProfileRequest.php Example Example script
   deleteCustomerShippingAddressRequest.php Example Example script
   getCustomerPaymentProfileRequest.php Example Example script
   getCustomerProfileIdsRequest.php Example Example script
   getCustomerProfileRequest.php Example Example script
   getCustomerShippingAddressRequest.php Example Example script
   getHostedProfilePageRequest.php Example Example script
   updateCustomerPaymentProfileRequest.php Example Example script
   updateCustomerProfileRequest.php Example Example script
   updateCustomerShippingAddressRequest.php Example Example script
   updateSplitTenderGroupRequest.php Example Example script
   validateCustomerPa...tProfileRequest.php Example Example script

  Files  /  examples  /  fraud  
File Role Description
   getUnsettledTransactionListRequest.php Example Example script
   updateHeldTransactionRequest.php Example Example script

  Files  /  examples  /  reporting  
File Role Description
   getAUJobDetailsRequest.php Example Example script
   getAUJobSummaryRequest.php Example Example script
   getBatchStatisticsRequest.php Example Example script
   getMerchantDetailsRequest.php Example Example script
   getSettledBatchListRequest.php Example Example script
   getTransactionDetailsRequest.php Example Example script
   getTransactionListRequest.php Example Example script
   getUnsettledTransactionListRequest.php Example Example script

  Files  /  examples  /  sim  
File Role Description
   sim.php Example Example script

  Files  /  examples  /  webhooks  
File Role Description
   createWebhook.php Example Example script
   deleteWebhook.php Example Example script
   getEventTypes.php Example Example script
   getWebhook.php Example Example script
   listWebhooks.php Example Example script
   notificationHistory.php Example Example script
   ping.php Example Example script
   updateWebhook.php Example Example script

  Files  /  src  
File Role Description
authnet (10 files)
exceptions (8 files)

  Files  /  src  /  authnet  
File Role Description
   AuthnetAcceptJs.php Class Class source
   AuthnetApiFactory.php Class Class source
   AuthnetJson.php Class Class source
   AuthnetJsonRequest.php Class Class source
   AuthnetJsonResponse.php Class Class source
   AuthnetSim.php Class Class source
   AuthnetWebhook.php Class Class source
   AuthnetWebhooksRequest.php Class Class source
   AuthnetWebhooksResponse.php Class Class source
   TransactionResponse.php Class Class source

  Files  /  src  /  exceptions  
File Role Description
   AuthnetCannotSetParamsException.php Class Class source
   AuthnetCurlException.php Class Class source
   AuthnetException.php Class Class source
   AuthnetInvalidAmountException.php Class Class source
   AuthnetInvalidCredentialsException.php Class Class source
   AuthnetInvalidJsonException.php Class Class source
   AuthnetInvalidServerException.php Class Class source
   AuthnetTransaction...seCallException.php Class Class source

  Files  /  tests  
File Role Description
   AuthnetApiFactoryTest.php Class Class source
   AuthnetJsonAimPaypalTest.php Class Class source
   AuthnetJsonAimTest.php Class Class source
   AuthnetJsonArbTest.php Class Class source
   AuthnetJsonCimTest.php Class Class source
   AuthnetJsonReportingTest.php Class Class source
   AuthnetJsonRequestTest.php Class Class source
   AuthnetJsonResponseTest.php Class Class source
   AuthnetSimTest.php Class Class source
   AuthnetWebhooksRequestTest.php Class Class source
   AuthnetWebhooksResponseTest.php Class Class source
   AuthnetWebhookTest.php Class Class source
   TransactionResponseTest.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 95%
Total:59
This week:0
All time:9,765
This week:260

For more information send a message to info at phpclasses dot org.