Paypal - Paypal implementation for Elixir

Hi everyone! :waving_hand:

I’m happy to announce the release of paypal v0.2.0 on Hex.pm
paypal | Hex !

This release brings a long-awaited feature requested by the community,
along with significant modernization, improved security, and a revamped
HTTP stack.
──────

:sparkles: Highlights in v0.2.0

1. Full PayPal Subscriptions & Billing Plans API

As requested, we now have first-class support for PayPal’s recurring
billing and subscriptions ecosystem:

β€’ Catalog Products (Paypal.Subscription.Product): Create, show, list, and
update digital, physical, or service products.
β€’ Billing Plans (Paypal.Subscription.Plan): Define recurring billing cycles,
setup fees, trial periods, and pricing schemes.
β€’ Subscriptions Lifecycle (Paypal.Subscription): Create subscriptions,
retrieve details, update, revise plans/quantities, suspend, reactivate,
cancel, capture outstanding balances, and list transaction histories.

# 1. Create a Product
{:ok, product} = Paypal.Subscription.Product.create(%{
  name: "Video Streaming Pro",
  type: :service,
  description: "Monthly subscription for video streaming",
  category: "SOFTWARE"
})

# 2. Create a Billing Plan
{:ok, plan} = Paypal.Subscription.Plan.create(%{
  product_id: product.id,
  name: "Monthly Pro Plan",
  description: "Standard monthly billing plan",
  status: :active,
  billing_cycles: [
    %{
      frequency: %{"interval_unit" => "MONTH", "interval_count" => 1},
      tenure_type: :regular,
      sequence: 1,
      total_cycles: 0,
      pricing_scheme: %{
        "fixed_price" => %{"currency_code" => "USD", "value" => "15.00"}
      }
    }
  ],
  payment_preferences: %{
    auto_bill_outstanding: true,
    setup_fee_failure_action: :cancel,
    payment_failure_threshold: 3
  }
})

# 3. Create a Subscription
{:ok, subscription} = Paypal.Subscription.create(%{
  plan_id: plan.id,
  subscriber: %{
    name: %{given_name: "Jane", surname: "Doe"},
    email_address: "jane.doe@example.com"
  },
  application_context: %{
    brand_name: "My SaaS",
    locale: "en-US",
    return_url: "https://example.com/subscription/return",
    cancel_url: "https://example.com/subscription/cancel"
  }
})

──────

2. Migration to Req & Security Improvements

β€’ Switched from Tesla to Req https://github.com/wojtekmach/req: Streamlined
HTTP client configuration, cleaner error handling, and robust Finch pooling
out-of-the-box.
β€’ Dependencies & Security: All dependencies have been audited and updated
(mix_audit clean with 0 vulnerabilities).
──────

3. Modern Elixir & Quality Standards

β€’ Elixir & OTP support: Minimum requirements updated to Elixir ~> 1.17 and
OTP 27+.
β€’ Code Quality & Type Safety:
β€’ 100% clean mix check pipeline (compiler with --warnings-as-errors,
Credo, and strict Dialyzer type specs).
β€’ 100% documentation coverage verified with Doctor.
β€’ Test coverage exceeding 95% with full unit and Bypass integration
suites.
β€’ License: Clarified under the standard MIT License.
──────

:package: Links & Documentation

β€’ Hex.pm: paypal | Hex
β€’ HexDocs: Paypal v0.2.0 β€” Documentation
β€’ GitHub: GitHub - altenwald/paypal: Paypal implementation for Elixir Β· GitHub

Feedback, issues, and contributions are very welcome!

3 Likes