moip/moip-sdk-php
moip/moip-sdk-php is a PHP client library for the Moip payment gateway, simplifying integration of customers, orders, payments, and notifications into PHP applications. It provides an object-oriented wrapper around the Moip REST API and works with Laravel or any Composer-based project.
Architecture fit. Unchanged in substance. v3.1.0 does not add a service provider, publishable config, facade, or Laravel-native integration; it remains a thin OOP client over Moip's REST API. The new surface (getBalances(), transfer creation, getPasswordLink(), item category on addItem()) extends the domain model rather than changing the packaging model. The adapter-layer recommendation still holds: config file, service provider binding a configured singleton, gateway interface, DTOs, no SDK types leaking into controllers or models. If anything, the widened surface strengthens the case for the abstraction — there are now more resources a product team may want to reach, and each one should be exposed deliberately through the adapter rather than by injecting the SDK directly.
Integration feasibility. This is the material change. The previous assessment's central premise was that the repository was archived with a last release in January 2018. A tagged v3.1.0 with linked commits falsifies that premise: the project is receiving commits, merging fixes, and cutting releases. That shifts feasibility from "fork or abandon" to "consume with verification." The verification burden is not eliminated, merely relocated:
composer.json and dependency-resolution audit under the target Laravel version remains the gating step.Technical risk. Downgraded from high to moderate, with the composition changed. Abandonment risk is substantially reduced but not retired — the SDK now has recent activity, but there is no evidence yet of a support commitment, security policy, or long-term maintainer. Dependency-drift risk is likely improved by a 3.x line that presumably targets modern PHP and Guzzle, but this must be confirmed rather than assumed; a 3.x that still pins Guzzle 6 would leave the original conflict intact. API-lifecycle risk is reduced by the presence of newer resources. The residual risks are: dependency resolution against Laravel 9/10/11, the absence of upstream security disclosure process, and the possibility that activity is bursty rather than sustained. Treat the fork option as contingency rather than default.
Key questions.
Stack fit. Unchanged. Wrap, don't call directly. The new resources are an argument for discipline, not against the abstraction: balances and transfers are money-movement operations that should sit behind an audited service class with explicit authorization, logging, and possibly dual control, not be reachable from a controller.
Migration path. Reordered in light of the release:
The prior "fork and modernize the archived code" path is demoted; modernizing a 2018 codebase is no longer the expected work.
Compatibility. Audit composer.json for the 3.x line against the host application: PHP constraint, Guzzle major version, PSR interface versions. Read the 3.0.0 changelog for breaking changes before any upgrade from 2.x. Confirm the new methods (getBalances, transfer creation, getPasswordLink) behave against the sandbox and that their request/response shapes match current Moip documentation.
Sequencing.
composer.json constraints, changelog review, resolution test under the target Laravel version. Timebox to days.Maintenance. Materially improved but not free. The upstream now appears to accept fixes, which means we can consume patches instead of authoring them. That benefit is conditional on the activity being sustained and on our dependency-review process actually picking up new tags. Maintain a lightweight internal record of the pinned version, a quarterly check for new releases and CVEs, and a documented upgrade path. Retain the option to fork if upstream activity lapses; do not delete the contingency.
Support. Still no commercial support channel and no vendor relationship covering the SDK itself. Moip's API documentation and support remain the escalation path for platform issues; the SDK's issue tracker is now a plausible secondary channel, which it was not before. Internal documentation of the adapter, credential rotation, and transfer authorization remains essential.
Scaling. Unchanged. Synchronous HTTP client; scaling is a function of the host application, Moip rate limits, and checkout-path latency. Queue long-running payment calls where UX permits. Webhook ingestion stays decoupled via a queue. The new balance and transfer endpoints add outbound call volume to money-movement paths — apply the same retry, circuit-breaking, and idempotency treatment, and treat transfers as non-idempotent unless an ownId is supplied (the release adds ownId get/set on transfers, which is the correct mechanism for exactly this).
Failure modes.
ownId as an idempotency key, enforce authorization, and reconcile against balances.addItem() argument is optional in the release, but confirm it is not silently required by Moip for certain product types, which would break existing order creation on upgrade.Ramp-up. Moderate, unchanged for the core SDK. The new surface adds Brazilian money-movement domain knowledge — balance semantics, transfer settlement timing, and bank-account verification — on top of the existing CPF/CNPJ, boleto lifecycle, installment, and split-payment topics. Assign one senior engineer as owner for the adapter and the upstream-version relationship, and extend the internal knowledge-sharing session to cover transfers, ownId idempotency, and the transfer authorization rule.
How can I help you explore Laravel packages today?