Webhooks : taxes

Snipcart dispose d'un système de gestion des taxes dans le tableau de bord du commerçant. Mais si vous avez besoin d'un contrôle total sur la façon dont les taxes sont calculées, les webhooks sont la solution. Ils vous permettront de retourner par programmation les taxes dont vous avez besoin pour chaque commande.

Snipcart enverra une requête HTTP à votre serveur avec tous les détails du panier en cours. Sur la base de ces informations, votre application sera responsable de retourner les taxes applicables.

Snipcart fera une requête POST à votre application. Le corps de la requête sera un objet JSON comme celui ci :

{
  "eventName": "taxes.calculate",
  "mode": "Test",
  "createdOn": "2017-05-01T19:05:18.1321539Z",
  "content": {
    "ipAddress": "127.0.0.1",
    "lang": "en",
    "token": "5af47604-61ef-454b-92c9-37f64684e5e5",
    "version": "2.0",
    "email": "geeks@snipcart.com",
    "mode": "Test",
    "status": "InProgress",
    "shipToBillingAddress": true,
    "billingAddress": {
      "name": "Geeks at Snipcart",
      "company": "Snipcart",
      "address1": "226 rue St-Joseh E",
      "address2": "",
      "city": "Québec",
      "country": "CA",
      "postalCode": "G1K3A9",
      "province": "QC",
      "phone": ""
    },
    "shippingAddress": {
      "name": "Geeks at Snipcart",
      "company": "Snipcart",
      "address1": "226 rue St-Joseh E",
      "address2": "",
      "city": "Québec",
      "country": "CA",
      "postalCode": "G1K3A9",
      "province": "QC",
      "phone": ""
    },
    "completionDate": null,
    "invoiceNumber": "",
    "shippingInformation": {
      "fees": 10,
      "method": "Shipping"
    },
    "paymentMethod": 0,
    "metadata": {},
    "items": [
      {
        "uniqueId": "abb5bd38-ae77-4feb-8d05-c674e302f986",
        "token": "",
        "id": "1",
        "name": "An item",
        "price": 300,
        "description": "Item description",
        "url": "/",
        "image": "http://placehold.it/50/50",
        "quantity": 1,
        "minQuantity": null,
        "maxQuantity": null,
        "stackable": true,
        "shippable": true,
        "taxable": true,
        "taxes": [],
        "customFields": [],
        "duplicatable": false,
        "metadata": null,
        "unitPrice": 300,
        "totalPrice": 300,
        "totalPriceWithoutTaxes": 300,
        "addedOn": 1493665299,
        "initialData": "",
        "modificationDate": 1493665299
      }
    ],
    "discounts": [],
    "customFields": [],
    "plans": [],
    "refunds": [],
    "taxes": [],
    "currency": "usd",
    "totalWeight": 3000,
    "total": 310,
    "discountsTotal": 0,
    "itemsTotal": 300,
    "taxesTotal": 0,
    "plansTotal": 0,
    "taxProvider": null,
    "modificationDate": 1493665318,
    "creationDate": 1493665299
  }
}

Nous nous attendons à recevoir un objet JSON en retour de votre serveur comme ceci :

{
  "taxes": [
    {
      "name": "Tax1",
      "amount": 10.00,
      "numberForInvoice": "TAX-001",
      "rate": 0.05
    },
    {
      "name": "Tax2",
      "amount": 20.00,
      "numberForInvoice": "TAX-002",
      "rate": 0.10
    }
  ]
}

Si vous souhaitez que vos taxes soient incluses dans le prix, vous devrez le spécifier dans la taxe retournée par votre webhook avec la propriété includedInPrice. Dans ce cas, le client verra toujours les taxes dans le sommaire de la commande. Cependant, elles ne seront pas ajoutées au total du panier.

{
  "taxes": [
    {
      "name": "Tax1",
      "amount": 10.00,
      "rate": 0.05,
      "numberForInvoice": "TAX-001",
      "includedInPrice": true
    },
    {
      "name": "Tax2",
      "amount": 20.00,
      "rate": 0.10,
      "numberForInvoice": "TAX-002",
      "includedInPrice": true
    }
  ]
}

Si votre taxe est incluse dans le prix, vous pouvez également préciser si elle s'applique également aux frais de livraison. Vous pouvez utiliser la propriété appliesOnShipping.

{
  "taxes": [
    {
      "name": "Tax1",
      "amount": 10.00,
      "rate": 0.05,
      "numberForInvoice": "TAX-001",
      "includedInPrice": true,
      "appliesOnShipping": true
    },
    {
      "name": "Tax2",
      "amount": 20.00,
      "rate": 0.10,
      "numberForInvoice": "TAX-002",
      "includedInPrice": true,
      "appliesOnShipping": false
    }
  ]
}