ml-connector
Oracle JD EdwardsStripe

Oracle JD Edwards and Stripe integration

Oracle JD Edwards EnterpriseOne runs your on-premises financials and order management. Stripe collects payments and manages subscriptions in the cloud. Connecting them keeps your accounts receivable system and your payment processor in sync. Customer records created in JD Edwards appear in Stripe, and invoices posted to the GL automatically become billable in Stripe without re-entry. ml-connector bridges the on-premises ERP to the cloud payments platform.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne exposes customers, invoices, invoice detail, items, and accounts through REST business document APIs via an Application Interface Services (AIS) Server running at your site. The cloud product authenticates with a session token issued per JD Edwards user credential and passed in the jde-AIS-Auth header on all requests to the customer-hosted AIS Server URL. Session tokens expire after 30 to 60 minutes and signal expiry with an HTTP 444 response, triggering automatic re-authentication. JD Edwards has no native outbound webhooks, so customer and invoice records are read by polling the relevant F-tables (F03012 for customer, F4101 for invoice headers and detail), filtering by the update date field UPMJ and tracking the last-polled timestamp. The AIS Server may be protected by IP allowlist, requiring the connector egress address to be whitelisted.

How Stripe works

Stripe exposes customers, invoices, invoice items, subscriptions, charges, payment intents, and balance transactions through its REST API at https://api.stripe.com/v1. Every call authenticates with an API key sent via HTTP Basic Auth (username=key, empty password) and requires no certificate or mutual TLS. Stripe API calls are stateless and all updates use POST not PUT, with one object modified per request. Stripe's webhook system can push payment and invoice events to a registered HTTPS endpoint, signed with an HMAC-SHA256 header, though the integration typically pulls invoice status on demand rather than waiting for a push. Stripe has no concept of vendors, purchase orders, GL accounts, or employees, so the integration maps only the subset of JD Edwards data that Stripe accepts: customer, invoice, and payment details.

What moves between them

The main flow runs from Oracle JD Edwards into Stripe. Customer records posted to the F03012 table flow into Stripe customers. Invoice headers from JD Edwards flow into Stripe invoices, with each line item becoming a Stripe invoice item. The sync runs on a schedule tied to your billing cycle, polling JD Edwards for new or updated customers and invoices since the last run. Stripe invoices are created in draft state so you can review before finalizing and sending to the customer. No data flows back from Stripe into JD Edwards; JD Edwards remains the system of record for order and invoice detail, while Stripe handles payment collection.

How ml-connector handles it

ml-connector stores the JD Edwards AIS Server URL and user credential encrypted and requests a session token on each poll run, automatically re-authenticating when the token expires (HTTP 444 response). It polls the F03012 and F4301/F4311 tables filtering on UPMJ (date updated), tracking the last-polled timestamp so each run fetches only new or changed records since the prior sync. The connector maps JD Edwards customer name, address, and ship-to information to Stripe customer fields, and JD Edwards invoice number, date, amount, and line items to Stripe invoice objects. Since Stripe allows only POST updates, changes to an existing invoice trigger a full re-sync of that invoice's items. IP allowlist is respected so connector egress addresses must be pre-whitelisted by the customer; if not, the connector will fail with a 403 error and surface that to the user. Every record carries a full audit trail and can be replayed if a downstream Stripe call fails. The Stripe API key is stored encrypted and rotated by the customer through the Stripe dashboard without connector downtime.

A real-world example

A mid-sized software services firm runs Oracle JD Edwards on-premises for order management, invoicing, and GL accounting, and uses Stripe to collect recurring subscription payments from customers. Before the integration, the billing team created invoices in JD Edwards for monthly service fees, exported them to a spreadsheet, and manually entered each one into Stripe to send to customers, creating duplicate data entry and a window for errors. With Oracle JD Edwards and Stripe connected, the team creates a customer and invoice once in JD Edwards, and the connector automatically pushes it to Stripe as a draft invoice ready to finalize and send. Month-end reconciliation is faster because the invoice numbers, dates, and amounts match across both systems.

What you can do

  • Sync Oracle JD Edwards customers (F03012) into Stripe customers on your billing schedule, including name, address, and contact information.
  • Push JD Edwards invoices (F4301/F4311) into Stripe draft invoices, line by line, so payment can be collected without re-entry.
  • Handle JD Edwards session token authentication with automatic re-auth when tokens expire, and respect customer IP allowlists.
  • Map JD Edwards customer and invoice tables to Stripe customer and invoice objects, skipping data Stripe does not accept (POs, GL accounts, vendors).
  • Maintain a full audit trail and retry failed Stripe posts if the API is temporarily unavailable or rate-limited.

Questions

Which direction does data move between Oracle JD Edwards and Stripe?
The main flow is Oracle JD Edwards into Stripe. Customer records and invoices flow from the on-premises ERP into the cloud payments platform so Stripe can collect payment. No data flows back from Stripe into JD Edwards; JD Edwards remains the system of record for order and invoice detail.
How does the integration handle JD Edwards session token expiry?
ml-connector detects an expired token when JD Edwards returns HTTP 444 on a request, immediately re-authenticates by posting the user credential to the AIS Server tokenrequest endpoint, and retries the failed request with the new token. Token refresh is automatic and does not interrupt the sync.
What happens if the JD Edwards AIS Server is protected by an IP allowlist?
The connector will fail with a 403 error if its egress IP address is not on the allowlist. The customer must pre-whitelist the connector egress address in the AIS Server configuration before the integration can poll data. Once whitelisted, polling proceeds without further intervention.

Related integrations

Connect Oracle JD Edwards and Stripe

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

Get started