Revision history for WWW-PayPal
0.003 2026-09-19 17:28:23Z
- WWW::PayPal::API::Webhooks (Notifications v1): new controller for
webhook endpoint management and signature verification. verify()
calls POST /v1/notifications/verify-webhook-signature and returns a
real boolean (1 on SUCCESS, 0 on anything else including FAILURE —
never truthy on the raw status string); croaks only on missing
arguments or a transport/API error. create() registers an endpoint
(event_types accepts bare event-name strings or {name=>...}
hashrefs, mixed freely); list()/get()/delete() round out CRUD. New
$pp->webhooks client attribute.
- WWW::PayPal::Webhook entity: id, url, event_names.
- WWW::PayPal::WebhookEvents: curated :all-exportable constants for
the event-type strings the library's two flows need (order/capture,
subscription lifecycle, dispute), including both
PAYMENT_CAPTURE_DECLINED (Payments v2, what Orders v2 captures
emit) and PAYMENT_CAPTURE_DENIED (Payments v1) as distinct events.
0.002 2026-04-17 02:45:51Z
- WWW::PayPal::API::Orders: new checkout() convenience method — the
modern Express Checkout one-liner. Builds purchase_units +
application_context from flat args (amount, currency, return_url,
cancel_url, + optional brand_name, locale, items[], shipping,
invoice_id, custom_id, soft_descriptor, description, reference_id,
shipping_preference, user_action). Auto-fills amount.breakdown.item_total
when items are present.
- WWW::PayPal: new js_sdk_url() and js_sdk_script_tag() helpers for
dropping the PayPal JS SDK into a Catalyst/Mojolicious/etc. template.
Supports currency, intent, locale, components, disable_funding /
enable_funding, vault (for subscription buttons), merchant_id,
buyer_country (sandbox), debug. HTML output is properly escaped.
0.001 2026-04-15 19:41:41Z
- Initial release
- WWW::PayPal client with OAuth2 client_credentials token caching
and sandbox/live switch
- WWW::PayPal::Role::HTTP: JSON request wrapper with transparent
bearer-token acquisition and refresh
- WWW::PayPal::Role::OpenAPI: operationId dispatch against cached
operation tables (pre-computed; no runtime spec parsing)
- WWW::PayPal::API::Orders (Checkout / Orders v2):
orders.create, orders.get, orders.patch, orders.confirm,
orders.authorize, orders.capture
- WWW::PayPal::API::Payments (Payments v2):
captures.get, captures.refund, refunds.get,
authorizations.get, authorizations.capture, authorizations.void
- WWW::PayPal::Order entity with approve_url, payer_email,
payer_name, payer_id, capture_id, fee_in_cent, total, currency
(covers the amigaevent / ExpressCheckout replacement surface)
- WWW::PayPal::Capture and WWW::PayPal::Refund entities
- WWW::PayPal::API::Products (Catalogs v1):
catalogs.products.create, .list, .get, .patch
- WWW::PayPal::API::Plans (Billing Plans v1):
billing.plans.create, .list, .get, .patch, .activate, .deactivate
plus create_monthly(product_id, price, currency, trial_days)
convenience constructor
- WWW::PayPal::API::Subscriptions (Billing Subscriptions v1):
billing.subscriptions.create, .get, .patch, .revise, .suspend,
.activate, .cancel, .capture, .transactions
- WWW::PayPal::Product, WWW::PayPal::Plan, WWW::PayPal::Subscription
entities (subscription exposes approve_url, status, subscriber_email/
_name, next_billing_time, last_payment_amount, plus suspend/activate/
cancel lifecycle methods)
- examples/buy_demo.pl: end-to-end Orders v2 Mojolicious::Lite demo
- examples/subscribe_demo.pl: end-to-end Subscriptions demo (auto-creates
product + monthly plan on first run, prints IDs for reuse)