Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • A azeero.group
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 40
    • Issues 40
    • List
    • Boards
    • Service Desk
    • Milestones
  • Deployments
    • Deployments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Infrastructure Registry
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • Oliver
  • azeero.group
  • Issues
  • #215

Closed
Open
Created Dec 22, 2019 by Oliver@ohonigMaintainer

cart checkout payment

GUI: Warenkorb https://www.mygood.at/de/shop/cart Anzeiger aller Produkte/Dienstleistungen -> Button "Weiter zur Kassa"

Kassa https://www.mygood.at/de/shop/checkout mit

a) dem Warenkorb aller orderable_kz = 'Y' und buyable_kz = 'N' und dieser Menge mit "Kostenpflichtig bestellen"

b) dem Warenkorb aller orderable_kz egal und buyable_kz = 'Y' und dieser Menge mit "Kostenpflichtig kaufen"

c) dann das was jetzt bei "Die Produkte müssen bei folgenden Stellen abgeholt werden:" steht anzeigen. Die Teilmengen a und b führen zu jeweils eigenen Aufrufen von orderwish und jeweils einer eigenen Bestellung+Nummer.

Kauf ist eine Erweiterung einer Bestellung durch den zusätzlichen Ablauf und Erfassung der Zahlungsdaten. Einen Kauf kann man nirgends (weder bei alten Bestellung noch Kauf) hinzufügen Beim Kauf kommt "Zahlart auswählen" dazu, im Moment ist die Zahlart default auf "Mollie"

Generell "Zufügen zu einer Bestellung":

Hinzufügen nur zu Bestellungen: Die keine order_product_details.receipt_number haben, die status "NEU" sind und auf Zahlart 2. Wenn order_product_details.receipt_number gesetzt ist wurde entweder eine Rechnung zur Bestellung gedruckt (Lieferstart) oder eben ein Online-Kauf durchgeführt.

Ablauf Kauf:

  1. Zahlungsserver läuft intern auf port 7070 im Node-Server als forever

  2. mygood-checkout legt alle reinen Bestellungen mit Zahlart 2 (Überweisung) an und alle Käufe mit Zahlart 3 (Online Zahlung eingeleitet), beides ganz normal über jeweils einen Aufruf an orderwish wie bisher. (Offen für mich in email.js 80 auf 2 ändern).

  3. Bei "Kostenpflichtig kaufen" ruft checkout mittels POST zusätzlich vom Zahlungsserver unter /payment auf:

{ // post data auf /payment
 "description": "payment from User abc for OrderNr xyz",
 "redirectUrl": "https://www.mygood.at/payment/orderok/xyz",  / seite, in der ich Anzeige dass zahlung ok ist
 "webhookUrl": "https://www.mygood.at/payment/webhook" //pfad wo der proxy auf 7070 hinzeigt
 "amount": 5.00, // gesamtpreis des kaufes
 "orderid": order_payment.seq_id
}

Der payment server liefert zurück:

{
 "status": "OK"
 "checkOutUrl": "https://abc.com" // auf diese url dann direkt umleiten (location.href)
}
oder 
{
 "error": "irgendwas" // menschenlesbarer String
}

3a) bei Status "OK": redirect der Seite auf die "checkOutUrl" des Zahlungsproviders (hier mollie)

3b) bei Status "Error": Anzeige von "Keine Verbindung mit dem Zahlungsserver möglich", Hier als Optionen für den Kunden:

3ba) Button "Bestellbare Produkte als Bestellung aufnehmen" (im Warenkorb werden alle nicht kaufbaren Produkte reduziert und orderwish aufgerufen (also so, wie wenn der Kunde selber im Warenkorb die Produkte reduziert hat und wieder auf checkout geht). Aufruf orderwish:

  • orderid = orderinfo.seq_id
  • status_kz = 'UPD'
  • paymentId = 2
  • wishlist = alle nicht bestellbaren Produkte aus dem Kauf (also dort wo beim Produkt is_orderable = 'N' steht aber is_buyable = 'Y') restliche Parameter wie "normal" bei den anderen Aufrufen

dann Anzeige des letzten Tabs mit der Bestell/Kaufübersicht

3bb) Button "Zahlungswiederholung"

  1. Bei Aufruf der redirectUrl (über den Zahlungsprovider, die gibst du beim Zahlungsserver mit) check ob: order_info -> order_product_details -> order_payment paymentID = 4 ist:

4a) Wenn paymentID = 4 ist, dann Anzeige des letzten Tabs mit der Bestell/Kaufübersicht (das ist das "Kauf ok" aus #323 (closed) (closed))

4b) Wenn paymentID = 3 ist, dann wie bei 3b) vorgehen

3b+4b ist im Prinzip ein weiterer gleicher Tab!

Der Aufruf vom webhook wird vom mygood Server 1:1 zum Zahlungsserver als proxy weitergegeben (.mygood.at/payment/xyz, xyz wird als post mit allen parametern an den payserver gesendet, webhookUrl beim Aufruf des payservers als Parameter ist ".mygood.at/payment", ist schon umgesetzt), payserver.webhook setzt dann auch die Zahlungsinfo und Zahlart 4 (Online Zahlung ok) wenn die Zahlung ok gegangen ist.

Bei Zahlart >= 3 darf die Bestellung vorerst nicht storniert werden, bitte dies im Bestelllistenmanager berücksichtigen!

DB-Modell

ALTER TABLE order_payment ADD payment_provider VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci AFTER updatedAt;;
ALTER TABLE order_payment_log ADD payment_provider VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci AFTER updatedAt;
ALTER TABLE order_payment ADD payment_method VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci AFTER updatedAt;
ALTER TABLE order_payment_log ADD payment_method VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci AFTER updatedAt;
ALTER TABLE order_payment ADD payment_reference VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci AFTER updatedAt;
ALTER TABLE order_payment_log ADD payment_reference VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci AFTER updatedAt;

delimiter // 
DROP TRIGGER order_payment_u_log
//
CREATE TRIGGER order_payment_u_log BEFORE UPDATE ON order_payment FOR EACH ROW BEGIN INSERT INTO order_payment_log SELECT logtable.*,null,NOW(),USER(),ci.person_id FROM order_payment logtable,connection_info ci WHERE logtable.seq_id = OLD.seq_id; END
//
DROP TRIGGER order_payment_d_log
//
CREATE TRIGGER order_payment_d_log BEFORE DELETE ON order_payment FOR EACH ROW BEGIN INSERT INTO order_payment_log SELECT logtable.*,null,NOW(),USER(),ci.person_id FROM order_payment logtable,connection_info ci WHERE logtable.seq_id = OLD.seq_id; END
//
delimiter ;

Der Zahlungsserver liegt in /home/ohonig/azeero.communication (bzw. https://source.azeero.at/Joniras/azeero.communication) und wird über nohup node mailserver.js & (bzw. in echt eine forever variante) gestartet. im testsystem über /etc/init.d/mygood.tst, bitte dies generell als startup verwenden, da sonst der server nicht läuft wenn ein kill auf node gemacht wird.

Edited Jul 14, 2020 by Oliver
Assignee
Assign to
Time tracking