ml-connector
Oracle JD EdwardsShopify

Oracle JD Edwards and Shopify integration

Oracle JD Edwards EnterpriseOne runs your on-premises financials and procurement. Shopify runs your online storefront. Connecting the two means that every customer order placed in Shopify flows into JD Edwards for accounting, revenue is recognized in the correct GL accounts and cost centers, and your financial close does not require manual entry of sales totals from your e-commerce channel. ml-connector bridges the very different API styles and keeps the two systems synchronized on a schedule you control.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne is an on-premises ERP suite that exposes financial data, purchase orders, accounts payable, accounts receivable, and the general ledger through REST Application Interface Services (AIS) Server running at the customer infrastructure. Authentication uses a session token obtained by submitting username and password to the AIS Server, and that token is passed in the jde-AIS-Auth header on all subsequent calls. The AIS Server URL is customer-specific and has no shared base hostname. JD Edwards exposes key financial tables including the Account Master (chart of accounts), Account Ledger (posted GL transactions), journal entry batches, and customer master, and polling is the only sync method since JD Edwards has no native outbound webhooks. Token lifetime is typically 30 to 60 minutes and varies by customer configuration, so ml-connector must re-authenticate when the token expires.

How Shopify works

Shopify is a cloud e-commerce platform that exposes orders, customers, transactions, payments, payouts, and inventory through the Shopify Admin API using GraphQL as the preferred transport and REST as a legacy option. Authentication uses OAuth2 with long-lived offline tokens prefixed shpat_ that do not expire, eliminating the need for refresh logic. Shopify delivers order, customer, transaction, and fulfillment events via webhooks to a registered endpoint, deduplicating each call by the X-Shopify-Webhook-Id header, and expects a 401 response on bad webhook signature to prevent retries from false-positive successes. Shopify does not model Vendors, Suppliers, or Purchase Orders, and has no native general ledger; payments and payouts are accessible but not mapped to GL accounts.

What moves between them

The main data flow is from Shopify into JD Edwards. ml-connector receives Shopify webhook notifications whenever an order is created, updated, or paid, extracts the order total, customer reference, and transaction date, and then posts a sales journal entry into JD Edwards general ledger, allocating the total to the correct revenue account and cost center. Customer information flows in the same direction so the order is linked to the matching customer record in JD Edwards. Reference data such as revenue accounts and cost centers is configured once during setup and does not flow between systems. Shopify transaction and payout data is read-only and never written back to Shopify, and JD Edwards order or customer data is never exported to Shopify.

How ml-connector handles it

ml-connector stores the Shopify OAuth token encrypted and uses GraphQL to read orders and customer details from Shopify, falling back to REST if needed. On the JD Edwards side it accepts the full AIS Server hostname per customer, obtains a session token using the service account credentials, and validates the token before each batch of orders. When a Shopify order webhook arrives, ml-connector decrypts the Shopify token, verifies the webhook signature, and extracts the order details. It then loads the revenue account and cost center configuration from JD Edwards, constructs a journal entry batch, and submits it to JD Edwards via orchestration or direct table insert depending on customer JDE Tools Release. If the token expires (JD Edwards returns HTTP 444), ml-connector re-authenticates immediately and retries the journal post. Shopify rate limits are handled with exponential backoff and jitter, and every order-to-journal mapping is logged in the audit trail so failed records can be replayed. The AIS Server URL is customer infrastructure, not a cloud endpoint, so ml-connector caches the connection and monitors for AIS Server restarts.

A real-world example

A mid-sized direct-to-consumer apparel brand runs JD Edwards on-premises to manage inventory, cost of goods, and accounts receivable, and operates a Shopify storefront handling thousands of orders per week. Before the integration, the accounting team exported daily sales reports from Shopify and manually entered revenue totals into JD Edwards, a process prone to timing delays and re-entry errors. The finance team also spent the first week of each month-end close reconciling Shopify order counts against the revenue accounts in JD Edwards. With Shopify and JD Edwards connected, every customer order automatically posts a journal entry into JD Edwards within minutes of purchase, allocated to the correct revenue account and warehouse cost center. Month-end close begins with revenue accounts already reconciled to Shopify orders, and the manual entry and reconciliation steps are eliminated.

What you can do

  • Post Shopify orders into JD Edwards general ledger within minutes of purchase, allocated to the correct revenue account and cost center.
  • Sync customer information from Shopify into JD Edwards Customer Master, keeping order records linked to the correct customer account.
  • Validate JD Edwards session tokens and re-authenticate automatically when tokens expire, preventing integration downtime.
  • Receive Shopify webhook notifications for orders, payments, fulfillments, and customers, with deduplication by webhook ID and signature validation.
  • Audit every order-to-journal mapping and replay failed records if a downstream JD Edwards call fails, with full traceability for month-end reconciliation.

Questions

Which direction does data move between JD Edwards and Shopify?
The main flow is from Shopify into JD Edwards. Orders, customers, and transaction totals move from Shopify into JD Edwards for GL posting, while revenue accounts and cost centers are configured once and do not flow between systems. JD Edwards order and customer records are not exported back to Shopify, and Shopify transaction data is read-only.
How does ml-connector handle JD Edwards session token expiry?
JD Edwards session tokens typically expire after 30 to 60 minutes. ml-connector tracks token status and obtains a fresh token before processing each batch of orders. If JD Edwards returns HTTP 444 (invalid token), ml-connector immediately re-authenticates using the stored username and password and retries the journal entry without requiring manual intervention.
What happens if a Shopify order webhook signature fails or Shopify rate limits a request?
ml-connector verifies every incoming webhook signature and returns 401 if validation fails, which tells Shopify to stop retrying and prevents false successes. For rate limits, ml-connector backs off and retries with exponential jitter, and every order is logged so failed records can be replayed once the rate window resets.

Related integrations

Connect Oracle JD Edwards and Shopify

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started