All Projects → taxjar → taxjar-php

taxjar / taxjar-php

Licence: MIT license
Sales Tax API Client for PHP 5.5+

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to taxjar-php

taxjar.net
Sales Tax API Client for .NET / C#
Stars: ✭ 21 (-68.18%)
Mutual labels:  ecommerce, tax, tax-rate, taxjar, sales-tax, sales-tax-api
taxjar-magento2-extension
Magento 2 Sales Tax Extension by TaxJar
Stars: ✭ 23 (-65.15%)
Mutual labels:  ecommerce, tax, tax-rate, taxjar, sales-tax
taxjar-woocommerce-plugin
WooCommerce Sales Tax Plugin by TaxJar
Stars: ✭ 26 (-60.61%)
Mutual labels:  ecommerce, tax, tax-rate, taxjar, sales-tax
taxjar-java
Sales Tax API Client for Java
Stars: ✭ 13 (-80.3%)
Mutual labels:  ecommerce, taxjar, sales-tax, sales-tax-api
taxjar-python
Sales Tax API Client for Python 2.6+ / Python 3+
Stars: ✭ 24 (-63.64%)
Mutual labels:  ecommerce, taxjar, sales-tax, sales-tax-api
AvaTax-REST-V2-Ruby-SDK
Sales Tax API SDK for Ruby and AvaTax REST
Stars: ✭ 34 (-48.48%)
Mutual labels:  tax, tax-rate, sales-tax
AvaTax-REST-V2-PHP-SDK
Sales Tax API SDK for PHP and AvaTax REST
Stars: ✭ 42 (-36.36%)
Mutual labels:  ecommerce, tax-rate, sales-tax
vat-rates
💸 {Digital,Cloud,Electronic,Online} Services VAT Rate Database
Stars: ✭ 81 (+22.73%)
Mutual labels:  tax, tax-rate
saleor-sdk
JavaScript/TypeScript SDK for building e-commerce experiences and checkouts with Saleor API.
Stars: ✭ 125 (+89.39%)
Mutual labels:  ecommerce
amazin
A MERN-stack app for eCommerce platform, Webshop, Web Store. Storybook: https://www.amazin.one/ Alternative: https://ntrix.github.io/amazin-story
Stars: ✭ 27 (-59.09%)
Mutual labels:  ecommerce
commercejs-vuejs-boilerplate
Commerce.js boilerplate, built with Vue.js, for fast eCommerce development and design
Stars: ✭ 43 (-34.85%)
Mutual labels:  ecommerce
downtown
With our portal, we want to support local authorities and merchants. We want to connect merchants with closed stores to their customers. And we want to keep in mind, that not every merchant has a sophisticated digital strategy - or even a homepage.
Stars: ✭ 45 (-31.82%)
Mutual labels:  ecommerce
crimson commerce
An OpenSource Ecommerce platform on the Elixir/Phoenix stack, which aims to leverage the power of functional programming for ecommerce.
Stars: ✭ 74 (+12.12%)
Mutual labels:  ecommerce
meanstore
Simple Shopping Cart based on MongoDB ExpressJS AngularJS and NodeJS
Stars: ✭ 35 (-46.97%)
Mutual labels:  ecommerce
mechanic-tasks
Public task repository for Mechanic (https://mechanic.dev)
Stars: ✭ 42 (-36.36%)
Mutual labels:  ecommerce
react-pwa-reference-storefront
Reference Storefront Progressive Web Application in React
Stars: ✭ 43 (-34.85%)
Mutual labels:  ecommerce
eCommerce-site-using-Node-Express-js
eCommerce site using Node Express js
Stars: ✭ 53 (-19.7%)
Mutual labels:  ecommerce
raptor
A lightweight product recommendation system (Item Based Collaborative Filtering) developed in Haskell.
Stars: ✭ 34 (-48.48%)
Mutual labels:  ecommerce
Supply
🛍 Supply is a free e-commerce Jekyll theme with Gumroad integration.
Stars: ✭ 24 (-63.64%)
Mutual labels:  ecommerce
apisearch-bundle
⛵ Apisearch Symfony-Drift Bundle
Stars: ✭ 23 (-65.15%)
Mutual labels:  ecommerce

TaxJar Sales Tax API for PHP Packagist Build Status

Official PHP client for Sales Tax API v2. For the REST documentation, please visit https://developers.taxjar.com/api.


Requirements
Installation
Authentication
Usage
Custom Options
Sandbox Environment
Error Handling
Testing


Requirements

  • PHP 8.0 and later.
  • Guzzle (included via Composer).

Installation

Use Composer and add taxjar-php as a dependency:

composer require taxjar/taxjar-php
{
  "require": {
    "taxjar/taxjar-php": "^2.0"
  }
}

If you get an error with composer require, update your composer.json directly and run composer update.

Authentication

require __DIR__ . '/vendor/autoload.php';
$client = TaxJar\Client::withApiKey($_ENV['TAXJAR_API_KEY']);

You're now ready to use TaxJar! Check out our quickstart guide to get up and running quickly.

Usage

categories - List all tax categories
taxForOrder - Calculate sales tax for an order
listOrders - List order transactions
showOrder - Show order transaction
createOrder - Create order transaction
updateOrder - Update order transaction
deleteOrder - Delete order transaction
listRefunds - List refund transactions
showRefund - Show refund transaction
createRefund - Create refund transaction
updateRefund - Update refund transaction
deleteRefund - Delete refund transaction
listCustomers - List customers
showCustomer - Show customer
createCustomer - Create customer
updateCustomer - Update customer
deleteCustomer - Delete customer
ratesForLocation - List tax rates for a location (by zip/postal code)
nexusRegions - List nexus regions
validateAddress - Validate an address
validate - Validate a VAT number
summaryRates - Summarize tax rates for all regions


List all tax categories (API docs)

The TaxJar API provides product-level tax rules for a subset of product categories. These categories are to be used for products that are either exempt from sales tax in some jurisdictions or are taxed at reduced rates. You need not pass in a product tax code for sales tax calculations on product that is fully taxable. Simply leave that parameter out.

$categories = $client->categories();

Calculate sales tax for an order (API docs)

Shows the sales tax that should be collected for a given order.

$order_taxes = $client->taxForOrder([
  'from_country' => 'US',
  'from_zip' => '07001',
  'from_state' => 'NJ',
  'from_city' => 'Avenel',
  'from_street' => '305 W Village Dr',
  'to_country' => 'US',
  'to_zip' => '07446',
  'to_state' => 'NJ',
  'to_city' => 'Ramsey',
  'to_street' => '63 W Main St',
  'amount' => 16.50,
  'shipping' => 1.5,
  'line_items' => [
    [
      'id' => '1',
      'quantity' => 1,
      'product_tax_code' => '31000',
      'unit_price' => 15.0,
      'discount' => 0
    ]
  ]
]);

echo $order_taxes->amount_to_collect;
// 1.26

List order transactions (API docs)

Lists existing order transactions created through the API.

$orders = $client->listOrders([
  'from_transaction_date' => '2015/05/01',
  'to_transaction_date' => '2015/05/31'
]);

Show order transaction (API docs)

Shows an existing order transaction created through the API.

$order = $client->showOrder('123');

Create order transaction (API docs)

Creates a new order transaction.

$order = $client->createOrder([
  'transaction_id' => '123',
  'transaction_date' => '2015/05/14',
  'from_country' => 'US',
  'from_zip' => '92093',
  'from_state' => 'CA',
  'from_city' => 'La Jolla',
  'from_street' => '9500 Gilman Drive',
  'to_country' => 'US',
  'to_zip' => '90002',
  'to_state' => 'CA',
  'to_city' => 'Los Angeles',
  'to_street' => '123 Palm Grove Ln',
  'amount' => 17.45,
  'shipping' => 1.5,
  'sales_tax' => 0.95,
  'line_items' => [
    [
      'id' => '1',
      'quantity' => 1,
      'product_identifier' => '12-34243-9',
      'description' => 'Fuzzy Widget',
      'unit_price' => 15.0,
      'discount': 0,
      'sales_tax' => 0.95
    ]
  ]
]);

Update order transaction (API docs)

Updates an existing order transaction created through the API.

$order = $client->updateOrder([
  'transaction_id' => '123',
  'amount' => 17.95,
  'shipping' => 2.0,
  'line_items' => [
    [
      'quantity' => 1,
      'product_identifier' => '12-34243-0',
      'description' => 'Heavy Widget',
      'unit_price' => 15.0,
      'discount' => 0.0,
      'sales_tax' => 0.95
    ]
  ]
]);

Delete order transaction (API docs)

Deletes an existing order transaction created through the API.

$client->deleteOrder('123');

List refund transactions (API docs)

Lists existing refund transactions created through the API.

$refunds = $client->listRefunds([
  'from_transaction_date' => '2015/05/01',
  'to_transaction_date' => '2015/05/31'
]);

Show refund transaction (API docs)

Shows an existing refund transaction created through the API.

$refund = $client->showRefund('123-refund');

Create refund transaction (API docs)

Creates a new refund transaction.

$refund = $client->createRefund([
  'transaction_id' => '123-refund',
  'transaction_reference_id' => '123',
  'transaction_date' => '2015/05/14',
  'from_country' => 'US',
  'from_zip' => '92093',
  'from_state' => 'CA',
  'from_city' => 'La Jolla',
  'from_street' => '9500 Gilman Drive',
  'to_country' => 'US',
  'to_zip' => '90002',
  'to_state' => 'CA',
  'to_city' => 'Los Angeles',
  'to_street' => '123 Palm Grove Ln',
  'amount' => -17.45,
  'shipping' => -1.5,
  'sales_tax' => -0.95,
  'line_items' => [
    [
      'id' => '1',
      'quantity' => 1,
      'product_identifier' => '12-34243-9',
      'description' => 'Fuzzy Widget',
      'unit_price' => -15.0,
      'discount' => -0,
      'sales_tax' => -0.95
    ]
  ]
]);

Update refund transaction (API docs)

Updates an existing refund transaction created through the API.

$refund = $client->updateRefund([
  'transaction_id' => '123-refund',
  'transaction_reference_id' => '123',
  'amount' => -17.95,
  'shipping' => -2.0,
  'line_items' => [
    [
      'id' => '1',
      'quantity' => 1,
      'product_identifier' => '12-34243-0',
      'description' => 'Heavy Widget',
      'unit_price' => -15.0,
      'discount' => -0,
      'sales_tax' => -0.95
    ]
  ]
]);

Delete refund transaction (API docs)

Deletes an existing refund transaction created through the API.

$client->deleteRefund('123-refund');

List customers (API docs)

Lists existing customers created through the API.

$customers = $client->listCustomers();

Show customer (API docs)

Shows an existing customer created through the API.

$customer = $client->showCustomer('123');

Create customer (API docs)

Creates a new customer.

$customer = $client->createCustomer([
  'customer_id' => '123',
  'exemption_type' => 'wholesale',
  'name' => 'Dunder Mifflin Paper Company',
  'exempt_regions' => [
    [
      'country' => 'US',
      'state' => 'FL'
    ],
    [
      'country' => 'US',
      'state' => 'PA'
    ]
  ],
  'country' => 'US',
  'state' => 'PA',
  'zip' => '18504',
  'city' => 'Scranton',
  'street' => '1725 Slough Avenue'
]);

Update customer (API docs)

Updates an existing customer created through the API.

$customer = $client->updateCustomer([
  'customer_id' => '123',
  'exemption_type' => 'wholesale',
  'name' => 'Sterling Cooper',
  'exempt_regions' => [
    [
      'country' => 'US',
      'state' => 'NY'
    ]
  ],
  'country' => 'US',
  'state' => 'NY',
  'zip' => '10010',
  'city' => 'New York',
  'street' => '405 Madison Ave'
]);

Delete customer (API docs)

Deletes an existing customer created through the API.

$client->deleteCustomer('123');

List tax rates for a location (by zip/postal code) (API docs)

Shows the sales tax rates for a given location.

Please note this method only returns the full combined rate for a given location. It does not support nexus determination, sourcing based on a ship from and ship to address, shipping taxability, product exemptions, customer exemptions, or sales tax holidays. We recommend using taxForOrder to accurately calculate sales tax for an order.

$rates = $client->ratesForLocation(90002, [
  'city' => 'LOS ANGELES',
  'country' => 'US'
]);

echo $rates->combined_rate;
// 0.09

List nexus regions (API docs)

Lists existing nexus locations for a TaxJar account.

$nexus_regions = $client->nexusRegions();

Validate an address (API docs)

Validates a customer address and returns back a collection of address matches. Address validation requires a TaxJar Plus subscription.

$addresses = $client->validateAddress([
  'country' => 'US',
  'state' => 'AZ',
  'zip' => '85297',
  'city' => 'Gilbert',
  'street' => '3301 South Greenfield Rd'
]);

Validate a VAT number (API docs)

Validates an existing VAT identification number against VIES.

$validation = $client->validate([
  'vat' => 'FR40303265045'
]);

Summarize tax rates for all regions (API docs)

Retrieve minimum and average sales tax rates by region as a backup.

This method is useful for periodically pulling down rates to use if the TaxJar API is unavailable. However, it does not support nexus determination, sourcing based on a ship from and ship to address, shipping taxability, product exemptions, customer exemptions, or sales tax holidays. We recommend using taxForOrder to accurately calculate sales tax for an order.

$summarized_rates = $client->summaryRates();

Sandbox Environment

You can easily configure the client to use the TaxJar Sandbox:

require __DIR__ . '/vendor/autoload.php';
$client = TaxJar\Client::withApiKey($_ENV['TAXJAR_SANDBOX_API_KEY']);
$client->setApiConfig('api_url', TaxJar\Client::SANDBOX_API_URL);

For testing specific error response codes, pass the custom X-TJ-Expected-Response header:

$client->setApiConfig('headers', [
  'X-TJ-Expected-Response' => 422
]);

Custom Options

Timeout

This package utilizes Guzzle which defaults to a request timeout value of 0s, allowing requests to remain pending for an indefinite period of time.

You can modify this behavior by configuring the client with a timeout value in seconds.

$client->setApiConfig('timeout', 30);

API Version

By default, TaxJar's API will respond to requests with the latest API version when a version header is not present on the request.

To request a specific API version, include the x-api-version header with the desired version string.

$client->setApiConfig('headers', [
  'x-api-version' => '2020-08-07'
]);

Error Handling

When invalid data is sent to TaxJar or we encounter an error, we’ll throw a TaxJar\Exception with the HTTP status code and error message. To catch these exceptions, refer to the example below:

require __DIR__ . '/vendor/autoload.php';
$client = TaxJar\Client::withApiKey($_ENV['TAXJAR_API_KEY']);

try {
  // Invalid request
  $order = $client->createOrder([
    'transaction_date' => '2015/05/14',
    'from_country' => 'US',
    'from_zip' => '07001',
    'from_state' => 'NJ',
    'from_city' => 'Avenel',
    'from_street' => '305 W Village Dr',
    'to_country' => 'US',
    'to_zip' => '90002',
    'to_state' => 'CA',
    'to_city' => 'Ramsey',
    'to_street' => '63 W Main St',
    'amount' => 16.5,
    'shipping' => 1.5,
    'sales_tax' => 0.95,
    'line_items' => [
      [
        'id' => '1',
        'quantity' => 1,
        'product_tax_code' => '31000',
        'unit_price' => 15,
        'discount' => 0,
        'sales_tax' => 0.95
      ]
    ]
  ]);
} catch (TaxJar\Exception $e) {
  // 406 Not Acceptable – transaction_id is missing
  echo $e->getMessage();

  // 406
  echo $e->getStatusCode();
}

For a full list of error codes, click here.

Testing

Make sure PHPUnit is installed via composer install and run the following:

php vendor/bin/phpunit test/specs/.

To enable debug mode, set the following config parameter after authenticating:

$client->setApiConfig('debug', true);
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].