Payment Gateways — Overview
Status
Sandbox exploration in progress. The checkout layer is not yet chosen. All
PayPal work is Sandbox only — no live credentials, no production code, no
committed secrets.
| Milestone | State |
|---|
| Sandbox app + credentials | Registered (opshell, 2026-09-13) |
| Capability probe | Run — 5/6 checks pass (matrix) |
| Webhook receiver | Deployed locally, tunnel route pending |
| Invoice Ninja PayPal REST | Configured in Sandbox; OAuth verification passed |
| Checkout layer | Not chosen |
Requirements
| Requirement | Value |
|---|
| Merchant | PayPal Business — support@rezriz.com |
| Currency | USD (PayPal allows only one currency per subscription plan) |
| Market | Indonesia — cross-border receiving rules apply |
| Environments | Sandbox first, then a separate live-capability check |
| Revenue shapes | Memberships (recurring), digital packs (one-time), services (invoices) |
Gateway options under evaluation
| Approach | Memberships | Digital packs | Service invoices | Notes |
|---|
| PayPal API directly | Yes | Yes | Yes | Most control, most work (auth, webhooks, idempotency) |
| SureCart + SureMembers | Yes (auto access) | Yes | Yes | Free, native PayPal, deep SureMembers integration |
| WooCommerce + PayPal Payments | With WC Subscriptions | Yes | Yes | Robust but heavier; WC Subscriptions is paid |
| Payment Links / Invoices | No auto-gating | Yes | Yes | No-code, fastest, manual access management |
The decision is deferred until the PayPal feature matrix is
tested in Sandbox. See PayPal Developer API Features.
Proposed data flow
Decision log
| Date | Decision | Status |
|---|
| 2026-09-13 | Sandbox-first exploration, USD, gateway deferred | Active |
| 2026-09-13 | Registered Sandbox app opshell; credentials in ~/.ssh/paypal/.env | Done |
| 2026-09-13 | Capability probe: orders, products, plans pass; invoicing NOT_AUTHORIZED | Done |
| 2026-09-13 | Deployed self-hosted webhook receiver (paypal-webhook) | Done |
| — | Add tunnel public hostname paypal-webhook.id86.net | Pending |
| — | Choose checkout layer after Sandbox testing | Pending |
| — | Verify live receiving capability (Indonesia) | Pending |