From bb45415fd205431a73cbb9166584bbc6409d83d4 Mon Sep 17 00:00:00 2001 From: lepresk Date: Wed, 22 Apr 2026 20:42:32 +0100 Subject: [PATCH] fix: useClient() bypasses base_uri, getPayee() returns wrong data, getBaseUrl() silent fallback - useClient() followed by collection()/disbursement()/create() skipped the base_uri setup entirely; now applies withOptions() on the existing client - Transaction::getPayee() delegated to getPayer(); model now stores payer and payee separately so each getter reads the correct field - getBaseUrl() silently routed unknown environments to production; now throws InvalidArgumentException for unrecognized values --- src/Models/Transaction.php | 9 ++++++--- src/MomoApi.php | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/Models/Transaction.php b/src/Models/Transaction.php index 9471401..fa2d61f 100644 --- a/src/Models/Transaction.php +++ b/src/Models/Transaction.php @@ -14,6 +14,7 @@ class Transaction private ?string $amount; private string $currency; private array $payer = []; + private array $payee = []; private ?string $payerMessage; private ?string $payeeNote; private string $status; @@ -31,13 +32,14 @@ class Transaction * @param string $status * @param ErrorReason|null $reason */ - public function __construct(?string $financialTransactionId, ?string $externalId, ?string $amount, string $currency, array $payer, ?string $payerMessage, ?string $payeeNote, string $status, ?ErrorReason $reason) + public function __construct(?string $financialTransactionId, ?string $externalId, ?string $amount, string $currency, array $payer, array $payee, ?string $payerMessage, ?string $payeeNote, string $status, ?ErrorReason $reason) { $this->financialTransactionId = $financialTransactionId; $this->externalId = $externalId; $this->amount = $amount; $this->currency = $currency; $this->payer = $payer; + $this->payee = $payee; $this->payerMessage = $payerMessage; $this->payeeNote = $payeeNote; $this->status = $status; @@ -63,7 +65,8 @@ public static function parse(array $array): Transaction $array['externalId'], $array['amount'], $array['currency'], - $array['payer'] ?? $array['payee'] ?? [], + $array['payer'] ?? [], + $array['payee'] ?? [], $array['payerMessage'], $array['payeeNote'], $array['status'], @@ -158,7 +161,7 @@ public function getPayer(): ?string */ public function getPayee(): ?string { - return $this->getPayer(); + return $this->payee['partyId'] ?? null; } /** diff --git a/src/MomoApi.php b/src/MomoApi.php index e80f805..3797558 100644 --- a/src/MomoApi.php +++ b/src/MomoApi.php @@ -68,6 +68,8 @@ public static function create(string $environment): MomoApi self::$client = HttpClient::create([ 'base_uri' => self::getBaseUrl($environment), ]); + } else { + self::$client = self::$client->withOptions(['base_uri' => self::getBaseUrl($environment)]); } return new self($environment); } @@ -90,6 +92,8 @@ public static function collection(array $config): CollectionApi self::$client = HttpClient::create([ 'base_uri' => self::getBaseUrl($environment), ]); + } else { + self::$client = self::$client->withOptions(['base_uri' => self::getBaseUrl($environment)]); } $configObject = Config::collection($subscriptionKey, $apiUser, $apiKey, $callbackUrl); @@ -114,6 +118,8 @@ public static function disbursement(array $config): DisbursementApi self::$client = HttpClient::create([ 'base_uri' => self::getBaseUrl($environment), ]); + } else { + self::$client = self::$client->withOptions(['base_uri' => self::getBaseUrl($environment)]); } $configObject = Config::disbursement($subscriptionKey, $apiUser, $apiKey, $callbackUrl); @@ -122,9 +128,20 @@ public static function disbursement(array $config): DisbursementApi public static function getBaseUrl($environment): string { - if ($environment === MomoApi::ENVIRONMENT_SANDBOX) { + if ($environment === self::ENVIRONMENT_SANDBOX) { return self::SANDBOX_URL; } + $known = [ + self::ENVIRONMENT_MTN_CONGO, self::ENVIRONMENT_MTN_UGANDA, + self::ENVIRONMENT_MTN_GHANA, self::ENVIRONMENT_IVORY_COAST, + self::ENVIRONMENT_ZAMBIA, self::ENVIRONMENT_CAMEROON, + self::ENVIRONMENT_BENIN, self::ENVIRONMENT_SWAZILAND, + self::ENVIRONMENT_GUINEACONAKRY, self::ENVIRONMENT_SOUTHAFRICA, + self::ENVIRONMENT_LIBERIA, + ]; + if (!in_array($environment, $known, true)) { + throw new \InvalidArgumentException("Unknown environment: '$environment'"); + } return self::PRODUCTION_URL; }