ml-connector
SAP ECCZuora

SAP ECC and Zuora integration

SAP ECC manages your enterprise financial records, purchase orders, and vendor master. Zuora handles subscription billing, invoicing, and payment processing. Connecting the two keeps billing records consistent across platforms. Vendor master changes in SAP ECC propagate to Zuora Accounts, new invoices in Zuora are logged back to SAP ECC's general ledger, and payment notifications from Zuora reconcile against open items in ECC without manual intervention.

How SAP ECC works

SAP ECC exposes vendors, customers, purchase orders, invoices, GL accounts, cost centers, and materials through RFC/BAPI function modules or OData v2 via SAP Gateway. It is an on-premises system requiring an RFC agent (SAP .NET Connector or Java Connector) on the customer network to make calls; cloud-direct access is not possible. Authentication uses HTTP Basic Auth for OData and SOAP, or RFC Basic Auth for BAPI calls. SAP ECC has no webhook registry, so data is retrieved by polling RFC_READ_TABLE on a schedule or by accepting inbound IDoc messages if the customer configures HTTP delivery via SAP WE21/WE20.

How Zuora works

Zuora is a cloud REST API accessed through HTTPS with OAuth 2.0 Client Credentials authentication. Token endpoints and base URLs are region-specific (rest.zuora.com, rest.eu.zuora.com, rest.ap.zuora.com, etc.), and each customer tenant has a unique subdomain. Zuora exposes Accounts, Subscriptions, Invoices, Payments, and Products. It supports Callout Notifications (webhooks) with HMAC-SHA256 signatures for events including Invoice Posted, Payment Processed, Subscription Renewed, and Account Updated. Webhook payload is minimal, requiring a callback to fetch full record details.

What moves between them

Vendors and certain customer master records from SAP ECC RFC calls are mapped to Zuora Account objects and pushed via REST. Zuora Invoice Posted webhooks trigger a read of the full invoice record and post a corresponding GL document to SAP ECC's BAPI_ACC_DOCUMENT_POST if reconciliation mapping is configured. Payment Processed events from Zuora electronic payments are logged to SAP ECC's audit trail. The flow is bidirectional: ECC vendor changes drive Account updates in Zuora, and Zuora payment and billing events inform ECC reconciliation without manual journal entry.

How ml-connector handles it

ml-connector runs an on-premises RFC agent (provided by customer) on the same network as SAP ECC. It calls RFC_READ_TABLE to poll vendors, customers, and GL accounts at a configured interval, then authenticates to Zuora's region-specific OAuth 2.0 token endpoint with stored credentials and pushes Account records. Zuora webhooks POST to ml-connector's HTTPS endpoint with HMAC-SHA256 signatures that are verified before processing. When an Invoice Posted webhook arrives, ml-connector fetches the full invoice from Zuora, maps it to SAP ECC GL accounts and cost centers, calls BAPI_ACC_DOCUMENT_POST to record the transaction, and commits via BAPI_TRANSACTION_COMMIT. Because SAP ECC's OData services must be manually activated by the customer's SAP Basis team (TCODE SICF), and RFC_READ_TABLE has a 512-character row width limit, wide tables may require BBP_RFC_READ_TABLE. ml-connector tracks Zuora token expiry and refreshes before 401 errors, handles RFC communication failures with exponential backoff, and maintains a full audit log of every RFC call, Zuora API call, and webhook event. Idempotency is maintained via SAP ECC's REF_DOC_NO field on journal entries to detect duplicate posts on retry.

A real-world example

A mid-market SaaS company runs SAP ECC on-premises for accounting and procurement, with Zuora in the cloud for subscription billing and revenue recognition. Before integration, the finance team exported invoice registers from Zuora weekly, manually created GL entries in SAP ECC to record subscription revenue, and re-keyed vendor master updates from ECC into Zuora Accounts. With the integration in place, each time Zuora posts a new invoice, it automatically flows into SAP ECC's general ledger allocated to the correct revenue account, and vendor master changes from ECC sync to Zuora without re-entry. The accounting team no longer spends hours on manual reconciliation, and the systems stay in agreement throughout the month.

What you can do

  • Poll vendor and customer master data from SAP ECC and sync to Zuora Accounts via RFC and OData gateways.
  • Receive Invoice Posted and Payment Processed events from Zuora webhooks and post matching GL documents to SAP ECC's general ledger.
  • Authenticate SAP ECC via RFC Basic Auth through an on-premises agent, and Zuora via OAuth 2.0 with region-specific endpoints.
  • Handle RFC connection failures and Zuora rate limits with exponential backoff and retry, tracking each attempt in the audit log.
  • Map GL accounts and cost centers across platforms and maintain idempotency via SAP ECC reference document numbers and Zuora webhook IDs.

Questions

How does ml-connector call SAP ECC if it is on-premises?
ml-connector uses an RFC agent (SAP .NET Connector or Java Connector) that runs on the customer's network alongside SAP ECC. The agent is provided by the customer and must be licensed from SAP. ml-connector sends RFC calls to the agent, which translates them to BAPI function modules or RFC_READ_TABLE calls inside SAP ECC. No direct cloud-to-ECC connection is possible.
What happens if Zuora or SAP ECC rate limits are hit?
Zuora enforces per-minute rate limits (50,000 RPM production, 40 concurrent requests default). SAP ECC has no published limit but typical safe throughput is 10-50 concurrent RFC calls. ml-connector detects rate limit responses (Zuora's 429, RFC SYSTEM_FAILURE), waits with exponential backoff and jitter, then retries. Every attempt is logged in the audit trail.
Can the integration run in both directions simultaneously?
Yes. SAP ECC vendor and customer changes push to Zuora Accounts continuously on a polling schedule. At the same time, Zuora webhooks post Invoice and Payment events back to SAP ECC's general ledger. The two flows are independent and run on separate schedules, so both directions work without blocking each other.

Related integrations

Connect SAP ECC and Zuora

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

Get started