Skip to content

Releases: own-pay/OwnPay

v0.2.0-beta

Choose a tag to compare

@fattain-naime fattain-naime released this 07 Jul 08:52
bdd2932

What's Changed

[0.2.0] — 2026-07-07

Added

  • Custom themes can now register their own rendering engine (in addition to the built-in template engine), and a brand-scoped Appearance page lets each brand pick its own theme independently.
  • Themes going through activation are now scanned for dangerous code patterns before being allowed to run, and unsafe themes are blocked with a clear warning instead of being silently activated.
  • Plugins can declare other plugins they depend on; activating one now checks that its dependencies are installed and active first, instead of failing later in a confusing way.
  • Checkout pages gained two new customization points: gateways can add their own markup next to their name in the gateway list, and merchants can inject extra form fields into checkout that are submitted along with the payment.
  • The admin panel gained a pluggable rendering-engine system and a stylesheet/script "enqueue" system so themes and admin pages can register their own assets cleanly instead of hard-coding tags into templates.
  • Required settings fields declared by a plugin are now validated on the server when saved, not just in the browser, closing a gap where a scripted request could bypass the "required" marking entirely.
  • API keys can now be temporarily locked (suspended) without fully revoking them, and the admin can see every key's status - active, locked, or revoked - in one list.
  • The Developer Hub page was reorganized: Endpoint Reference and Authentication were merged into the API Keys tab, and webhook-related settings were separated out for clarity.
  • The Domains page was redesigned with a card-based layout, a tabbed management panel per domain, and a guided 3-step wizard for adding new domains, replacing the old flat table and static instructions.
  • Manual (offline) payment methods gained a dedicated payment/account number field, and the customer-facing popup for manual payments was redesigned with the gateway logo, a QR code, and a one-tap copy-amount button.
  • Every schema change now ships with a matching upgrade file, so existing installations pick up new database columns automatically on update instead of needing a fresh install.
  • After a successful system update, old log files are now automatically cleaned up as part of routine housekeeping.

Changed

  • The setup wizard was rebuilt as a dedicated full-screen experience with a cleaner step tracker, resumable progress, and the option to skip optional steps.
  • Finishing or dismissing the setup wizard now always lands the admin on the All Brands view instead of a single brand.
  • Logging in now correctly lands superadmins (and any staff granted All-Brands access) on the global All Brands view, instead of always dropping them into a single brand's dashboard.
  • Gateway selection on the checkout page now behaves consistently across all payment method tabs, and gateway logos in the list are larger and easier to read.

Fixed

  • Manual gateway checkout popups no longer show a blank $0.00 amount and now correctly display the brand name in the footer.
  • Four payment gateway adapters no longer treat an unreachable webhook confirmation as a completed payment ("fail open"); they now correctly wait for a real confirmation.
  • Checkout no longer allows two rapid submissions of the same payment to both go through, and returning to a checkout page via the browser back button no longer leaves it in a broken state.
  • Fixed a bug where a gateway's resolved currency, amount, and fee could be wrong when processing a payment via a payment intent.
  • Invoices no longer show placeholder text in the generated PDF, no longer crash when an invoice has zero line items, and correctly record the paid date.
  • Payment links can now be edited from the All-Brands view, no longer return a server error on a duplicate link name, and now properly validate their input.
  • Fixed the setup wizard's copy-to-clipboard buttons (OTP and account number) failing silently in some browser contexts.
  • A theme's first-time activation no longer incorrectly reports "failed to activate" even though it actually succeeded.
  • Removing a domain, toggling a domain's manage panel, and the domain wizard's UI state all had bugs that are now fixed.
  • Fixed several PHPStan static-analysis errors representing genuine logic bugs, including an incorrect argument order in the application logger's setup and unreachable validation code.
  • Fixed an overly broad version-control ignore rule that was unintentionally also hiding a real source code folder.

Security

  • Payment gateway credentials (API keys, secrets, passwords) are now encrypted at rest instead of being stored in plaintext, and are no longer echoed back into the settings form.
  • Closed a gap in the webhook pipeline where gateway identity wasn't fully verified and a server-side request forgery (SSRF) vector was possible.
  • Invoice PDF downloads now sanitize the output filename to prevent path traversal.
  • The brand Appearance (theme) page now correctly requires the plugin view/manage permission instead of being open to anyone with admin access.

Full Changelog: https://github.com/own-pay/OwnPay/commits/v0.2.0

v0.1.1-alpha

v0.1.1-alpha Pre-release
Pre-release

Choose a tag to compare

@fattain-naime fattain-naime released this 03 Jul 20:10

What's Changed

Full Changelog: v0.1.0...v0.1.1

v0.1.0-beta

Choose a tag to compare

@fattain-naime fattain-naime released this 30 Jun 11:04
748a61b

OwnPay v0.1.0 - Initial Public Release 🚀

We are proud to announce the initial public release of OwnPay, a self-hosted, enterprise-grade, open-source payment gateway platform built on PHP 8.3+ and designed to put businesses in full control of their payment stack.

Unlike multi-tenant SaaS platforms, OwnPay is operated by a single owner, serving multiple isolated brands (stores) under their own custom domains. Each brand enjoys distinct gateways, custom ledger configurations, and a unique customer checkout identity.


🏛️ Major Highlights & Features

