An anti-corruption layer translates; a wrapper renames

Wrapping a third-party client in a class of your own achieves nothing if the class exposes the same concepts under different names — the point is to translate their model into yours.

// a wrapper: their vocabulary, your namespace
$gateway->createCharge($tokenId, $amountInCents, $currencyCode);

// a translation: your vocabulary, their problem
interface Payments
{
    public function take(Money $amount, PaymentMethod $method): Receipt;
}

// Money, PaymentMethod and Receipt are yours. nothing about their
// tokens, webhooks or error codes escapes the layer.

The test is whether swapping the provider changes any type outside the layer; if their error codes appear in a controller, it leaked. This costs real effort and is worth it exactly where the external model is likely to change or is genuinely awkward. Applying it to every dependency produces a codebase of translation for its own sake, which is a different failure and just as expensive.