Manual Payments in NetSuite and Other Applications
Most SuiteSync workflows automate payment collection, application, reconciliation, etc. However, there are cases where payment information needs to be collected manually (phone or in-person).
SuiteSync's Embed feature is designed to support these manual workflows. You’ll enter the card information after the SalesOrder is created through a “plugin” that is installed in your NetSuite account. This allows for much faster card processing (you don’t need to wait for a SalesOrder to save to ensure the card can be charged).
Here's a short video walkthrough:
Here’s how it works:
- Customer service can process credit or debit payments through Stripe within the NetSuite SalesOrder and/or Invoice interface. Payments are created in NetSuite as Customer Deposits (for Sales Orders) or Customer Payments (for Invoices).
- Multiple payments can be created in sequence. This is helpful if a customer wants to pay a single order with multiple payment methods (e.g. if they are using both a gift card and a credit card).
- The total amount remaining is calculated and included as the default payment amount. This is an improvement over the standard multiple payment flow: if a customer has already paid a deposit for an order, the default amount to be charged is the amount left to be paid.
- Detailed errors indicating why a card failed is presented to the sales rep. Stripe provides great feedback about exactly why a card failed. This information is passed back to NetSuite to allow better communication with a customer around why a card failed.
- Integration with Stripe’s fraud system. If a charge is successful, but it marked as possibly being fraudulent, the sales rep is notified with information from Stripe indicating why the card may be fraudulent.
Here are some details, and differences from the standard NetSuite credit card processing, to keep in mind:
- Payment information cannot be entered into the SalesOrder before the SalesOrder has been saved.
- Since payment cannot be entered before a SalesOrder is created, it is not possible to prevent the successful creation of a SalesOrder if the card is not successfully authorized. You can use SuiteScripts and workflows to workaround this limitation.
- The built-in NetSuite payment input elements are not used.
- After a payment is created for a SalesOrder, you’ll be presented with a success message before being able to process another deposit.
- It normally takes ~10 seconds for a CustomerDeposit to be created. However, there are various factors which could cause a delay.
Using cards saved by other applications (Magento, WooCommerce, etc)
If a card is saved to a Stripe customer by another application, for instance during the checkout process of your eCommerce application, it can be used for manual payments in NetSuite or in the automatic billing system.
In order for the card to be used, the Stripe customer must be linked to the NetSuite customer. The Stripe customer is automatically linked to a NetSuite customer when a Stripe payment ID is added to a NetSuite invoice or sales order. As long as you have at least one successful order for a customer in NetSuite, their saved card will be available.
Each NetSuite customer can only be linked with a single NetSuite customer. If you have the case where customers may have multiple Stripe customers, but only a single NetSuite customer, only one of the Stripe customers is used within NetSuite.
Using the payment form in other applications
Although in this example the payment form is included in a NetSuite SalesOrder, it is possible to include this payment form in any application to accept payment using your Stripe account and automatically attach the Stripe charge as a CustomerPayment or CustomerDeposit to a NetSuite Invoice or SalesOrder.
This is an excellent way to enable your customers to pay off invoices that are due within your web application, without having to build a payment form with Stripe.
Reach out to support if you are interested in this functionality.
In addition to capturing the payment up front, you can optionally enable the option to allow users to authorize the charge to later be captured using our auth-capture workflow.
Using saved payment credentials
You can charge previously saved customer credentials and update the default payment method on customers. This is an optional feature can be enabled on your account.
ACH, Alipay, and other payment methods
Right now only credit and debit card transactions are supported. If you are interested in these other payment methods reach out to support; support for these payment methods may be in beta.
Postal Code Validation with Non-US Cards
SuiteSync automatically determines your customer’s billing address country based on their card number. Using this information, the postal code field validation reflects whether that country uses numeric or alphanumeric-formatted postal codes, or if the country uses postal codes at all. For instance, if a U.S. card is entered, the postal code field only accepts a five-digit numeric value. If it’s a UK card, an alphanumeric value can be provided instead.
Use these test cards to simulate how the form works with cards in various countries.
If you don't see the correct postal code formatting, it means that the card number you entered does originate from the correct country.
How are failures handled?
An invalid card is provided
You'll be notified immediately while entering in the card information on the SalesOrder or Invoice
Detailed failure information will be pulled from Stripe to help determine why the charge failed.
Stripe’s fraud system determines the payment could be fraudulent
In this case, the payment is still successfully processed. However, you’ll be notified that the charge may be fraudulent.
Additionally a fraud indicator can be added to the Sales Order or Invoice for further automation or manual review.
Network errors, or Stripe outages
If there are network errors (the user’s internet is disconnected) or a Stripe or SuiteSync outage, the user will get the following error: “A system error occurred while processing the card. Try again.”