2015-11-19 16 views
8

Nach langer Suche fand ich diesen Beitrag:WooCommerce Zahlung komplett Haken

WooCommerce hook for "after payment complete" actions

, die über das Erstellen von webhooks in WooCommerce spricht ein Skript zu informieren ..., etwas zu tun ... spielt keine Rolle, zu viel was.

Ich habe auch alles gelesen, was ich in woocommerce docs finden kann.

aber ich brauche eine Art Dokumentation oder Anleitung zum Schreiben des Handlers am anderen Ende.

Mein Ziel ist es, eine Zahlung abgeschlossen Benachrichtigung zu erhalten und den Benutzer nach dem Kauf in eine andere Liste (eine Kundenliste statt einer Liste von Interessenten) zu verschieben - ich benutze PHPlist im Haus als meinen Listenmanager. Ziemlich sicher kann ich mit diesem Teil umgehen, wenn ich nur den Hörer gehen kann ...

Aber .. ich weiß nicht, was der Web-Hook sendet, wie man es erhält, um Daten zu senden, die ich will, und was mit dem Zuhörer zu tun ist.

Ich habe auch diese finden:

https://wordpress.org/support/topic/plugin-woocommerce-excelling-ecommerce-order-id-for-payment-notification-to-external-webservice?replies=4

die - könnte hilfreich sein? Ich bin immer noch nicht sicher, wo ich mit dem Hörer anfangen soll, oder ob dieser Beitrag noch gültig ist, vorausgesetzt, dass es ein paar Jahre alt ist ...

Danke!

- Aaron

+0

Scheint, wie sollte es eine einfache Möglichkeit, queryArgs zum Woo Webhook zu befestigen, so dass Sie nicht haben um PHP-Code zu schreiben, um die Zahlung abzuschließen und die Daten selbst zu senden. Es ist ein häufiger Anwendungsfall, aber aus dem Lesen der Antworten scheint das nicht möglich zu sein, ohne PHP zu schreiben. – Danger

Antwort

11

Der woocommerce_payment_complete Haken wird ausgelöst, wenn die Zahlung abgeschlossen ist. Die einzige Variable, die übergeben wird, ist die Bestell-ID, von der Sie jedoch das Bestellobjekt und schließlich den Benutzer abrufen können.

+0

Danke ein Haufen! ... Ich muss mit dieser Info spielen und sehen, wo ich bekomme .. :) –

+0

ok ja jetzt habe ich ein paar Fragen ... das Stück: 'if ($ user) { ' wird das False zurückgeben, wenn es sich bei der Bestellung um einen Gastauftrag handelt (dh sie haben kein Konto erstellt oder haben ein Konto)? alles, was ich wirklich (vorerst) brauche) ist die E-Mail-Rechnung und ich denke, die Produkt-ID (s) ... die andere Frage ist ... ich bin nicht wirklich sicher, was ich damit machen werde // mach etwas mit dem Benutzer - sende irgendwie meine Daten in der Anfrage - aber nicht sicher, wie das gemacht ist (kannst du sagen, das ist mein erster Webhook? :)) btw @scriptomony requestb.in ist genial! Vielen Dank! :) –

+1

Ich glaube nicht, dass ich dies einen Webhook nennen würde, das ist ein WordPress Action Hook. Ja, $ user wird falsch sein, wenn kein registrierter Benutzer vorhanden ist. Wenn Sie nur die Rechnungsadresse benötigen, können Sie '$ order-> billing_email' verwenden. Ich wusste nicht genau, was du gemacht hast, also ist das oben nur ein Beispiel. Mit '$ order-> get_items()' erhalten Sie ein Array der gekauften Artikel. – helgatheviking

1

Wenn Sie wünschen, das Web-Hook-Anfrage-Make-up zu überprüfen, schlage ich vor, Sie gehen zu requestb.in und richten einen Behälter ein. So können Sie die Anfrage einsehen und einen Aktionshandler formulieren.

Hinweis: Die Webhook-Anfrage sendet relative Informationen im Hauptteil der Anfrage als JSON-formatierte Daten. Sobald Sie den Körper entschlüsseln, ist es einfach, ihn zu durchqueren und die benötigten Informationen zu extrahieren.

Auf einem anderen Teil der Antwort, ich zeige Ihnen @ Helgatheviking Antwort und verwenden Sie den woocommerce_payment_complete Haken. Wenn Sie innerhalb des Hooks sind, feuern Sie eine POST-Anforderung ab und fügen Sie alle Abhängigkeiten des Request-Handlers in den Body ein. Sie werden diese Abhängigkeiten aus dem $order_id extrahieren.

+0

Das gleiche sagte ich zu @helgatheviking oben - danke ein Haufen! Selbst zu wissen, dass es JSON ist, hilft lol. Ich werde herumspielen - ich kann zurück Fragen stellen ... :) –

+0

Sie könnten auch ['wp_remote_post'] (https://codex.wordpress.org/Function_Reference/wp_remote_post) verwenden. – helgatheviking

4

mit Hilfe von @helgatheviking und @Scriptonomy ich auf diesem Code angesiedelt, mit NO Webhook in woocommerce- freigegeben> Einstellungen-> API-> webhooks:

add_action('woocommerce_payment_complete', 'so_payment_complete'); 
function so_payment_complete($order_id){ 
    $order = wc_get_order($order_id); 
    $billingEmail = $order->billing_email; 
    $products = $order->get_items(); 

foreach($products as $prod){ 
    $items[$prod['product_id']] = $prod['name']; 
} 

$url = 'http://requestb.in/15gbo981'; 
// post to the request somehow 
wp_remote_post($url, array(
'method' => 'POST', 
'timeout' => 45, 
'redirection' => 5, 
'httpversion' => '1.0', 
'blocking' => true, 
'headers' => array(), 
'body' => array('billingemail' => $billingEmail, 'items' => $items), 
'cookies' => array() 
) 
); 

Jetzt muss ich den Hörer einfach schreiben :) Dies ist der Körper der Anforderung, die gesendet wird (was ich bei requestb.in sehen):

billingemail=%22aaron-buyer%40thirdoptionmusic.com%22&items%5B78%5D=Cult+Of+Nice&items%5B126%5D=Still&items%5B125%5D=The+Monkey+Set