Screenshots
About this component
Global payment processing with 160+ payment methods across 130+ countries. Optimized for international commerce with competitive FX rates.
Versions
v1.5.0
2026-08-07
- Pluggability: declared webhooks.signature_header ('x-signature') so the platform resolves the webhook signature header from the manifest instead of a hardcoded map (Airwallex lists x-timestamp first, so headers[0] alone was insufficient).
v1.4.0
2026-08-02
- Subscriptions: added provider-agnostic reusable-payment-method setup. Declares the reusable_setup capability and implements begin_setup(), which creates the customer and a customer-scoped client secret so the storefront can save a card as a payment consent WITHOUT charging.
- create_payment_token now accepts a client-created payment_consent_id (from the initializeSetup createPaymentConsent flow) directly, instead of creating a second consent.
- Checkout handler: added an initializeSetup(bundle, container, onToken, onError) entry that mounts the Airwallex card element and createPaymentConsent, returning the reusable consent id for recurring billing.
v1.3.0
2026-08-01
- SECURITY: Webhook verification now fails CLOSED when no webhook secret is configured (previously returned True, letting attackers forge payment_intent events), requires timestamp+signature, and enforces timestamp freshness (5-minute window) to defuse replay. Applies to both the payment and subscription webhook verifiers.
- SECURITY: Refund idempotency uses a stable request_id from an explicit refund id (random only when none is given) instead of a fresh UUID per call, preventing a retry from creating a SECOND refund; capture and cancel use stable per-intent request_ids.
- SECURITY: Fixed an operator-precedence bug in charge()/authorize() where a metadata dict without 'order_id' produced request_id=None (breaking idempotency); order_id is now computed explicitly.
- SECURITY: Money amounts are quantized to the currency's minor units and sent as exact JSON numbers instead of float(), fixing binary rounding (zero/two/three-decimal currencies handled).
- SECURITY: Full payment-intent request/response bodies (customer PII and client_secret) are no longer logged; only non-sensitive identifiers and status are logged.
- REQUIRES_CAPTURE is mapped to the 'authorized' state (was 'processing') so the capture workflow is triggered; authorize() only reports authorized when Airwallex returns REQUIRES_CAPTURE.
- save_payment_method now requires a customer and creates a payment consent to actually link the method for recurring charges (was a no-op GET reported as success).
- Subscription: charge uses a stable idempotency key and maps in-progress statuses (PENDING/PROCESSING/REQUIRES_CUSTOMER_ACTION/REQUIRES_CAPTURE) to pending (not failed) to avoid double-charge retries; create_customer raises when the response omits an id instead of returning an empty customer id.
v1.2.1
2026-03-31
- Fixed empty payment_method_types list being treated as falsy — explicit 'in kwargs' check prevents fallback to legacy config when orchestration service passes an empty list
v1.2.0
2026-03-31
- Accept payment_method_types from orchestration service for per-country method filtering — provider hosted/embedded checkout now respects merchant-enabled methods
- Deprecated legacy self.config payment_method_types read (was broken — read from settings instead of credentials)
- Added **kwargs to create_payment_intent_for_checkout for forward-compatible parameter passing
v1.1.8
2026-03-10
- Added support for linking payment intents to Airwallex customers via airwallex_customer_id metadata field
- Enables recurring billing consent creation for post-payment subscription setup (e.g. license maintenance)
v1.1.7
2026-03-10
- Fixed webhook URL in setup instructions (was /payment-providers/webhook/{slug}/, corrected to /webhooks/payments/{slug}/)
v1.1.6
2026-03-01
- Fixed credential validation failing for dual-credential (test/production) setup - base class now validates unprefixed credentials after selection
- Fixed subscription webhook signature verification to include x-timestamp in HMAC computation (security fix)
- Fixed cardholder name not being sent to Airwallex API during payment confirmation
- Fixed credential redaction to handle both prefixed (test_api_key, live_api_key) and unprefixed key formats
- Removed stale environment field from credential_schema property
v1.1.5
2026-03-01
v1.1.2
2026-02-11
- Fixed test_connection() using /account endpoint that requires admin permissions — now uses /pa/config/payment_method_types which works with scoped API keys
- Added error logging to test_connection() failures
Ready to install Airwallex?
Install from your Spwig admin → Marketplace tab. Don't have a Spwig install yet? The commerce platform is free and open source.
Get Spwig → Browse more