2015-11-19 20 views
8

Po długich poszukiwaniach, znalazłem ten post:woocommerce płatność kompletny hak

WooCommerce hook for "after payment complete" actions

który mówi o tworzeniu webhooks w woocommerce powiadomić skrypt zrobić ... coś ... nie ma znaczenia za dużo co.

Przeczytałem również wszystko, co mogę znaleźć w dokumentach dla woocommerce.

, ale potrzebuję jakiejś dokumentacji lub wskazówek dotyczących pisania piszącego poradnika po drugiej stronie.

Moim celem jest otrzymanie kompletnego powiadomienia o płatności, a następnie przeniesienie użytkownika do innej listy (lista klientów niż lista potencjalnych klientów) po zakupie - jako menedżera listy używam PHPlist w domu. Jestem pewien, że mogę sobie poradzić z tą częścią, jeśli mogę po prostu włączyć słuchacza ...

Ale ... Nie wiem, co przesyła hak internetowy, jak zdobyć dane, które chcę, i co zrobić ze słuchaczem.

zrobiłem również znaleźć to:

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

który - może być pomocne? Nadal nie jestem pewien, gdzie zacząć od słuchacza, czy ten post jest wciąż ważne, biorąc pod uwagę, że jest to kilka lat ...

Dzięki!

- Aaron

+0

Wygląda na to nie powinno być w łatwy sposób dołączyć queryArgs do Woo WebHook więc nie masz aby przejść przez trud pisania kodu PHP, aby zakończyć płatności i wysłać dane samodzielnie. Jest to powszechny przypadek użycia, jednak z dotychczasowych odpowiedzi nie wydaje się możliwe, aby można było zrobić to bez pisania PHP. – Danger

Odpowiedz

11

Hak woocommerce_payment_complete jest zwolniony, gdy płatność została zakończona. Jedyną zmienną przekazywaną jest identyfikator zamówienia, ale z tego można uzyskać obiekt zamówienia, a ostatecznie użytkownika.

add_action('woocommerce_payment_complete', 'so_payment_complete'); 
function so_payment_complete($order_id){ 
    $order = wc_get_order($order_id); 
    $user = $order->get_user(); 
    if($user){ 
     // do something with the user 
    } 
} 
+0

Wielkie dzięki! ... Będę musiał zagrać z tą informacją i zobaczyć, gdzie dostaję .. :) –

+0

ok tak teraz mam kilka pytań ... ten kawałek: 'if ($ user) { " czy to zwróci wartość false, jeśli zamówienie jest zamówieniem gościa (np. Nie utworzyło ani nie ma konta)? wszystko, co naprawdę muszę złapać (jak na razie;)) jest e-mailem rozliczeniowym i domyślam się, że identyfikator produktu ... Drugie pytanie to ... nie jestem pewna, co mam zamiar zrobić // zrób coś z użytkownikiem - w jakiś sposób wyślij moje dane w żądaniu - ale nie wiesz, jak to się robi (czy możesz powiedzieć, że to mój pierwszy webhook?)) btw @scriptonomy requestb.in jest niesamowite! dzięki! :) –

+1

Nie sądzę, bym nazwał to webhook, jest to hak akcji WordPress. Tak, "$ user" będzie fałszywe, jeśli nie ma zarejestrowanego użytkownika. Jeśli potrzebujesz tylko adresu rozliczeniowego, możesz użyć '$ order-> billing_email'. Nie wiedziałem dokładnie, co robisz, więc powyższe jest tylko przykładem. '$ order-> get_items()' da ci tablicę zakupionych przedmiotów. – helgatheviking

1

Jeśli więc pragniesz sprawdzić żądania hak internetowej makijaż, proponuję udać się do requestb.in i konfiguracja bin. Pozwala to na sprawdzenie wniosku i sformułowanie akcji akcji.

Wskazówka: żądanie webhook wysyła względne informacje w treści żądania jako dane sformatowane w formacie JSON. Po odkodowaniu ciała łatwo jest go przemierzyć i wyodrębnić potrzebne informacje.

Na innym nodze odpowiedź, wskażę Ci @helgatheviking odpowiedź i użyj haka woocommerce_payment_complete. Gdy znajdziesz się w haku, odpal curlowe żądanie POST i włóż do ciała wszelkie zależności od obsługi zlecenia. Wyodrębnisz te zależności z $order_id.

+0

To samo powiedziałem do @helgatheviking powyżej - dziękuję! Nawet wiedząc, że to JSON pomaga lol. Będę się bawił - być może wrócę z pytaniami ... :) –

+0

Można również użyć ['wp_remote_post'] (https://codex.wordpress.org/Function_Reference/wp_remote_post). – helgatheviking

4

z pomocą @helgatheviking i @Scriptonomy zdecydowałem się na ten kod, bez webhook włączony woocommerce-> Ustawienia-> 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() 
) 
); 

Teraz tylko muszę napisać słuchacza :) to jest ciało wniosek, który zostanie wysłana (co widzę na requestb.in):

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