PRE-3646: fixing Multicurrency HF and removing SEIF field - #319
Conversation
There was a problem hiding this comment.
Claude Code Review
Claude Code Review is paused for this repository. To reconnect it, an admin of this repository's GitHub organization (or the account owner, for personal repositories) who can also manage your Claude organization's Code Review settings needs to re-link GitHub in Code Review settings. This is a one-time step.
Tip: disable this comment in your organization's Code Review settings.
53f80d9 to
0a362bd
Compare
0a362bd to
8511b26
Compare
ReviewRésumé : 0 critique, 1 majeur (documentation/process, pas de code), 2 mineurs, 1 nit — le code en lui-même est solide et bien testé ; le principal point d'action est de vérifier si le bandeau "bloquant" de la description est toujours d'actualité. Findings[HIGH] Le bandeau " La description indique que cette PR ne peut pas être mergée tant que
Comme la contrainte → À confirmer : la CI est-elle bien verte maintenant ? Si oui, mettre à jour/retirer le bandeau bloquant plutôt que de laisser un texte obsolète qui pourrait faire bloquer la PR inutilement. [LOW] Changement - securitychecker_symfony: ~
+ securitychecker_composeraudit:
+ abandoned: reportAucun rapport avec la fonctionnalité devise/remboursement, et non mentionné dans la description. Pas un bug, mais soit à scinder dans un commit/PR séparé, soit à expliquer (ex : [LOW] public function down(Schema $schema): void
{
// Deliberately not reversible: ...
}Raisonnement solide (valeur type credential, plus lue nulle part), mais la migration n'est de fait pas réversible. Acceptable si c'est une décision d'équipe assumée. [NIT] Gestion incohérente de la casse de la devise entre les deux constructeurs de payload $common = new CommonFieldsDto($accountId, $amount, \strtoupper($currencyCode), $orderId);alors que le nouveau chemin de remboursement transmet Points positifs
|
ab33740 to
8b0eabf
Compare
There was a problem hiding this comment.
Claude Code Review
Claude Code Review is paused for this repository. To reconnect it, an admin of this repository's GitHub organization (or the account owner, for personal repositories) who can also manage your Claude organization's Code Review settings needs to re-link GitHub in Code Review settings. This is a one-time step.
Tip: disable this comment in your organization's Code Review settings.
Description
Trois changements liés, tous issus du passage d'UHF en multidevise.
1 — Retrait du champ « Identifiant SubMerchant » du BO. Le formulaire exposait
hfSubMerchantId(
PasswordType), obligatoire dès que le modehosted_fieldsétait sélectionné, et sa valeur partaitdans chaque payload UPC. Or ce champ relève de la configuration UDV / MID pour les paiements en
EUR, pas d'UHF. UHF n'est ouvert qu'aux marchands autorisés par PayPlug, l'activation demandant une
configuration conséquente côté cockpit et admin : un marchand qui veut encaisser en EUR n'est pas
orienté vers UHF mais vers Integrated Payment. UHF adresse les autres devises, dont les
configurations MID ne possèdent aucun submerchant — l'envoyer provoque un
400 "Invalid parameter."au remboursement.
2 — Transmission de la devise au remboursement.
Payment::getCurrencyCode()est désormaisacheminé jusqu'au payload UPC via
RefundPaymentProcessor→RefundCreatorInterface→UnifiedApiRefundCreator. L'endpoint ne transportait aucune devise : le montant partait « nu » et laplateforme devait en déduire l'unité monétaire — sans ambiguïté tant que tout est en EUR, faux dès
qu'on est multidevise.
3 — Filtre de devise de
SupportedMethodsProvidervolontairement désactivé. Il s'appuyait suraccount.configuration.min_amountsde l'API Retail, démontrablement faux pour un compte UHF : lecompte
1461487annoncecurrencies: ['EUR']alors qu'un paiement USD a abouti sur ce même compte(
schemeTransactionId 6a9ad8eb905d3). Laissé en place, il masque au checkout un moyen de paiementqui fonctionne.
Motivation: permettre à UHF d'encaisser dans une devise autre que l'EUR, de bout en bout
(paiement et remboursement).
Related issue(s): PRE-3646
Type of Change
Checklist
Code Quality
Testing
Security & Ops
Notes for Reviewer
Bloc commenté assumé.
SupportedMethodsProvidercontient un blocifvolontairement mis encommentaire — c'est le seul du PR et il est délibéré, pas un oubli. Le commentaire qui l'accompagne
documente la décision, la preuve (compte
1461487vsschemeTransactionId 6a9ad8eb905d3) et lesdeux correctifs préalables à sa réactivation :
CurrencyContextInterface) alors que$paymentAmountest libellé dans la devise de base du canal. Sur un canal EUR consulté en USD,elle rejetait donc un paiement qui aurait été encaissé en EUR.
Sujet en cours avec les équipes API, rattaché à l'Epic multidevise
PRE-3418.
Conséquence à connaître : il n'y a plus aucun filtrage de devise au checkout pour les moyens de
paiement PayPlug. Une devise non supportée n'est plus masquée — le paiement échoue côté API au lieu
de ne pas être proposé. Le contrôle min/max est lui aussi contourné pour toute devise absente de la
map. C'est le compromis retenu pour débloquer le multidevise.
Rétrocompatibilité des configs existantes. Un moyen de paiement enregistré avant ce PR conserve
hfSubMerchantIddans sa config. Deux tests couvrent ce cas :GatewayCredentialsResolverTest::testResolve_withALeftoverSubMerchantIdInConfig_ignoresItet…FormSubmissionTest::testSubmit_hostedFieldsModeWithALeftoverSubMerchantIdInStoredConfig_isValid.La valeur résiduelle est ignorée, la config reste enregistrable. Aucune migration n'est prévue —
dites-moi si vous en voulez une pour nettoyer la colonne.
Changement de signature.
GatewayCredentialsResolver::resolve()retourne désormais unstringau lieu d'un
array{0: string, 1: string}, etbuildCommonFields()perd son paramètre submerchant.Les deux handlers de capture ont été adaptés.
Vérification locale.
composer testspasse (484 tests, PHPStan, ECS) — mais uniquement aprèsavoir recopié à la main les 3 fichiers modifiés d'UPC dans
vendor/payplug/unified-plugin-core/.Ce vert local ne vaut donc pas garantie CI tant que la contrainte n'est pas relevée (cf. bloc
bloquant ci-dessus).