Magento2 Rest API Order Flow

13

Ich rufe die REST-API auf der Magento-Website auf, um eine Bestellung aufzugeben. Unten ist die Reihenfolge meiner Anrufe.

  1. Erstellen Sie einen Warenkorb rest/V1/guest-carts/
  2. Holen Sie sich den Warenkorb rest/V1/guest-carts/bae0af147b83f1561f66cc4e3c97916e
  3. Produkte zum Warenkorb hinzufügen rest/V1/guest-carts/24/items
  4. Fügen Sie Zahlungsinformationen hinzu, legen Sie die Zahlungsmethode fest und geben Sie die Bestellung auf rest/V1/guest-carts/24/payment-information

In dieser Reihenfolge erhält die Bestellung den Bestellstatus "ausstehend". Ich frage mich, wie die Zahlung über API erfasst wird, wenn ein Zahlungsgateway (z. B. PayPal) beteiligt ist, um die Zahlung zu verarbeiten und eine Rechnung zu erstellen.

Fehlt im obigen Ablauf eine API für die Erfassung von Zahlungen?

blakcaps
quelle

Antworten:

11

Ich habe eine Neuinstallation für das Folgende unter Verwendung von Magento2 CE 2.2.0-dev verwendet und das Standard-Thema "Luma" ebenfalls verlassen.

In Bezug auf externe Zahlungsmethoden (Gateways) wie MiGS , Braintree , PayPal und andere unterstützt Magento diese Gateways standardmäßig , bietet jedoch KEINE APIs für diese, die Sie zusammen mit anderen "Checkout" -APIs verwenden können.

Wenn Sie also vorhaben, eine Checkout-App / -Seite mit Magentos APIs zu erstellen, müssen Sie diese Services mithilfe ihres SDK / API manuell integrieren. Glücklicherweise können Sie eine Menge lernen, indem Sie überprüfen, wie Magento diese Services in den Build integriert -in Integrationen.

Um dies zu verstehen, musste ich Braintree konfigurieren, da es das einfachste ist:

  1. Erstellen Sie ein Sandbox-Konto unter https://www.braintreepayments.com/sandbox
  2. Greifen Sie auf den Magento Admin-Bereich zu.
  3. Shops> Konfiguration> Verkauf> Zahlungsmethoden> Braintree> Konfigurieren.
  4. Stellen Sie sicher, dass "Umgebung" "Sandbox" ist, und geben Sie "Händler-ID", "Öffentlicher Schlüssel" und "Privater Schlüssel" ein.
  5. Konfiguration speichern.
  6. Möglicherweise müssen Sie den Cache neu indizieren und / oder aktualisieren.

Wenn Sie ein Produkt in den Warenkorb legen und zur Kasse gehen, wählen Sie im letzten Schritt die Zahlungsmethode Braintree. Nachdem Sie auf die Schaltfläche "Bestellung aufgeben" geklickt haben, werden Sie die folgenden AJAX-Anfragen sehen:

  1. 2 fordert die Braintree API auf, die Karte zu validieren, die Transaktion durchzuführen und mit dem Transaktionsstatus zu antworten.
  2. Eine Anfrage an die Magento-API guest-carts/cartId/payment-informationmit dem üblichen Inhalt, wie in der Magento-API-Dokumentation erläutert.

Danach wird der Prozess wie erwartet mit der Weiterleitung zur Erfolgsseite fortgesetzt, wenn die letzte Anforderung in JSON mit der Bestellung antwortet entity_id

Bildbeschreibung hier eingeben

Dies bestätigt, dass Aufrufe an externe Services - in unserem Beispiel Braintree - von der Checkout-Seite NICHT von Magento intern ausgeführt werden. Daher müssen wir dasselbe tun, wenn wir unsere eigene Checkout-Seite / App entwickeln möchten.

Wie bei dem Auftragsstatus zu steuern, grub ich tiefer und fand heraus , dass die Verwendung von Zahlungsmethoden wie MiGs, Braintree, oder PayPal, mit dem Status in einer Reihenfolge ergab processingstatt der üblichen pending, ich vermuten , dass dies entweder eine Zahlungsmethode Konfiguration oder ein Beobachter , aber es schien eine Konfiguration zu sein, hier sind weitere Details.

Klasse: Magento \ Sales \ Model \ Order \ Payment

Methode: Place ()

Es gibt eine Bedingung, die prüft, ob Initializationfür die Methode erforderlich if ($methodInstance->isInitializeNeeded())ist. Ist dies der Fall, wird eine von initialize()Ihnen definierte Methode ausgeführt, mit der Sie sowohl stateals auch angeben können status.

Mahmoud Tantawy
quelle
können Sie die Nutzlast für die Zahlungsinformationen api
teilen
1
{"cartId": "a98697cba964d6ba0d3b64d78a31df33", "billingAddress": {"countryId": "EG", "regionId": null, "region": "", "street": ["street", "]," company " ":" meine Firma "," Telefon ":" 12346987 "," Postleitzahl ":" 12345 "," Stadt ":" Stadt "," Vorname ":" F-Name "," Nachname ":" I-Name "," saveInAddressBook ": null}," paymentMethod ": {" method ":" braintree "," additional_data ": {" payment_method_nonce ":" ef27df81-7c29-4a74-9049-15de33f1f49f "}," email ":" email @ example .com "}
Mahmoud Tantawy
Danke für die Nutzlast. Ich frage mich, wie man "payment_method_nonce" generiert.
blakcaps
Ich weiß es nicht wirklich, aber ich denke, durch das Überprüfen von Anfragen hin und her kann das Nonce leicht entdeckt werden, wenn es wirklich als Nonce fungiert.
Mahmoud Tantawy
1
Braintree scheint über die REST-API einfach zu integrieren zu sein. Aber wie binde ich das externe Redirection Payment Gateway wie Papal oder Ingenico ein?
Franck Garnier