Delad betalnings-POC: testnings- och verifieringshandbok

Den här guiden hjälper dig att verifiera att alla komponenter fungerar som de ska, i den ordning de ska testas. Börja längst ned (Commerce-modulen) och arbeta upp (App Builder).

Steg 1 - Verifiera installation av Commerce-modul

Efter att bin/magento setup:upgrade och bin/magento setup:di:compile har körts:

# 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

Förväntade utdata: fyra kolumner som börjar med split_ synliga i sales_order.

Steg 2 - Verifiera konfigurationen för Commerce Admin

I Commerce Admin:

  1. Stores > Configuration > Sales > Payment Methods — confirm Cash On Delivery is enabled with title Cash
  2. Stores > Configuration > Customers > Customer Configuration > Store Credit Options - bekräfta aktiverad
  3. Bekräfta att din testkund har butikskredit: Customers > All Customers > [kund] > Store Credit

Steg 3 - Verifiera att REST-slutpunkter är tillgängliga

Använd krullning för att bekräfta att slutpunkterna svarar (de avvisar obehöriga begäranden, men en 401-bekräftelse bekräftar att de dirigeras korrekt):

# 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}'

Steg 4 - Testa gränssnittet för utcheckning

  1. Logga in på butiken som din testkund (som har butikskrediter)

  2. Lägg en produkt i varukorgen (totalt under 100 USD efter frakt + moms)

  3. Gå till kassan

  4. Välj Kontant (eller Kontant vid leverans) i betalningssteget

  5. Kontrollera att de delade betalningsfälten visas:

    • Ditt kreditsaldo för butik visas
    • Fältet Kontantbelopp förifyllt med ordersumman
    • Fältet"Butikskredit mot den här ordern" visar $0,00 (eftersom kontanter = total order)
  6. Minska kontantbeloppet (ange t.ex. $10 för en $50-order)

  7. Verifiera att butikens kreditdel uppdateras till 40,00 USD

  8. Bekräfta att meddelandet visas: "The remaining $40.00 will automatically be applied from your store credit."

Testvalidering:

  • Ange ett kontantbelopp som är större än ordersumman → felmeddelande
  • Ange ett kontantbelopp som kräver mer butikskrediter än tillgängligt → felmeddelande
  • Ange kontanter = 0 → fel (eller butikskrediter täcker hela ordern)

Steg 5 - Test Threshold Guard

  1. Lägg till produkter som totalt överstiger 100 USD (delsumma + frakt + moms > 100 USD)
  2. Gå till kassan och välj Kontant
  3. Försök att placera ordern
  4. Kontrollera att felmeddelandet visas: "Payment could not be processed. Please try again or contact support."
  5. Kontrollera att vagnen är intakt (kunden kan fortfarande justera vagnen och försöka igen)

Steg 6 - Testa delad betalningsorder

  1. Bygg en kundvagn under 100 USD (inloggad kund med butikskredit)
  2. Välj kassa vid utcheckning
  3. Ange ett kontantbelopp som är mindre än ordersumman (t.ex. $10 av en $45-order)
  4. Bekräfta att butikskreditmeddelandet visas
  5. Klicka på Montera beställning

Efter beställningens placering kan du verifiera detta i Commerce Admin:

  • Ordern har statusen pending_payment

  • Ordern har två historikkommentarer:

    1. "Cash payment of $X.XX pending. Awaiting admin confirmation." (från App Builder payment-orchestrator)
    2. "Split payment orchestration completed. Order awaiting cash confirmation." (från App Builder)
  • Delade betalningsbelopp visas i betalningsblocket för order

Om inga App Builder-kommentarer visas: Kontrollera App Builder åtgärdsloggar med aio app logs. Händelsen kanske inte har utlösts eller så kan åtgärden ha ett fel.

Steg 7 - Testa acceptera via simuleringsskript

Simuleringsskriptet är det snabbaste sättet att testa flödet för acceptera/avvisa utan användargränssnittet för den fullständiga operatorn.

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

När du har godkänt, verifiera i ordervyn i Commerce Admin:

  • Orderstatus är processing
  • Historikkommentar: "Cash payment of $X.XX received."
  • En kassafaktura har skapats (visas på fliken Fakturor)
  • Leveransen har skapats (visas på fliken Utleveranser, om tillämpligt)
  • Historikkommentar: "Split payment: cash portion invoiced #XXXXXXXX."
  • Historikkommentar: "Split payment: shipment created after cash was accepted (App Builder / API)."

Steg 8 - Testa avböjning via simuleringsskript

Placera ytterligare en testorder (samma inställning som steg 6) och sedan:

node commerce-backend-ui-1/scripts/simulate-split-payment.mjs decline <orderId>

Bekräfta i Commerce Admin när du avböjt:

  • Orderstatus är canceled
  • Historikkommentar: "Cash payment declined (simulated fraud check)."
  • split_cash_status = declined

