Gebruik van Mollie functies in custom Wordpress plugin

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java developer met testervaring

Java developer met testervaring Functieomschrijving "De drempel tussen de burger en de Belastingdienst zo laag mogelijk houden: dat is de belangrijke taak van ons team. Dit doen we door het burgerportaal Mijn Belastingdienst continu te verbeteren." René, Java-specialist bij de Belastingdienst. De keten Interactie is een samenwerkingsverband van alle dienstonderdelen binnen de Belastingdienst. Samen zorgen we dat het contact met burgers en bedrijven goed kan plaatsvinden. Onze belangrijkste opgave? Zoveel mogelijk digitaliseren. Dat doen we binnen het onderdeel Informatievoorzieningen (IV), de ICT-organisatie van de Belastingdienst. Denk bij de producten die IV-Interactie ontwikkelt en onderhoudt aan portalen, formulieren en authenticatie- en

Bekijk vacature »

Full Stack Developer Industriële Automatiseri

Raster wordt continu betrokken bij complexe en baanbrekende projecten in industriële automatisering. Ons team is gespecialiseerd in productie automatisering en proces automatisering projecten waarin procesveiligheid een belangrijk aspect is. Ons compact en groeiend OX (Operational Excellence) team ontwikkelt, configureert en levert support op zelfontwikkelde applicaties waarmee onze klanten hun productieprocessen slimmer, sneller, goedkoper en veiliger maken. Operational Excellence wordt zichtbaar gemaakt in resultaten. Bij bedrijven met dezelfde strategie, zal een operationeel excellent bedrijf een lager operationeel risico, lagere operationele kosten hebben en relatief meer winst maken. Het Raster OX team laat haar klanten de resultaten behalen door hun eigen procesdata

Bekijk vacature »

Thijmen van Doorn

Thijmen van Doorn

22/05/2020 18:35:15
Quote Anchor link
Beste allen!

