=== Swipe Again — Failed Payment Recovery ===
Contributors: swipeagain
Tags: woocommerce, subscriptions, dunning, failed payments, payment recovery
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Recover failed WooCommerce Subscriptions renewal payments with decline-aware smart retries that run inside your store, through your own gateway.

== Description ==

**Swipe Again recovers failed subscription payments for WooCommerce stores.**

When a renewal charge fails, most stores either give up or blast the same card again on a fixed schedule. Swipe Again runs a recovery system instead: decline-aware smart retries (timed to the reason the payment failed), plus branded email, SMS, and voice dunning that brings subscribers back to update their card — all measured so you can see exactly what was recovered.

= Retries run inside your store =

This plugin is the store-side half of Swipe Again. Failed renewals sync to your Swipe Again account; when a retry is due, the command comes back to this plugin and the charge executes locally through **your store's own payment gateway** — the same code path WooCommerce Subscriptions itself uses for renewals. That means every gateway works (Stripe, PayPal, WooPayments, Square, and the rest), and **card data never leaves your gateway** — Swipe Again never sees, stores, or transmits card numbers.

= What you get =

* **Decline-aware smart retries** — soft declines (insufficient funds, do-not-honor, temporary holds) are retried on timings matched to the decline; hard declines (stolen card, invalid number) are never retried.
* **Branded dunning** — email, SMS, and voice sequences in your brand voice bring subscribers to a card-update page.
* **90-day backfill on connect** — failed renewals from the last 90 days are pulled in automatically, so recovery starts on your backlog, not just tomorrow's failures.
* **One owner per card** — WooCommerce Subscriptions ships with its own retry system (off by default). If yours is on, Swipe Again stands down on any order WooCommerce is already retrying — or, with one click in this plugin's settings, hand retry ownership to Swipe Again and the native system turns off. No double charges, ever.
* **Live recovery accounting** — your recovered totals, right in WooCommerce → Swipe Again, straight from your Swipe Again account.
* **The Swipe Again guarantee** — 14-day free trial. Guarantee: if recovered revenue in your first 30 days is under $179, your next month is free. Measured on total recovered revenue while the service is active; terms on our website.

= How it works =

1. Install and activate this plugin.
2. Open WooCommerce → Swipe Again and click **Connect to Swipe Again** — you get a short pairing code.
3. Type the code in your Swipe Again account (Connect → WooCommerce). The plugin receives its secure key automatically — nothing to copy, no API keys to manage.
4. Choose who owns retries in Settings. Done.

= Requirements =

* WordPress 6.2+, PHP 7.4+, WooCommerce 8.0+
* WooCommerce Subscriptions (for subscription renewals)
* A Swipe Again account — $179/month flat after a 14-day free trial, no revenue share, no per-recovery fees

= Privacy & the service =

This plugin connects your store to the Swipe Again service (app.swipeagain.com) — that connection is the product. It syncs: failed renewal order data (order id, amount, currency, gateway decline information, customer email/phone for dunning), subscription status changes, and recovery outcomes. It never syncs card numbers or full payment credentials. Syncing stops the moment you disconnect or uninstall. See the Swipe Again privacy policy at https://swipeagain.com/pages/privacy-policy and terms at https://swipeagain.com/pages/terms-of-service.

The plugin is fully functional regardless of plan state: connecting, syncing, reporting, and executing retries are plugin functions and are never switched off by this plugin. Service levels (dunning sends, scheduling) follow your Swipe Again account's plan.

== Installation ==

1. Upload the plugin files to `/wp-content/plugins/swipe-again/`, or install through the WordPress plugins screen.
2. Activate the plugin through the 'Plugins' screen.
3. Open WooCommerce → Swipe Again and click **Connect to Swipe Again**.
4. Enter the pairing code in your Swipe Again account under Connect → WooCommerce.
5. In Settings, choose who owns retries (recommended: let Swipe Again manage retries).

== Frequently Asked Questions ==

= Which payment gateways does this work with? =

All of them. Retries execute inside your store through WooCommerce Subscriptions' own scheduled-payment path, so whatever gateway your subscriptions use — Stripe, PayPal, WooPayments, Square, or any other WooCommerce Subscriptions-compatible gateway — is the gateway that runs the retry. This is the key difference from hosted retry services, which can only re-charge cards they tokenized themselves.

= Will this double-charge my customers? =

No. Two protections: if WooCommerce Subscriptions' own retry system has a retry pending for an order, Swipe Again stands down and does not touch that order; and every retry command executes at most once — repeat deliveries replay the recorded outcome instead of charging again. If you hand retry ownership to Swipe Again in Settings, the native retry system is off entirely, so one schedule owns every card.

= What happens if I disconnect or my plan lapses? =

Everything in your store keeps working exactly as before. Syncing and Swipe Again-initiated retries stop; WooCommerce and WooCommerce Subscriptions are untouched. The plugin never disables itself or your store's functions based on plan state.

= Does Swipe Again see my customers' card numbers? =

No. Charges run through your gateway inside your store. Swipe Again receives order and decline information and customer contact details for dunning — never card numbers, CVCs, or full payment credentials.

= How much does it cost? =

$179/month flat after a 14-day free trial. No revenue share, no per-recovery percentage, no per-seat pricing. 14-day free trial. Guarantee: if recovered revenue in your first 30 days is under $179, your next month is free. Measured on total recovered revenue while the service is active; terms on our website.

== Screenshots ==

1. The Swipe Again status screen in WooCommerce — recovered totals, plan state, and who owns retries, from your live account.
2. Connecting is a short pairing code — no API keys to copy.
3. Choose who owns retries: let Swipe Again manage them, or detect-only with automatic stand-down.

== Changelog ==

= 1.0.2 =
* Fix: plugin-check warnings cleanup, no behavior change.

= 1.0.0 =
* Initial release: pairing-code connection, failed-renewal sync for all gateways, in-store retry execution, 90-day backfill, native-retry coordination with stand-down, WP-Admin status and settings screens.

== Upgrade Notice ==

= 1.0.2 =
Plugin-check cleanup release, no behavior change.

= 1.0.0 =
Initial release.
