# Services
The Snipcart plugin exposes just about everything it can do with Services. Each is accessible everywhere via Snipcart::$plugin->handle
, where handle
is the "camelCase" name of the class. If you wanted to interact with the Snipcart REST API, for example, you could use $someData = Snipcart::$plugin->api->get('pretend-endpoint')
to grab data from a GET request.
# Api (opens new window)
Interacts directly with the Snipcart API via get()
or post()
. Just specify your desired endpoint and an optional array of parameters.
# getClient()
Returns a configured instance of GuzzleHttp\Client
ready to interact with the Snipcart REST API.
# get()
Perform a GET request with the Snipcart API.
Argument | Required | Description |
---|---|---|
$endpoint string | yes | Snipcart API endpoint to be queried |
$parameters array | array of parameters to be URL formatted | |
$useCache bool | whether or not to cache responses |
Returns valid response data as single object or array of objects—otherwise null
.
# post()
Perform post request to the Snipcart API.
Argument | Required | Description |
---|---|---|
$endpoint string | yes | Snipcart API endpoint to be queried |
$data array | array of parameters to be sent |
Returns decoded response data.
# put()
Perform put request to the Snipcart API.
Argument | Required | Description |
---|---|---|
$endpoint string | yes | Snipcart API endpoint to be queried |
$data array | array of parameters to be sent |
Returns decoded response data.
# delete()
Perform delete request to the Snipcart API.
Argument | Required | Description |
---|---|---|
$endpoint string | yes | Snipcart API endpoint to be queried |
$data array | array of parameters to be sent |
Returns decoded response data.
# tokenIsValid()
Ask Snipcart whether its provided token is genuine.
Used for webhook requests (except when devMode
is true) to verify they were sent by Snipcart.
Tokens are deleted after this call, so it can only be used once to verify and tokens expire in one hour. Expect a 404 if the token is deleted or expired.
Argument | Required | Description |
---|---|---|
$token string | yes | token to be validated, probably from HTTP_X_SNIPCART_REQUESTTOKEN post variable |
Returns true
if valid, otherwise false
.
# invalidateCache()
Invalidate any of the plugin's cached GET requests.
Doesn't return anything.
# Carts (opens new window)
Gets abandoned cart info.
# listAbandonedCarts()
Lists the first page of abandoned cart objects.
WARNING
The plugin's interface matches others with pagination, but Snipcart's API follows a different pagination scheme here and returns hasMoreResults
and continuationToken
. limit
and offset
are effectively ignored.
This method will most likely be changed or deprecated in the future.
Returns an object with the following properties.
- items AbandonedCart[] (opens new window)
- totalItems int
- offset int
- continuationToken string|null
- hasMoreResults bool
- limit int
# getAbandonedCart()
Argument | Required | Description |
---|---|---|
$cartId string | yes | unique ID of an abandoned cart |
Returns an AbandonedCart model (opens new window) or null
.
# Customers (opens new window)
Lists and searches customer data.
# listCustomers()
List Snipcart customers.
Argument | Required | Description |
---|---|---|
$page int | page of results (default: 1 ) | |
$limit array | number of results per page (default: 20 ) | |
$params array | additional parameters (opens new window) to pass with the REST request; page and limit method parameters will be honored (default: [] ) |
Returns an array of Customer models (opens new window) or null
.
# getCustomer()
Get a specific customer by the related Snipcart ID.
Argument | Required | Description |
---|---|---|
$customerId string | yes | Snipcart customer ID |
Returns a Customer model (opens new window) or null
.
# getCustomerOrders()
Get a customer's complete order history, sorted by descending date.
Argument | Required | Description |
---|---|---|
$customerId string | yes | Snipcart customer ID |
Returns an array of Order models (opens new window).
TIP
Note that Snipcart does not populate each Order's items
array with this call. If you need individual Order Items, you'll need to make another call to Orders::getOrder()
.
# Data (opens new window)
Returns store statistics.
# getOrderCount()
Get the number of orders by day between two dates.
Argument | Required | Description |
---|---|---|
$from DateTime|int | yes | DateTime object or Unix timestamp that describes the beginning of the range |
$to DateTime|int | yes | DateTime object or Unix timestamp that describes the end of the range |
Returns an object decoded from the following JSON format:
{
"labels": [
"Number of orders"
],
"data": [
{
"name": "2017-04-04",
"value": 12
},
...
],
"to": 1493881200,
"from": 1491289200,
"currency": null
}
# getPerformance()
Get store performance stats between two dates.
Argument | Required | Description |
---|---|---|
$from DateTime|int | yes | DateTime object or Unix timestamp that describes the beginning of the range |
$to DateTime|int | yes | DateTime object or Unix timestamp that describes the end of the range |
Returns an object decoded from the following JSON format:
{
"ordersSales": 100.00,
"ordersCount": 10,
"averageCustomerValue": 10.000000,
"taxesCollected": 10.00,
"shippingCollected": 10.00,
"customers": {
"newCustomers": 10,
"returningCustomers": 10
},
"averageOrdersValue": 0.000000000000000000000000000,
"totalRecovered": 0.0
}
# getSales()
Get store saltes totals between two dates.
Argument | Required | Description |
---|---|---|
$from DateTime|int | yes | DateTime object or Unix timestamp that describes the beginning of the range |
$to DateTime|int | yes | DateTime object or Unix timestamp that describes the end of the range |
Returns an object decoded from the following JSON format:
{
"labels": [
"Total sales"
],
"data": [
{
"name": "2017-04-04",
"value": 120.13
},
...
],
"to": 1493881200,
"from": 1491289200,
"currency": null
}
# Discounts (opens new window)
Lists, modifies, and creates store discounts.
# listDiscounts()
Returns an array of Discount (opens new window) models.
# createDiscount()
Creates a new discount.
Argument | Required | Description |
---|---|---|
$discount Discount (opens new window) | yes | discount to be saved |
Returns the Snipcart API's decoded response.
# getDiscount()
Gets an existing discount.
Argument | Required | Description |
---|---|---|
$discountId string | yes | unique ID of desired discount |
Returns a Discount model (opens new window) or null
.
# updateDiscount()
Updates an existing discount.
Argument | Required | Description |
---|---|---|
$discount Discount (opens new window) | yes | discount to be updated |
Returns the Snipcart API response object. If successful it will be the updated discount data.
# deleteDiscountById()
Deletes a discount by the supplied ID.
Argument | Required | Description |
---|---|---|
$discountId | yes | unique ID of desired discount |
Returns the Snipcart API's decoded response.
# Fields (opens new window)
Gets and saves Product Details field data. (Used by included Field Type.)
# saveProductDetailsField()
Saves data (in a record) for a Product Details field.
Argument | Required | Description |
---|---|---|
$field ProductDetails (opens new window) | yes | field to be saved |
$element ElementInterface | yes | relevant Element |
Returns true
if successful or null
if the field's data is empty.
# getProductDetailsField()
Fetches the data for a Product Details field.
Argument | Required | Description |
---|---|---|
$field ProductDetails (opens new window) | yes | related Field |
$element ElementInterface | relevant Element | |
$value | optional value that should be used to populate the model, otherwise it will be populated with record data or field defaults accordingly |
Returns ProductDetails model (opens new window) or null
.
# Notifications (opens new window)
Sends notifications as things happen. Currently just email.
WARNING
This service is likely to change as parts are abstracted to a future Notification model for validation and broader notification options (Slack, etc.).
# setNotificationVars()
Sets template variables for the notification. Should be called before sendEmail()
.
Argument | Required | Description |
---|---|---|
$data array|object | yes | Twig variables meant for the notification template |
Doesn't return anything.
# getNotificationVars()
Gets template variables for the notification.
Returns an array, object, or null
.
# setErrors()
Sets notification errors.
Argument | Required | Description |
---|---|---|
$data array | yes | array of error strings compatible with parent's setErrors() |
Doesn't return anything.
# setEmailTemplate()
Sets notification email template.
Argument | Required | Description |
---|---|---|
$htmlTemplate string | yes | Twig template path to be used for the HTML email notification |
$textTemplate string | Twig template path to be used for an alternate, plain text email notification | |
$frontend boolean | whether the supplied path is on the front (site) end or the back (plugin) end, which matters for setting the template mode (default: false ) |
Doesn't return anything.
# sendEmail()
Sends an email notification.
Argument | Required | Description |
---|---|---|
$to array | yes | array of valid email addresses |
$subject string | yes | message subject |
Returns true
if successful, otherwise false
. If it didn't go well, use getErrors()
to find out why.
# Orders (opens new window)
Interacts with Orders.
# getOrder()
Gets a Snipcart order by ID.
Argument | Required | Description |
---|---|---|
$orderId string | yes | unique ID of the order |
Returns Order model (opens new window) or null
.
# getOrders()
Gets Snipcart orders, optionally by parameters supported by Snipcart's REST API (opens new window).
Argument | Required | Description |
---|---|---|
$params array | parameters used for fetching results |
Returns an array of Order models (opens new window).
# getAllOrders()
Gets Snipcart orders, optionally by parameters supported by Snipcart's REST API (opens new window), quietly aggreggating results across pagination from the REST API.
WARNING
Careful using this as long result sets could require a long wait!
Argument | Required | Description |
---|---|---|
$params array | parameters used for fetching results |
Returns an array of Order models (opens new window).
# getOrderNotifications()
Gets the notifications Snipcart has sent regarding a specific order.
Argument | Required | Description |
---|---|---|
$orderId string | yes | unique ID of the order |
Returns an array of Notification models (opens new window).
# getOrderRefunds()
Gets a Snipcart order's refunds.
Argument | Required | Description |
---|---|---|
$orderId string | yes | unique ID of the order |
Returns an array of Refund models (opens new window).
# listOrders()
Gets Snipcart orders specifically including pagination info.
Argument | Required | Description |
---|---|---|
$page int | desired page of results (default: 1 ) | |
$limit int | number of results per page (default: 25 ) | |
$params array | parameters used for fetching results |
Returns an object with the following keys:
- items: array of Order models (opens new window) up to the pagination limit
- totalItems: int representing the result set's total number of orders
- offset: int pagination offset
- limit: pagination limit
# updateProductsFromOrder()
Get Craft Elements that relate to order items, updating quantities if that field setting is enabled and the item has a non-zero quantity value.
Argument | Required | Description |
---|---|---|
$order Order (opens new window) | yes | order whose items should be checked |
Returns true
if successful, or an array of errors if a resulting notification failed.
# getOrderPackaging()
Triggers EVENT_BEFORE_REQUEST_SHIPPING_RATES
to allow another plugin or module to provide packaging details for an order before shipping rates are requested.
Argument | Required | Description |
---|---|---|
$order Order (opens new window) | yes | order for which shipping rates will be requested |
Returns the Package (opens new window) model, populated by an event hook or instantiated but literally and symbolically empty.
# sendOrderEmailNotification()
Have Craft email an order notification.
Argument | Required | Description |
---|---|---|
$order Order (opens new window) | yes | the relevant Snipcart order |
$extra array | extra variables meant for the Twig notification template | |
$type string | notifyAdmin or notifyCustomer (default: notifyAdmin ) |
Returns true
if successful, otherwise an array of error strings.
# refundOrder()
Applies a refund to an order.
Argument | Required | Description |
---|---|---|
$order Order (opens new window) | yes | the relevant Snipcart order |
$amount float | yes | the amount to be refunded |
$comment string | refund comment | |
$notifyCustomer bool | whether to send a Snipcart notification to the customer (default: false ) |
Returns the decoded response from the Snipcart REST API.
# Products (opens new window)
Handles local product data related to Snipcart Orders.
# reduceInventory()
Adjusts the supplied Entry's product inventory by the quantity value if...
- it uses the Product Details field and
- its inventory value exists and is greater than zero
EVENT_PRODUCT_INVENTORY_CHANGE
will also be fired before the adjustment so an Event hook can modifies the quantity
property prior to the adjustment.
Argument | Required | Description |
---|---|---|
$orderItem Item | yes | Snipcart Item that was part of a completed order |
Doesn't return anything.
# Shipments (opens new window)
Facilitates optional interaction with ShipStation.
# getShipStation()
Returns an instance of the ShipStation provider (opens new window).
# collectRatesForOrder()
Collects shipping rate options for a Snipcart order. Triggers EVENT_BEFORE_RETURN_SHIPPING_RATES
so that existing rate, order, or packaging details can be modified by an Event hook before querying ShipStation's REST API for rates.
Argument | Required | Description |
---|---|---|
$order Order (opens new window) | yes | order for which shipping rate options are needed |
Returns an array with two keys:
rates
: array ShippingRate[] (opens new window)package
: Package (opens new window)
# handleCompletedOrder()
Handles an order that's been completed, normally sent after receiving a webhook post from Snipcart.
Argument | Required | Description |
---|---|---|
$order Order (opens new window) | yes | order that's just been completed |
Returns an array with the following keys:
orders
: array containing a ShipStation Order (opens new window) if one was createderrors
: array of error strings encountered attempting to send the Snipcart order to ShipStation
# getQuoteLogForOrder()
Get the last shipping rate quote that was returned for the given order.
Argument | Required | Description |
---|---|---|
$order Order (opens new window) | yes | order whose rate quotes we're looking for |
Returns most recent ShippingQuoteLog that matches the Snipcart order ID, if found.
# Subscriptions (opens new window)
Interacts with Snipcart subscriptions.
# listSubscriptions()
Returns Snipcart subscriptions.
Argument | Required | Description |
---|---|---|
$page int | desired page of results (default: 1 ) | |
$limit int | number of results per page (default: 25 ) | |
$params array | parameters used for fetching results |
Returns an object with the following keys:
- items: array of Subscription models (opens new window) up to the pagination limit
- totalItems: int representing the result set's total number of subscriptions
- offset: int pagination offset
- limit: pagination limit
# getSubscription()
Gets a Snipcart subscription.
Argument | Required | Description |
---|---|---|
$subscriptionId string | yes | Snipcart subscription ID |
Returns a Subscription model (opens new window) or null
.
# cancel()
Cancels a subscription.
Argument | Required | Description |
---|---|---|
$subscriptionId string | yes | Snipcart subscription ID |
Returns decoded response data from the Snipcart REST API.
# pause()
Pauses a subscription.
Argument | Required | Description |
---|---|---|
$subscriptionId string | yes | Snipcart subscription ID |
Returns decoded response data from the Snipcart REST API.
# resume()
Resumes a subscription.
Argument | Required | Description |
---|---|---|
$subscriptionId string | yes | Snipcart subscription ID |
Returns decoded response data from the Snipcart REST API.
# Webhooks (opens new window)
Handles posts sent to the Webhooks controller (opens new window) by prepping models and dispatching Events.
# setData()
Sets the payload data and derived mode to be utilized within the service and quietly logs the request before processing if logging is enabled.
Argument | Required | Description |
---|---|---|
$payload mixed | yes | decoded request body that Snipcart posted to the webhook |
Doesn't return anything.
# getData()
Returns payload data in whatever format it was received. Or null
.
# setMode()
Explicitly sets the webhook mode, which should be either Live
or Test
. Returns that mode.
# getMode()
Returns the current webhook mode, which should be either Live
or Test
.
# handleOrderCompleted()
Handles a completed order. Returns an array with the following keys:
success
: boolean,true
if everything went as expected with no errorserrors
: an array of strings that represent errors encountered handling the order
# handleShippingRatesFetch()
Handles a shipping rate request by calling shipments->collectRatesForOrder()
, logging any custom rates, and returning that array of ShippingRate models (opens new window).
# handleOrderStatusChange()
Handles an order status change. Returns [ 'success' => true ]
.
# handleOrderPaymentStatusChange()
Handles an order payment status change. Returns [ 'success' => true ]
.
# handleOrderTrackingNumberChange()
Handles an order tracking number change. Returns [ 'success' => true ]
.
# handleSubscriptionCreated()
Handles a created subscription. Returns [ 'success' => true ]
.
# handleSubscriptionCancelled()
Handles a cancelled subscription. Returns [ 'success' => true ]
.
# handleSubscriptionPaused()
Handles a paused subscription. Returns [ 'success' => true ]
.
# handleSubscriptionResumed()
Handles a resumed subscription. Returns [ 'success' => true ]
.
# handleSubscriptionInvoiceCreated()
Handles a new subscription invoice. Returns [ 'success' => true ]
.
# handleTaxesCalculate()
Handles a tax calculation request. Returns array with taxes
key (required by Snipcart REST API (opens new window)):
taxes
: array of Tax models (opens new window)
# handleCustomerUpdated()
Handles updated customer details. Returns [ 'success' => true ]
.
← Events