- How do I install darkaonline/ripcord in a Laravel application?
- Install it with Composer using composer require darkaonline/ripcord. The package uses Laravel package auto-discovery, so the service provider and facade are registered without editing config/app.php on modern Laravel versions. On older Laravel releases you may need to add the provider and alias manually. After installing, you can optionally publish the config file and start making XML-RPC calls.
- Does darkaonline/ripcord require the PHP ext-xmlrpc extension?
- It should not, because the package wraps the Ripcord library, which carries its own pure-PHP XML-RPC client and server implementation rather than relying on PHP's bundled extension. That matters because ext-xmlrpc was removed from core in PHP 8.0 and is now PECL-only, so a pure-PHP path avoids a fragile build dependency. Verify this against the actual composer.json in your target version before treating it as an architectural assumption, and confirm the runtime PHP you deploy has no ext-xmlrpc requirement.
- Which Laravel and PHP versions does this package support?
- The package is a thin service-provider bridge, so its real constraints come from the Ripcord library and the Laravel illuminate/support version it declares in composer.json. Check that file for the tested PHP and Laravel matrix, particularly PHP 8.2 through 8.4 and Laravel 11 and 12. Because the package is maintained by a single author with a small user base, version support tends to lag rather than lead, so validate on your exact framework version before committing.
- How do I call an Odoo XML-RPC endpoint from Laravel with this package?
- You resolve the facade or injected client, point it at the endpoint URL, and call the remote method with your parameters, for example authenticating against Odoo's common endpoint and then calling execute_kw on the object endpoint. The package handles transport and serialization only, so you are responsible for building the payload structure and mapping the returned arrays into your domain objects. Wrap the calls in your own adapter class so the Odoo-specific method names and argument shapes do not leak across the codebase.
- Is darkaonline/ripcord a client, a server, or both?
- The package bridges Ripcord, which provides both an XML-RPC client and an XML-RPC server, so the wrapper can expose either side. In practice the vast majority of Laravel adopters use it purely as a client to talk to legacy ERP, Zimbra, or Magento-era endpoints. If you only need outbound calls, ignore the server component entirely and keep your attack surface small.
- How do I publish and customize the configuration file?
- Run php artisan vendor:publish and select the ripcord tag or provider to copy the package config into config/ripcord.php. That file is where you can register named client or server definitions instead of passing URLs inline at every call site. Keeping endpoint configuration in config rather than in code also makes it easier to swap environments and to restrict which hosts the application is allowed to reach.
- Is darkaonline/ripcord safe to use in production, particularly around XXE and SSRF?
- XML-RPC parsers are a classic XML external entity target, so confirm that entity loading is disabled on any inbound server-side parsing you enable. On the client side, a facade that accepts arbitrary endpoint URLs makes server-side request forgery easy to get wrong, so restrict endpoints to a configured allowlist rather than accepting user input. Also verify that TLS certificate verification, timeouts, and proxy settings are actually exposed by the wrapper or the underlying library rather than hardcoded. These are the two review items that should block a production rollout if unresolved.
- Does the package support async requests, retries, connection pooling, or circuit breaking?
- No. It is a synchronous transport adapter, so there is no async client, no connection pooling, and no built-in retry or circuit-breaker logic. You need to add timeouts, retry policies, and fault translation yourself, typically in a dedicated adapter class or via Laravel's queue system for anything long-running. Treat it as a narrow escape hatch rather than a general-purpose RPC layer alongside Guzzle.
- Can I replace phpxmlrpc or the removed ext-xmlrpc with this package?
- Expect an API rewrite rather than a drop-in swap, because method naming, struct encoding, and fault handling differ between implementations. The clean migration is to define a small interface such as ErpClient or CrmGateway in your domain, implement it once with Ripcord, and bind it in a service provider. That half-day of upfront work makes the package replaceable if it goes stale, which is the highest-value decision in a low-adoption dependency like this one.
- How should I test XML-RPC integrations built with darkaonline/ripcord?
- Test against your own adapter interface rather than the facade directly, so unit tests can substitute a fake gateway without any network access. For confidence in serialization and fault handling, keep at least one contract test against a real upstream such as an Odoo staging instance, since mocks will not catch schema drift or type coercion issues. XML-RPC has weak typing with no native null, so assert on how integers, datetimes, and base64 values round-trip through the library.