Ik ben een eigen Wordpress plugin aan ontwikkelen wat gebruikt maakt van Woocommerce en Mollie als betaalmethode. Echter wil ik extra metadata meesturen met Mollie niet lukken. Mollie geeft zelf deze optie ook aan en legt dat hier(https://github.com/mollie/WooCommerce/wiki/Helpful-snippets) uit.

Hieronder de code die ik gebruik in mijn pluginfile.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
function custom_mollie_metadata( $metadata ) {
    global $order_id;
    $metadata += array( "invoice_reference" => $order_id );
    
    return $metadata;
    }
add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata' );


De uiteindelijke data is niks, waarbij ik me dus begin af te vragen of bovenstaande methode wel de juiste is. Kan iemand me een beetje opweg helpen?
Gewijzigd op 22/05/2020 18:38:20 door Thijmen van Doorn
 
PHP hulp

PHP hulp

22/10/2021 05:04:37
 
Thomas van den Heuvel

Thomas van den Heuvel

22/05/2020 20:45:47
Quote Anchor link
Hm, weet je zeker dat de plugin wordt aangeroepen?

Een global statement is wellicht ook een beetje gevaarlijk, maar als dat gebruikelijk is in WP dan kun je dat doen I guess.
 
Thijmen van Doorn

Thijmen van Doorn

25/05/2020 08:18:48
Quote Anchor link
100% zeker weten doe ik niet. Maar over het algemeen kunnen de hooks gewoon aangeroepen worden, zonder een bepaalde plugin aan te roepen. Tenminste, zo begreep ik het. Maar wellicht kan ik het over het hoofd zien..
 
Jop B

Jop B

25/05/2020 18:17:19
Quote Anchor link
Hi Thijmen,

Waar word je global $order_id aangemaakt?
Wellicht moet je global $woocommerce gebruiken, hierin kun je heel veel data uitlezen wat betreft orders, producten etc.
 
Thijmen van Doorn

Thijmen van Doorn

25/05/2020 18:27:47
Quote Anchor link
Inmiddels is het stukje code aangepast naar onderstaand, maar blijft het nog steeds een raadsel omdat in de ontvangen metadata niets zit wat dit stukje code zou moeten maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
function custom_mollie_metadata( $metadata ) {

    $order_id_metadata = $order->get_id();
    $metadata += array( "jortt_invoice_reference" => $order_id_metadata );
    
    return $metadata;
    }

add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata' );
 
Jop B

Jop B

25/05/2020 19:00:06
Quote Anchor link
$order->get_id(); is die wel gevuld?
Waar roep je de global $woocommerce; aan?
 
Thijmen van Doorn

Thijmen van Doorn

26/05/2020 17:19:56
Quote Anchor link
Inmiddels achterhaald dat de metadata wel doorkomt, maar de orderid maar niet ingevuld wordt. Aan de hand van jullie tips, de code wat aangepast maar hierbij krijg ik de error 'Backend fatal error: PHP Fatal error: Uncaught Error: Call to a member function get_id()'. Blijkbaar is die functie onvindbaar..?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
function custom_mollie_metadata( $metadata ) {

    global $woocommerce, $order;
    $order = wc_get_order($order_id);
    $order_id = $order->get_id();
    
    $metadata += array( "jortt_invoice_reference" => $order_id );
    
    return $metadata;
    }

add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata' );
 
Jop B

Jop B

26/05/2020 20:05:30
Quote Anchor link
Hi Thijmen,


Mag ik je vragen hoe je je plugin hebt opgebouwd qua files (includes etc)

Toevoeging op 26/05/2020 20:22:22:

Wil je dit eens proberen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
global $woocommerce, $post;
$order = new WC_Order($post->ID);
$order_id = trim(str_replace('#', '', $order->get_order_number()));
 
Thijmen van Doorn

Thijmen van Doorn

27/05/2020 16:57:50
Quote Anchor link
Hi Jos,

Je code geeft de foutmelding in de php log:
"Backend log: woocommerce_add_order_item_meta is deprecated since version 3.0.0! Use woocommerce_new_order_item instead."

en bij het bestelproces verschijnt de melding 'Ongeldige bestelling'. Er maar 1 file waarin de plugin draait, er zijn wel extra files, maar die hebben niets met Woocommerce of Mollie te maken. Het vreemde is, dat verderop in de code

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
    $order = wc_get_order($order_id);


en

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$order->get_id()


Wordt gebruikt bij een array in een function, wat wel werkt..
 
Jop B

Jop B

27/05/2020 19:35:37
Quote Anchor link
Yo Thijmen,


Natuurlijk niet nagedacht, dat er pas een ID word aangemaakt na de checkoutpage.
Je wilt voordat er betaald is informatie meesturen naar Mollie.
Je kan deze hook een proberen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
do_action( 'woocommerce_checkout_order_processed', $order_id, $posted_data, $order );

Deze hook pak de order ID zodra de order is aangemaakt wat net voor de checkout gebeurt.
 
Thijmen van Doorn

Thijmen van Doorn

27/05/2020 20:43:05
Quote Anchor link
Hi Jos,

Dat klinkt inderdaad logisch, en zelf niet aandacht! xD
Echter zoek ik even de weg hoe deze hook aan te roepen, in combinatie met de filter? Zou het niet add_action() moeten zijn?
 
Jop B

Jop B

27/05/2020 22:02:27
Quote Anchor link
Nou met add_action voeg je een actie toe aan iets wat bestaat. Met do_action voer je de functie direct uit.
Ik ben zelf niet met Mollie bekend en zou hier in moeten duiken om je opweg te helpen.
Je zou vanuit die actie de order_id op moeten vangen en die kun je dan weer gebruiken in je Mollie functie.

Wellicht kun je op die hook even Googlen, vaak staat er per hook uitgelegd hoe wat en waar.
 
Thijmen van Doorn

Thijmen van Doorn

28/05/2020 17:47:34
Quote Anchor link
Het lijkt er op dat ik weer een stap dichterbij ben, maar de output is nog steeds niet wat ik wil (maar het is al meer dan aan het begin!)

Output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
{
  "jortt_invoice_reference": 0
}


De code is nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//ADD METADATA TO MOLLIE PAYMENT

add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata', 10, 1);
    
    function custom_mollie_metadata( $metadata ) {
        do_action( 'woocommerce_checkout_order_processed', $order_id, $posted_data, $order );

        global $woocommerce, $post, $order_id, $order, $posted_data;
        
        $order = new WC_Order( $order_id );
        $order_id_nummer = $order->get_id();
        
        $metadata += array( "jortt_invoice_reference" => $order_id_nummer );
        return $metadata;
    }
    


In iedergeval ga ik even verder googlen en kijken hoe het komt dat er maar geen order_id komt.
 
Jop B

Jop B

29/05/2020 13:35:21
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
add_action('woocommerce_checkout_order_processed', 'action_checkout_order_processed', 10, 1);
function action_checkout_order_processed( $order_id ) {
   $order = wc_get_order( $order_id );

   // Doe wat je wilt doen, zet hier je Mollie functie eens in
}


Toevoeging op 29/05/2020 13:41:05:

Wat is en waar komt jortt_invoice_reference vandaan?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.