PdC de paiement partagé : guide de test et de vérification
Ce guide vous guide tout au long de la vérification du bon fonctionnement de chaque composant, dans l’ordre dans lequel ils doivent être testés. Commencez par le bas (module Commerce) et remontez (App Builder).
Étape 1 : vérification de l’installation du module Commerce
Après avoir exécuté bin/magento setup:upgrade et bin/magento setup:di:compile :
# Confirm module is enabled
bin/magento module:status Client_SplitPayment
# Confirm db_schema columns were added
bin/magento doctrine:schema:validate
# or check directly:
mysql -u <user> -p <dbname> -e "DESCRIBE sales_order;" | grep split
Sortie attendue : quatre colonnes commençant par split_ visible dans sales_order.
Étape 2 : vérification de la configuration de l’administrateur Commerce
Dans Commerce Admin :
- Stores > Configuration > Sales > Payment Methods — vérifiez Cash On Delivery est activé avec le titre
Cash - Stores > Configuration > Customers > Customer Configuration > Store Credit Options — confirmer activée
- Vérifiez que votre client test a un crédit de magasin : Customers > All Customers > [client] > Store Credit
Étape 3 : vérifier que les points d’entrée REST sont accessibles
Utilisez curl pour confirmer que les points d’entrée répondent (ils rejetteront les requêtes non autorisées, mais un 401 confirmera qu’elles sont correctement acheminées) :
# Should return 401 (not 404) — endpoint exists but requires auth
curl -X POST https://your-store.example.com/rest/V1/split-payment/orders/1/cash-received
# Should return 200 or session-based response — anonymous endpoint
curl -X POST https://your-store.example.com/rest/V1/split-payment/set \
-H "Content-Type: application/json" \
-d '{"storeCreditAmount": 0, "cashAmount": 0}'
Étape 4 — Tester l’interface utilisateur de passage en caisse
-
Connectez-vous au storefront en tant que client de test (qui dispose d’un crédit de magasin)
-
Ajouter un produit au panier (total inférieur à 100 $ après expédition + taxes)
-
Passer en caisse
-
A l’étape de paiement, sélectionnez Encaissement (ou Encaissement à la livraison)
-
Vérifiez que les champs de paiement fractionné s’affichent :
- Le solde créditeur de votre boutique s’affiche
- Champ de montant de trésorerie prérempli avec le total de la commande
- Champ « Crédit de magasin pour cette commande » affichant 0,00 $ (car argent comptant = total de la commande)
-
Réduisez le montant en espèces (p. ex., entrez 10 $ pour une commande de 50 $)
-
Vérifiez que la portion de crédit de magasin est mise à jour à 40 $.
-
Vérifiez que le message suivant s’affiche :
"The remaining $40.00 will automatically be applied from your store credit."
Validation du test :
- Saisir un montant en espèces supérieur au message d’erreur → du total de la commande
- Saisir un montant en espèces qui nécessite un crédit de magasin supérieur au montant disponible → message d’erreur
- Entrer cash = 0 → erreur (ou le crédit de magasin couvre toute la commande)
Étape 5 — Protection du seuil d’essai
- Ajouter des produits totalisant plus de 100 $ (sous-total + expédition + taxe > 100 $)
- Passer en caisse, sélectionner Espèces
- Tentative de passer la commande
- Vérifiez que le message d’erreur s’affiche :
"Payment could not be processed. Please try again or contact support." - Vérifiez que le panier est conservé (le client peut toujours ajuster le panier et réessayer).
Etape 6 — Effectuer un test d’ordre de paiement fractionné
- Créer un panier inférieur à 100 $ (client connecté avec un crédit de magasin)
- Sélectionner espèces au moment du passage en caisse
- Saisissez un montant en espèces inférieur au total de la commande (par exemple, 10 $ sur une commande de 45 $)
- Confirmer que le message de crédit de magasin s’affiche
- Cliquez sur Passer une commande
Une fois la commande passée, vérifiez dans Commerce Admin :
-
La commande a le statut
pending_payment -
Order comporte deux commentaires d’historique :
"Cash payment of $X.XX pending. Awaiting admin confirmation."(à partir de l’payment-orchestratorApp Builder)"Split payment orchestration completed. Order awaiting cash confirmation."(à partir d’App Builder)
-
Les montants de paiement fractionnés sont visibles dans le bloc de paiement des commandes
Si aucun commentaire App Builder n’apparaît : vérifiez les journaux d’actions App Builder avec
aio app logs. L’événement ne s’est peut-être pas déclenché ou l’action a peut-être une erreur.
Étape 7 — Tester l’acceptation via le script de simulation
Le script de simulation est le moyen le plus rapide de tester le flux d’acceptation/refus sans l’interface utilisateur complète de l’opérateur.
cd commerce-checkout-starter-kit
cp commerce-backend-ui-1/.env.simulation.example commerce-backend-ui-1/.env.simulation
# Edit .env.simulation with your credentials
# List recent orders (find your test order entity_id)
node commerce-backend-ui-1/scripts/simulate-split-payment.mjs list
# Show split payment fields for a specific order
node commerce-backend-ui-1/scripts/simulate-split-payment.mjs show 42
# Accept the cash payment
node commerce-backend-ui-1/scripts/simulate-split-payment.mjs accept 42
Après avoir accepté, vérifiez dans la vue de commande de l’administrateur Commerce :
- Le statut de la commande est
processing - Commentaire sur l’historique :
"Cash payment of $X.XX received." - Facture de caisse créée (visible dans l’onglet Factures)
- Expédition créée (visible dans l’onglet Expéditions, le cas échéant)
- Commentaire sur l’historique :
"Split payment: cash portion invoiced #XXXXXXXX." - Commentaire sur l’historique :
"Split payment: shipment created after cash was accepted (App Builder / API)."
Etape 8 — Test de refus via le script de simulation
Placez un autre ordre de test (même configuration que l’étape 6), puis :
node commerce-backend-ui-1/scripts/simulate-split-payment.mjs decline <orderId>
Après le refus, vérifiez dans Commerce Admin :
- Le statut de la commande est
canceled - Commentaire sur l’historique :
"Cash payment declined (simulated fraud check)." split_cash_status=declined
Étape 9 — Tester le tableau de bord de démonstration
Après le déploiement de l’split-payment-orchestrator, aio app deploy imprime les URL d’action.
Ouvrez l’URL demo-dashboard dans un navigateur :
https://[runtime-host]/api/v1/web/split_payment_orchestrator/demo-dashboard
Si DEMO_UI_SECRET est défini :
https://[runtime-host]/api/v1/web/split_payment_orchestrator/demo-dashboard?secret=<your-secret>
Avec une commande en attente :
- Le tableau de bord doit afficher l’ordre dans la liste en attente
- Cliquez sur Accepter → l’ordre doit passer à
processingdans Commerce. - Passer une autre commande ; cliquez sur Refuser → la commande doit être
canceleddans Commerce
Étape 10 - Tester les journaux d’actions App Builder
# Follow logs in real-time
aio app logs --tail
# Or view last invocations
aio runtime activation list --limit 10
aio runtime activation logs <activation-id>
Pour le payment-orchestrator, recherchez :
[INFO] Split payment orchestration finished { orderId: '42' }
Par payment-accept ou payment-decline :
[INFO] Cash payment accepted on Commerce via REST { orderId: '42' }
Problèmes courants et correctifs
« La signature n’est pas valide » de Commerce OAuth
Cause : décalage d’horloge entre l’exécution d’App Builder et Commerce, ou bug de signature OAuth.
Correctif:
- Confirmer
COMMERCE_BASE_URLn’a pas de barre oblique - Vérifiez que les quatre informations d’identification OAuth sont pour une intégration activée
- Testez d’abord le script de simulation. Si le script fonctionne mais pas App Builder, il s’agit probablement d’une variable d’environnement non chargée (vérifiez si les variables d’environnement sont manquantes à la sortie
aio app deploy).
Les champs de paiement fractionnés n’apparaissent pas dans le passage en caisse
Cause : chemins d’injection LayoutProcessorPlugin ne correspondent pas à votre disposition de passage en caisse.
Correctif:
- Recherchez les erreurs RequireJS lors du chargement dans la console du navigateur
Client_SplitPayment/js/view/payment/split-payment - La vérification de
bin/magento setup:static-content:deploya été effectuée - Vider le cache :
bin/magento cache:flush - Si votre thème comporte une extraction personnalisée, le chemin d’accès
LayoutProcessorPluginpour injecter le composant peut nécessiter un ajustement
Le crédit de magasin ne s’applique pas / « Le paiement n’a pas pu être traité » à la commande
Cause : l’un des modules externes de la casse Edge ne fonctionne généralement pas correctement.
Vérifier :
- Retourne-t-
SplitPaymentSessionles bons montants ? Ajout de la journalisation de débogage temporaire dansPlaceOrderPlugin - Le
FixSplitPaymentGrandTotalPluginest-il en cours d’exécution et affecte-t-il le total du devis avant l’appel deBalanceManagementInterface::apply()? Le drapeaubeginBalanceApply()devrait le supprimer. - Le module Solde client est-il activé dans Commerce ?
L’action App Builder reçoit l’événement mais orderId est manquant
Cause : la liste des champs io_events.xml n’inclut pas les entity_id ou la forme de la payload de l’événement a changé.
Correctif:
- Confirmer
io_events.xmlinclutentity_iddans la liste de champs - Dans l’action, connectez-vous temporairement pour
JSON.stringify(params)la forme de payload complète - Vérifiez que la fonction
extractValue()trouve le niveau d’imbrication approprié
Les commandes ne s’affichent pas dans le tableau de bord de démonstration
Cause : Commerce REST orders les critères de recherche ne renvoient pas les commandes ou split_cash_status champ ne se trouve pas dans la réponse REST.
Correctif:
- Vérifiez
OrderRepositoryPlugincharge correctement les attributs d’extension - Tester directement :
GET /rest/V1/orders?searchCriteria[pageSize]=5et vérifiez siextension_attributes.split_cash_statusapparaît dans la réponse. - Vérifiez que
extension_attributes.xmldéclare correctement l’attributsplit_cash_statussurOrderInterface
Liste de contrôle de vérification
- [ ]
split_*colonnes visibles danssales_ordertableau - [ ] points d’entrée REST renvoient la valeur 401 (et non 404) lorsqu’ils sont appelés sans authentification
- [ ] L’interface utilisateur de paiement fractionné s’affiche lors du passage en caisse lorsque l’option Espèces est sélectionnée
- [ ] Fonctionnement des messages de validation (trop-perçu, crédit insuffisant)
- [ ] Seuil de protection bloque les commandes > 100 $
- [ ] commande passée a
pending_paymentstatut et des commentaires App Builder - [ ]
simulate-split-payment.mjs listaffiche l’ordre de test avec des montants fractionnés - [ ]
simulate-split-payment.mjs accept <id>déplace l’ordre àprocessingavec la facture et l’expédition - [ ]
simulate-split-payment.mjs decline <id>annule la commande - [ ] tableau de bord de démonstration répertorie les commandes en attente et accepte/refuse le travail à partir de l’interface utilisateur