web-dev-qa-db-fra.com

Accrochage complet du paiement Woocommerce

Après une longue recherche, j'ai trouvé ce post:

hook WooCommerce pour les actions "après paiement terminé"

qui parle de créer des webhooks dans woocommerce pour notifier un script de faire ... quelque chose ... n'a pas trop d'importance quoi.

J'ai également lu tout ce que je peux trouver dans les documents de woocommerce.

mais j'ai besoin d'une sorte de documentation ou de conseils pour écrire réellement le gestionnaire à l'autre bout.

Mon objectif est de recevoir une notification de paiement complet, puis de déplacer l'utilisateur vers une autre liste (une liste de clients plutôt qu'une liste de prospects) après l'achat - j'utilise PHPlist en interne comme gestionnaire de liste. Je suis presque sûr que je peux m'occuper de cette partie, si je peux simplement mettre l'auditeur en marche ...

Mais ... je ne sais pas ce que le hook Web envoie, comment l'obtenir pour envoyer les données que je veux et quoi faire avec l'auditeur.

J'ai aussi trouvé ceci:

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

qui - POURRAIT être utile? Je ne sais toujours pas par où commencer avec l'auditeur, ou si ce message est toujours valide, étant donné qu'il a quelques années ...

Merci!

- Aaron

19
Aaron Trumm

Le woocommerce_payment_complete le crochet est tiré lorsque le paiement est terminé. La seule variable transmise est l'ID de la commande, bien que vous puissiez obtenir l'objet de la commande et, finalement, l'utilisateur.

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
    }
}
26
helgatheviking

avec l'aide de @helgatheviking et @Scriptonomy, je me suis installé sur ce code, avec aucun webhook activé dans woocommerce-> settings-> 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()
 )
);

Il ne me reste plus qu'à écrire l'auditeur :) Voici le corps de la requête qui est envoyée (que je peux voir sur requestb.in):

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

Si vous souhaitez inspecter le maquillage de la demande de hook Web, je vous suggère de vous rendre sur requestb.in et de configurer un bac. Vous permettant ainsi d'inspecter la demande et de formuler un gestionnaire d'actions.

Astuce: la demande de webhook envoie des informations relatives dans le corps de la demande sous forme de données au format JSON. Une fois que vous avez décodé le corps, il est facile de le parcourir et d'extraire les informations nécessaires.

Sur un autre volet de la réponse, je vous indique la réponse @helgatheviking et j'utilise le woocommerce_payment_complete crochet. Une fois à l'intérieur du crochet, lancez une boucle POST request et insérez dans le corps toutes les dépendances du gestionnaire de requêtes. Vous extrairez ces dépendances du $order_id.

1
Scriptonomy