Steg 9 - Testa demokontrollpanelen

Efter distributionen av split-payment-orchestrator skriver aio app deploy ut URL:er för åtgärden.

Öppna URL:en demo-dashboard i en webbläsare:

https://[runtime-host]/api/v1/web/split_payment_orchestrator/demo-dashboard

Om DEMO_UI_SECRET har angetts:

https://[runtime-host]/api/v1/web/split_payment_orchestrator/demo-dashboard?secret=<your-secret>

Med väntande order:

  1. Kontrollpanelen bör visa ordningen i listan över väntande
  2. Klicka på Acceptera → beställningen ska flyttas till processing i Commerce
  3. Placera en annan ordning. Klicka på Avböj → beställningen ska vara canceled i Commerce

Steg 10 - Testa App Builder åtgärdsloggar

# 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>

För payment-orchestrator söker du efter:

[INFO] Split payment orchestration finished { orderId: '42' }

För payment-accept eller payment-decline:

[INFO] Cash payment accepted on Commerce via REST { orderId: '42' }

Vanliga problem och korrigeringar

“Signaturen är ogiltig” från Commerce OAuth

Orsak: Skeva klockan mellan App Builder-miljön och Commerce, eller ett OAuth-signeringsfel.

Korrigera:

  • Bekräfta COMMERCE_BASE_URL har inget avslutande snedstreck
  • Bekräfta att de fyra OAuth-autentiseringsuppgifterna är för en aktiverad-integrering
  • Testa med simuleringsskriptet först - om skriptet fungerar men inte App Builder, är det troligtvis en env-variabel som inte har lästs in (kontrollera aio app deploy utdata för saknade env-varianter)

Delade betalningsfält visas inte i utcheckning

Orsak: Injektionssökvägarna för LayoutProcessorPlugin matchar inte din utcheckningslayout.

Korrigera:

  • Kontrollera webbläsarkonsolen för att se om det finns fel i RequireJS vid inläsning av Client_SplitPayment/js/view/payment/split-payment
  • Kontrollen bin/magento setup:static-content:deploy har slutförts
  • Töm cacheminne: bin/magento cache:flush
  • Om temat har en anpassad utcheckning kan sökvägen LayoutProcessorPlugin som ska injiceras i komponenten behöva justeras

Butikskrediten har inte tillämpats / “Betalningen kunde inte behandlas” på plats

Orsak: En av plugin-programmen för versaler fungerar vanligtvis inte korrekt.

Kontrollera:

  1. Returnerar SplitPaymentSession rätt belopp? Lägg till temporär felsökningsloggning i PlaceOrderPlugin
  2. Körs FixSplitPaymentGrandTotalPlugin och påverkar offertsumman innan BalanceManagementInterface::apply() anropas? Flaggan beginBalanceApply() ska inaktivera den.
  3. Är kundbalansmodulen aktiverad i Commerce?

App Builder-åtgärden tar emot händelse men orderId saknas

Orsak: Fältlistan io_events.xml innehåller inte entity_id eller så har händelsens nyttolastform ändrats.

Korrigera:

  • Bekräfta att io_events.xml inkluderar entity_id i fältlistan
  • Logga JSON.stringify(params) tillfälligt i åtgärden för att se hela nyttolastformen
  • Kontrollera att extractValue()-funktionen hittar rätt kapslingsnivå

Beställningar visas inte på demokontrollpanelen

Orsak: Commerce REST orders sökvillkor returnerar inte order, eller split_cash_status fält finns inte i REST-svaret.

Korrigera:

  • Bekräfta att OrderRepositoryPlugin läser in tilläggsattribut korrekt
  • Testa direkt: GET /rest/V1/orders?searchCriteria[pageSize]=5 och kontrollera om extension_attributes.split_cash_status visas i svaret
  • Kontrollera att extension_attributes.xml deklarerar attributet split_cash_statusOrderInterface korrekt

Checklista för verifiering

  • [ ] split_* kolumner synliga i sales_order-tabellen
  • [ ] REST-slutpunkter returnerar 401 (inte 404) när de anropas utan auth
  • [ ] Gränssnittet för delad betalning återges vid utcheckning när Kontant har valts
  • [ ] Valideringsmeddelanden fungerar (överbetalning, otillräcklig kredit)
  • [ ] Tröskelskydd blockerar order > $100
  • [ ] Placerad order har status pending_payment och App Builder-kommentarer
  • [ ] simulate-split-payment.mjs list visar testordningen med delade belopp
  • [ ] simulate-split-payment.mjs accept <id> flyttar order till processing med faktura och leverans
  • [ ] simulate-split-payment.mjs decline <id> avbryter ordningen
  • [ ] Demonstrationspanelen visar väntande order och arbete för att acceptera/avböja från gränssnittet

Relaterade POC-resurser för delad betalning

recommendation-more-help
commerce-learn-help-home