Integrate Stripe-powered eCommerce Stores with NetSuite

Streamline your eCommerce NetSuite integration: automate cash application, bank reconciliation, and handle refunding Stripe charges from within NetSuite.


The SuiteSync eCommerce workflow is a great fit for customers who leverage NetSuite for order fulfillment and use an eCommerce application (Shopify, WooCommerce, Spree, BigCommerce, etc) and Stripe for payment processing and order collection. Here's an overview of this workflow:

  1. You push order from your eCommerce application (Shopify, WooCommerce, Spree, etc) and link the NetSuite Sales Order to the Stripe charge.
  2. You create a NetSuite Invoice from the SalesOrder. Normally, this happens when the order is fulfilled in NetSuite.
  3. SuiteSync looks for NetSuite Invoices, and creates a CustomerPayment applied to the Invoice from the Stripe Charge. In addition to a CustomerPayment workflow, CustomerDeposits are also supported.
  4. The customer payment is automatically reconciled against the corresponding bank deposit. Any processing fees are automatically recorded.
  5. If you need to issue a refund, create a CreditMemo is NetSuite for the amount of the refund and SuiteSync will automatically create the refund in Stripe for you.

The two key benefits of this flow:

  • Your CX team doesn't have to use Stripe to create refunds or manage the order flow.
  • Your technical team won't have to build a custom integration or manage attempting to get several integration systems talking with each other.
  • Your finance team will stop having to worry about cash application, deposit reconciliation, and fee recording. This will be completely automated and happen silently in the background.

Here's a visual overview:

eCommerce Overview

Technical Overview

Your system is responsible for:

  1. Creating the Stripe charge. Normally this is the default flow: a Stripe charge is created at checkout time, before the order as been pushed into NetSuite.
  2. Pushing an order to NetSuite, and adding the Stripe Charge ID to a custom field on the SalesOrder (more on this later). This is done by a NetSuite integration specific to your eCommerce application. There are pre-built integrations available for most eCommerce applications.
  3. Billing the SalesOrder by creating a Invoice. This is normally done after the order is fulfilled.

After the order is billed, SuiteSync will handle the rest of the process:

  1. SuiteSync inspects all open invoices that contain a Stripe Charge ID in the custom transaction field. When a charge is found, a link is created between the Stripe charge and the NetSuite Invoice. When the link is created you'll see a netsuite_invoice_id key in the Stripe charge metadata. This process occurs when the Invoice is updated, so you can create the NetSuite Invoice and then later link it to a Stripe Charge.
  2. After the link is created, a CustomerPayment is created in NetSuite corresponding to the Stripe Charge, and the full amount of the charge is applied to the Invoice.
  3. The CustomerPayment is reconciled against the corresponding bank deposit using the standard transfer reconciliation flow
  4. If you need to create a refund, normally you'll create three NetSuite records: ReturnAuthorization, CreditMemo, and CustomerRefund. When you create the CreditMemo, the Stripe Charge ID on the Invoice is copied to the CreditMemo. SuiteSync looks for CreditMemos with a charge ID in the custom field. If one is found, a refund for the amount of the CreditMemo is created and the Stripe refund ID is added to the CreditMemo.

Customer Deposits

Using CustomerDeposits in place of a CustomerPayment is also supported. If you accept pre-payment for orders that may not ship for several days, a CustomerDeposit workflow is often a good choice.

Here are the differences from the CustomerPayment workflow outlined above:

  1. When a Stripe Charge ID is added to a SalesOrder, a CustomerDeposit immediately is created and connected to the SalesOrder.
  2. Later on, when the SalesOrder is billed and an Invoice is created, the CustomerDeposits are applied to the

Here are some details to consider:

  • If you are using a auth-capture workflow, you cannot use CustomerDeposits.
  • A CustomerDeposit and CustomerPayment workflow can coexist within the same Stripe & NetSuite account.
  • Refunds look a bit different for CustomerDeposits.

Refunds

Refunds can be initiated from Stripe, or directly from NetSuite. Learn more about the refund process.

Disputes

Disputes are handled automatically. Learn more about how disputes are handled.

Implementation Guide

The piece of this workflow that is specific to SuiteSync is passing the Stripe Charge ID to the NetSuite SalesOrder and ensuring that a Invoice is created when the SalesOrder is billed.

  1. Create a custom transaction body field in NetSuite called custbody_suitesync_authorization_code. We create this for you during the onboarding process (you can also create it yourself)
  2. When creating the NetSuite SalesOrder or Invoice set the custbody_suitesync_authorization_code field to the Stripe ID. The Stripe ID will start with either ch_ or py_.
  3. The form used on the SalesOrder must create a Invoice in NetSuite. CashSales are not supported.
  4. If you have multiple subsidiaries, it's critical that the bank chosen connected to Stripe account is connected to the same subsidiaries as the NetSuite customers that are created.

View Example Implementation

Shopify Implementation Guide

The Shopify Transaction endpoint contains the Stripe Charge ID that SuiteSync requires to automatically link charges with their associated NetSuite invoice. The Shopify transaction receipt.id should have a value which starts with a py_ or ch_. Stripe uses these two prefixes to identify Stripe charges/payments. This reference to a Stripe payment is what SuiteSync requires

Spree, BigCommerce, WooCommerce, Magento, Solidus, etc

Contact support@suitesync.io for help with integrating these eCommerce systems.