Skip to content

ASD-1325 Validate region in Client constructor#56

Open
dimadidr wants to merge 1 commit into
amzn:masterfrom
dimadidr:feature/ASD-1325
Open

ASD-1325 Validate region in Client constructor#56
dimadidr wants to merge 1 commit into
amzn:masterfrom
dimadidr:feature/ASD-1325

Conversation

@dimadidr

@dimadidr dimadidr commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Validate region in Client constructor

Problem

Client::__construct() maps the region without validating it first (Amazon/Pay/API/Client.php:52, v2.7.0 and current master):

$config['region'] = $this->regionMappings[strtolower($config['region'])];

If config['region'] is null, missing, or not a known region, on PHP 8.1+ this emits:

  • Deprecated: strtolower(): Passing null to parameter # 1 ($string)
  • Warning: Undefined array key ""

and the client is still constructed - with a null region - so the real failure surfaces later, at the first API call. On setups where error handlers escalate deprecations/warnings to exceptions, the strtolower() deprecation masks the real configuration problem.

Minimal repro:

new Amazon\Pay\API\Client(['region' => null, 'sandbox' => true]);

Fix

Validate the region before mapping and throw a descriptive exception (consistent with the constructor's existing config validation):

Uncaught Exception: Expecting config['region'] to be one of: eu, de, uk, us, na, jp

Covers null, missing, and unmapped values (e.g. 'mars'). Valid regions are unaffected; case-insensitive mapping is preserved (US → na, de → eu).

Note this is a behavior change for misconfigured clients: construction now fails fast with a catchable \Exception instead of succeeding and failing at the first API call.

Context

Found while investigating amzn/amazon-payments-magento-2-plugin#1300 - in the Magento module, a store scope with no Amazon Pay region configured hits this on every adapter call.

Thanks @KathiD303 for the original report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant