Skip to content

Feature/pre 3585 create aliasing - #313

Open
hdelaforce-payplug wants to merge 4 commits into
developfrom
feature/PRE-3585_create_aliasing
Open

Feature/pre 3585 create aliasing#313
hdelaforce-payplug wants to merge 4 commits into
developfrom
feature/PRE-3585_create_aliasing

Conversation

@hdelaforce-payplug

@hdelaforce-payplug hdelaforce-payplug commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

Le ticket PRE-3585 permet à un client de payer avec une carte déjà enregistrée (alias) pendant le checkout Hosted Fields (UHF), sans ressaisir les champs carte.

  • Nouveau parcours de paiement par alias : CaptureAliasPaymentRequest / CaptureAliasPaymentRequestHandler, parcours jumeau de CaptureHostedPaymentRequestHandler mais construit autour d'un PaymentDto (alias existant) plutôt qu'un HostedFieldDto (token fraîchement tokenisé).
  • Routage : CaptureHostedPaymentRequestCommandProvider bascule entre les deux commandes de capture selon la carte sélectionnée en session (payplug_payment_method), gère l'idempotence au retour d'un 3DS pour les deux parcours, et redémarre une tentative propre si le client change de carte entre deux soumissions.
  • Persistance de la carte : une création d'alias réussie enregistre une nouvelle entité Card (marque, 4 derniers chiffres, expiration, pays, client, moyen de paiement).
  • Alignement avec les évolutions d'UPC en cours de dev :
    • renommage HostedPaymentCreatorInterface/UnifiedApiHostedPaymentCreatorUnifiedApiPaymentCreatorInterface/UnifiedApiPaymentCreator (sert désormais les deux types de paiement, plus seulement Hosted Fields) ;
    • nouveau IntegrationDescriptionProvider : construit le champ description désormais obligatoire côté API (Sylius-{version}/SyliusPayPlugPlugin-{version}/UPC-{version}) ;
    • nouveau OrderAddressDtoFactory : construit les DTO billing/shipping (parsing téléphone via le PhoneHelper d'UPC) ;
    • ajout de fullName dans les détails du moyen de paiement envoyés à l'API.
  • successUrl/cancelUrl transitent désormais par le provider existant sylius_shop.provider.order_pay.after_pay_url, pour qu'un défi 3DS/SCA ramène le client sur la même page /pay.
  • Hosted Fields (JS/twig) : 4 nouveaux champs cachés (last4, exp_month, exp_year, country) capturés depuis la réponse de tokenisation et persistés avec la carte enregistrée.
  • Factorisation : logique commune extraite dans deux traits (ResolvesSelectedCardTrait, BuildsCommonPaymentContextTrait) pour éviter la duplication entre les deux handlers de capture et le provider.
  • Durcissement suite à revue de code :
    • la vérification de propriété d'une carte sélectionnée vérifie désormais aussi que le moyen de paiement correspond (empêche l'utilisation d'un alias créé sous un autre compte PayPlug) ;
    • une carte sélectionnée mais supprimée entre-temps échoue proprement (transition TRANSITION_FAIL) au lieu de faire planter la requête ;
    • persistCard() n'essaie plus de persister une Card sans moyen de paiement associé (champ Doctrine non nullable).

Point d'attention avant merge : composer.json pointe temporairement payplug/unified-plugin-core vers dev-feature/PRE-3590_hosted_field_aliasing@dev — à remplacer par une version taguée dès qu'elle sera publiée côté UPC.

Limites connues (non traitées dans cette PR) :

  • Les noms de champs lus sur la réponse de tokenisation Hosted Fields (last4/expirationMonth/expirationYear/country) ne sont pas vérifiés face à une vraie réponse sandbox (aucune doc/SDK vendorisé dans ce repo) — à confirmer en recette.
  • Risque de double capture si le client change de carte pendant qu'une tentative de paiement par alias précédente est encore en attente d'un 3DS (aucune API d'annulation/void côté UPC aujourd'hui pour la traiter proprement).

Motivation :

Permettre le paiement en un clic avec une carte déjà enregistrée sur le parcours Hosted Fields, comme sur le parcours redirigé existant.

Related issue(s): Closes PRE-3585


Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue) [ ]
  • ✨ New feature (non-breaking change that adds functionality) [x]
  • 💥 Breaking change (fix or feature that causes existing functionality to change and that could impact other libs) [ ]
  • 🔧 Refactor (no functional changes, code improvement only) [ ]
  • 📦 Dependency update [ ]
  • 🔒 Security fix [ ]
  • 📝 Documentation update [ ]

Checklist

Code Quality

  • Code is linted and formatted
  • No unnecessary commented-out code or debug logs
  • No hardcoded values (use env variables or config) — voir point d'attention sur composer.json

Testing

  • Unit tests added / updated
  • New/changed code is covered by tests — SonarCloud Quality Gate (coverage on new code) passes on the sonarcloud CI job

Security & Ops

  • No sensitive data or secrets introduced
  • Logging and error handling are appropriate

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@hdelaforce-payplug
hdelaforce-payplug force-pushed the feature/PRE-3585_create_aliasing branch from 823c9ad to d1d8038 Compare August 21, 2026 12:20

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@hdelaforce-payplug
hdelaforce-payplug force-pushed the feature/PRE-3585_create_aliasing branch 2 times, most recently from caad8d2 to e4d2df2 Compare August 21, 2026 13:30
@hdelaforce-payplug
hdelaforce-payplug force-pushed the feature/PRE-3585_create_aliasing branch from e4d2df2 to ccd3abb Compare August 24, 2026 08:45

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

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.

2 participants