PayPal setup
PayPal is the third natively-supported gateway. Like Stripe, it's not bundled — install the official WooCommerce PayPal Payments plugin and let Advanced Subscriptions add the recurring bridge on top.
Prerequisites
- A PayPal Business account in the country / currency where you bill.
- The free WooCommerce PayPal Payments plugin, version 2.0 or newer.
- Reference Transactions enabled on your PayPal account. New accounts may need to request it from PayPal support; it's the API that lets us charge a stored authorisation off-session.
Connect PayPal
- In WooCommerce → Settings → Payments → PayPal, click Connect. PayPal's OAuth flow opens; sign in with your Business account.
- After authorising, the plugin pulls your live credentials (or sandbox if you toggle the sandbox option).
- Verify Reference Transactions shows as enabled in the settings. If it doesn't, contact PayPal support; the rest of the flow won't work without it.
- Save and place a test order via PayPal sandbox.
How recurring works with PayPal
The bridge uses PayPal's Reference Transactions (RTs):
- At checkout, the customer logs into PayPal and authorises a "billing agreement" — that's an open-ended consent to charge.
- PayPal returns a billing-agreement ID. Our plugin stores it against the subscription.
- On every renewal, the plugin calls PayPal's API to create a reference transaction against that agreement. No customer interaction needed.
- If the customer revokes the billing agreement from their PayPal account, the next renewal fails. We catch the failure and trigger the standard retry flow.
Webhooks
WC PayPal Payments registers its webhook URL during the OAuth connect. We listen to PAYMENT.SALE.COMPLETED, PAYMENT.SALE.DENIED, BILLING.SUBSCRIPTION.CANCELLED (for revocations) and PAYMENT.SALE.REFUNDED. Disputes raised by the customer in their PayPal account show up in WooCommerce → Orders as a "Disputed" status flag.
Relevant hooks
aswc_paypal_reference_txn_args— filter the reference-transaction parameters.aswc_paypal_webhook_handled— fires after we process a PayPal webhook.