1. Multi-Brand Architecture & Custom Domains

  • Scoped Brand Context: Isolation at the database query layer via the TenantScope trait. A single super-administrator manages multiple brands (op_merchants) with zero cross-contamination.
  • White-Label Custom Domains: DomainMiddleware resolves custom domains for checkouts, automatically routing payments to the appropriate brand while keeping /admin/* interfaces restricted to the master domain.
  • Cascading Settings: Settings dynamically resolve from a brand-specific override, falling back to global system-wide defaults.

2. 123 Bundled Payment Gateways 💳

We include 123 built-in payment gateway integrations out of the box, categorized for global reach:

  • Southeast Asia: bKash API, Nagad Merchant API, SSLCommerz, Rocket, GCash, Maya, Touch 'n Go, GrabPay, PromptPay, QRIS, and more.
  • South Asia: Razorpay, Cashfree, Instamojo, PayTM, EasyPaisa, JazzCash.
  • Latin America: MercadoPago, Pix, PagSeguro, EBANX, dLocal.
  • Africa: M-Pesa, MTN MoMo, Flutterwave, Paystack, Orange Money.
  • Europe & Global: Stripe, PayPal Checkout, Adyen, Braintree, Klarna, Mollie, Authorize.Net, Square.
  • Cryptocurrency: Binance Pay, BitPay, BTCPay Server, Coinbase Commerce, OpenNode, NowPayments.
  • Plus a robust Manual (Offline) Gateway System allowing brands to display customized bank transfer instructions, manual payment details, and QR codes.

3. GAAP-Compliant Double-Entry Ledger Engine 📈

  • Double-Entry Accounting: Full bookkeeping journal (op_ledger_accounts, op_ledger_transactions, op_ledger_entries) that validates and maintains balance constraints at the database level.
  • Atomic Refunds & Multi-Currency Processing: Safe transaction posting secured by mutexes, enabling seamless conversions and ledger entries across different base currencies.

4. Companion Mobile App & SMS Verification Engine 📱

  • SMS-to-Payment Confirmation: Connects securely with the OwnPay Console Android app.
  • Automated Offline Matching: An SMS verification job parses incoming bank/MFS text messages, matching transaction IDs or amounts/timeframes to pending invoices for instant checkout confirmation.
  • Secure Device Auth: JWT-based API access for companion devices, featuring automatic key rotation and instant device revocation.

5. Guided Web Installer Wizard 🧙‍♂️

  • Step-by-Step Installation: Automatic check for directory permissions, database connectivity, table schema creation, default brand generation, and .env configuration.
  • Fail-Safe Design: Completely database-independent setup wizard ensuring a smooth first-time deployment.

6. Enterprise-Grade Security

  • Argon2id & TOTP 2FA: Industry-standard password hashing and built-in two-factor authentication.
  • Advanced Middleware Stack: Injects CSRF tokens, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and dynamic Content Security Policies (CSP) tailored only to the active payment gateways.
  • Parameterized SQL Queries: 100% protection against SQL injections.
  • Plugin Sandbox: Scans third-party plugin scripts on load to block dangerous PHP calls (eval, exec, system, etc.).

7. Developer APIs & Webhooks

  • API Integration: Full OpenAPI 3.1.1 specification (docs/v2/api/openapi.yaml) with public interactive API documentation.
  • Merchant & Inbound Webhooks: Webhook delivery retry queue to notify external platforms (like WHMCS, WooCommerce, or custom platforms) of payment states.

🚀 Getting Started

To install OwnPay on your server, ensure you meet the following requirements:

Prerequisites

  • PHP: 8.3 or higher with extensions (pdo_mysql, openssl, bcmath, mbstring, curl, gd, zip).
  • Database: MySQL 8.0+ or MariaDB 10.5+.
  • Web Server: Nginx or Apache with URL rewriting enabled.

Installation

Read the installation Guide: learn.ownpay.org/getting-started/installation

OwnPay v0.0.8-beta

OwnPay v0.0.8-beta Pre-release
Pre-release

Choose a tag to compare

@fattain-naime fattain-naime released this 13 Jun 17:06
c61eaa9

OwnPay v0.0.8 (Pre-Release)

⚠️ Restricted Distribution Notice

CRITICAL: This is a closed, pre-release build intended strictly for authorized testers. Source code access for this iteration is restricted. Do not redistribute the attached binaries, API configurations, or documentation outside the verified testing group.

This build contains core infrastructure updates and initial payment gateway integrations for early-stage validation.


🚀 What's New

  • Core Gateway Integration: Initial structural setup for processing transactions.
  • Closed Testing Environment: Hardcoded sandbox variables implemented for isolated verification.
  • Security Layer Alpha: Preliminary payload encryption protocols activated for testing API endpoints.

🐛 Known Limitations (Internal Testing Only)

  • No Public Access: Authentication tokens must be manually provisioned by the admin team.
  • Unstable Endpoints: Webhook callbacks may experience intermittent latency under simulated load.

📦 Deployment & Verification

Asset Type Target Audience Access Requirement
Compiled Binaries Selected Internal Testers Authorized Token
Source Code RESTRICTED Repository Maintainers Only

🛠️ Feedback Loop

Report all performance regressions, payload failures, or edge cases directly to the private internal tracking channel. Do not open public GitHub Issues for this build.