Gateway Fee Exporter Documentation

    Developer Docs

    Documentation for WebMe Gateway Fee Exporter.

    Architecture

    webme-gateway-fee-exporter.php registers a simple autoloader and boots WebMe\GatewayFeeExporter\Plugin on plugins_loaded.

    includes/Plugin.php is the composition root:

    • aborts to admin notice when WooCommerce is missing
    • instantiates Stripe and PayPal resolvers
    • wires OrderQueryBuilder, ExportRowFactory, and CsvExporter
    • registers admin page and preset controller hooks

    Request flow

    Admin screen

    includes/Admin/ExportPage.php

    • registers submenu under WooCommerce
    • sanitizes $_GET filters
    • renders preview, aggregate totals, provider coverage, and missing-fee report

    Downloads

    Admin-post actions:

    • webme_gfe_download
    • webme_gfe_manifest

    Controls:

    • check_admin_referer() on both download actions
    • current_user_can( 'manage_woocommerce' ) in page render and exporter methods

    Presets

    includes/Admin/PresetController.php

    • webme_gfe_save_preset
    • webme_gfe_delete_preset

    Controls:

    • shared authorize() method
    • preset values sanitized before persistence into WEBME_GFE_PRESETS_OPTION

    Export schema

    ExportRowFactory::columns() returns v2 schema fields:

    • order identity and dates
    • payment method details
    • transaction ID and source
    • currency, gross, fee, net
    • fee/net source keys
    • gateway provider/plugin
    • resolver status and notes

    Resolver behavior

    Stripe resolver

    includes/Gateways/StripeFeeResolver.php

    • supports methods containing stripe, wcpay, or woocommerce_payments
    • resolves transaction ID from order transaction ID first, then fallback meta keys
    • returns missing_transaction_id, missing_fee, ambiguous, or resolved

    PayPal resolver

    includes/Gateways/PayPalFeeResolver.php

    • supports methods containing paypal or ppcp
    • follows same transaction-first, fee-meta-second pattern
    • identifies plugin family as paypal, paypal_payments, or paypal_checkout

    Notable implementation details

    • CSV-injection hardening prefixes risky text values with '.
    • Net amount is derived from gross minus fee when gateway net meta is absent.
    • Export download now writes CSV rows through SplTempFileObject in memory before flushing output.

    Extension points

    Likely lowest-risk future extension: add new resolver classes implementing FeeResolverInterface, then register them in Plugin::boot().