Beste lezer. Ik ben nu al 3 dagen bezig met het installeren van het mollie payment ideal script. Ik heb letterlijk ieder post op php hulp gelezen en geprobeerd maar het wil niet lukken. Ik heb het idee dat de oplossing in een heel klein hoekje zit alleen heb ik geen idee waar ik het moet zoeken.

Het lukt me wel om een betaling aan te vragen.
Maar op de een of andere manier kan ik niet de payment status opvragen bij de webhook. (controle van de betaling). Ik hoop dat iemand hier me kan vertellen wat ik fout doe. Er zijn 2 manieren om de webhookpagina op te vragen. Via je mollie account en via het opvraagscript. Ik heb beide manieren geprobeerd maar ik krijg de status maar niet opgevraagd op de webhookpagina.

Dit is de pagina waar er volgens mij ergens iets misgaat: Ik moet vermelden dat de Webhook pagina wel geopend wordt door mollie. Dit heb ik getest door een entry in de database te plaatsen zodra de pagina bezocht wordt. Wat gaat er mis?
Alvast hartstikke bedankt voor jullie hulp!

Dit is de informatie pagina over de webhook
https://www.mollie.com/nl/docs/reference/payments/get


<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');



include("connection2.php");





try
{
/*
* Initialize the Mollie API library with your API key.
*
* See: https://www.mollie.nl/beheer/account/profielen/
*/
include "initialize.php";

/*
* Retrieve the payment's current state.
*/
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;

/*
* Update the order in the database.
*/

if($payment->status == "paid"){

mysql_query(" INSERT INTO `betaalstatus` (`id`, `orderid`, `paymentid`) VALUES (NULL, 'test', 'paid') ");

}
elseif($payment->status == "open"){
mysql_query(" INSERT INTO `betaalstatus` (`id`, `orderid`, `paymentid`) VALUES (NULL, 'test', 'open') ");
}
elseif($payment->status == "expired"){
mysql_query(" INSERT INTO `betaalstatus` (`id`, `orderid`, `paymentid`) VALUES (NULL, 'test', 'expired') ");
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
}






Thomas van den Heuvel op 14/11/2015 12:36:14

Waar vandaan roep je de API aan? Een lokale testomgeving? Mollie kan (edit: naar alle waarschijnlijkheid) geen reactie terugsturen naar een lokaal IP / lokale virtuele host omdat deze op het internet onbekend is.

Om de API te kunnen testen zul je dit naar alle waarschijnlijkheid vanaf een locatie ergens op het internet moeten doen. Zodra je een URL meegeeft die (op de achtergrond) aangeroepen moet worden moet deze URL natuurlijk bereikbaar zijn voor de andere partij.

Daarbij kan het handig zijn om het melden + weergeven van fouten aan te zetten (als je in de ontwikkel-/een debugfase zit), zet hiertoe de volgende code aan het begin van je script:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>


Bedankt voor je reactie.
Ik heb de code online staan op mijn webserver. Ik weet zeker dat Mollie de pagina bezoekt omdat ik een Mysql Query heb toegevoegd die direct een entry plaatst als de pagina bezocht wordt ongeacht de voorwaarden. Alleen de payment komt nooit op true. Ik heb iedere variatie die ik kon vinden van dit script gebruikt maar het werkt niet. Ik denk dat ik de payment status niet goed opvraag!?

if ($payment->isPaid() == TRUE)
{
mysql_query(" INSERT INTO `betaalstatus` (`id`, `orderid`, `paymentid`) VALUES (NULL, 'doethijhet?222222', 'bbbb') ");

}




De webhook pagina geeft geen errors aan. Alleen meld het script dat ik een ongeldige payment id gebruik. Maar dat is waarschijnlijk omdat de gegevens niet worden meeverzonden als het bezoek niet van de mollie server komt.
Dus
Wat zit er in $post?

En is het een post request? En geen redirect omdat er www voor de URL moest?
Ik sluit mij denk ik aan bij Ivo - je gebruikt $_POST["id"], bevat deze wel een (correcte) waarde en hoe luidt deze? Bevat $payment na afloop wel een waarde of wordt er een Exception gethrowd?

Omdat dit een test betreft mag je best een en ander tijdelijk "hardcoden", vul dus gegevens in (in plaats van $_POST["id"]) waarvan je weet dat die moet kloppen, op dit moment maak je het testen van je testcase moeilijker dan strict noodzakelijk.
Ivo P op 14/11/2015 12:52:44

Dus
Wat zit er in $post?

En is het een post request? En geen redirect omdat er www voor de URL moest?


De post zou van wat ik uit de documentatie haal de payment id moeten zijn!

Your website creates a payment on the Mollie platform by calling the Mollie API with the amount, a payment description and a URL we should redirect the consumer to after the payment is made.
The API responds with the unique id and the paymentUrl for the newly created payment. Your website stores the id, links it to the customers order and redirects the consument to the paymentUrl from the Mollie API response. This is the URL to the payment screen for this specific payment.

When the payment is made Mollie will call your Webhook informing your website about the payments status change. You can configure a generic webhook in your Dashboard or define one per-payment when creating the payment.
In response to you webhook being called your website just needs to issue a 200 OK status. From that response Mollie can tell that your processing the new status was successful – for any other response we keep trying.
Processing the webhook request your website fetches the payment status using the Mollie API. This fetched status serves to mark the order as paid, trigger fulfilment and send out an email confirmation to the customer.




[size=xsmall]Toevoeging op 14/11/2015 13:20:39:[/size]

Thomas van den Heuvel op 14/11/2015 13:14:19

Ik sluit mij denk ik aan bij Ivo - je gebruikt $_POST["id"], bevat deze wel een (correcte) waarde en hoe luidt deze? Bevat $payment na afloop wel een waarde of wordt er een Exception gethrowd?

Omdat dit een test betreft mag je best een en ander tijdelijk "hardcoden", vul dus gegevens in (in plaats van $_POST["id"]) waarvan je weet dat die moet kloppen, op dit moment maak je het testen van je testcase moeilijker dan strict noodzakelijk.


Ik moet je melden dat ik geen pro ben. En de POST methode heb ik letterlijk overgenomen van de Mollie documentatie. Ik heb ergens gelezen dat dit een "Json" Url is en de payment status zou je op de een of andere manier ook uit de url moeten kunnen halen...

Heb je de code voor het melden + weergeven van fouten toegevoegd? Indien $_POST["id"] niet bestaat zou je op zijn minst een "undefined index" melding moeten krijgen lijkt mij?

$_POST heeft alleen inhoud als je (in de vorige request) een formulier hebt verstuurd. Als je dus het bovenstaande script rechtstreeks aanroept om een betalingsstatus te controleren zal $_POST leeg zijn en roep je de API aan met een ongedefinieerde variabele...
Thomas van den Heuvel op 14/11/2015 13:30:22

Heb je de code voor het melden + weergeven van fouten toegevoegd? Indien $_POST["id"] niet bestaat zou je op zijn minst een "undefined index" melding moeten krijgen lijkt mij?

$_POST heeft alleen inhoud als je (in de vorige request) een formulier hebt verstuurd. Als je dus het bovenstaande script rechtstreeks aanroept om een betalingsstatus te controleren zal $_POST leeg zijn en roep je de API aan met een ongedefinieerde variabele...



Ja dat heb ik gedaan. Ik krijg een warning van een lege POST. Dat klopt.

http://db6179.web42.ixl.nu/02-webhook-verification.php

Mollie post als het goed is de gegevens naar de webhookpagina. Dat is het idee wat ik hiervan heb..
"Mollie post als het goed is de gegevens naar de webhookpagina."

Precies. Maar aangezien het niet goed is, is dus de vraag wat er wél in zit.

Gebruik bijvoorbeeld print_r om de inhoud van $post te achterhalen, en mail dat aan jezelf of schrijf het in een file

Allereerst, die meldingen:
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/wehlroma/domains/db6179.web42.ixl.nu/public_html/connection2.php on line 6

Notice: Undefined index: id in /home/wehlroma/domains/db6179.web42.ixl.nu/public_html/02-webhook-verification.php on line 25
API call failed: Invalid payment ID: ''. A payment ID should start with 'tr_'.

Die zul je moeten repareren.

Vervolgens, bestudeer dit plaatje nogmaals. Mollie roept de webhook aan als reactie op (de afhandeling van) een betaling(sverzoek) (als reactie op een statuswijziging dus), je kunt hier niet zelf de draad tussendoor oppakken door zelf de webhook aan te roepen (behalve als test dan wellicht) - dat doet Mollie.

Je moet de webhook call zien als een handshake op de achtergrond tussen Mollie en jouw website, normaal "zie" je hier niets van, enkel het resultaat. Dat staat ook in stap 4:
In response to you webhook being called your website just needs to issue a 200 OK status. From that response Mollie can tell that your processing the new status was successful – for any other response we keep trying.

Ook staat bij de documentatie van "get payment" waar je eerder naar linkte:
Please note: we call your webhook when the payment status changes, so there's no need to poll this endpoint for status changes.

Probeer dus eerst even goed te doorgronden hoe de "flow" is.
Ivo P op 14/11/2015 14:44:15

"Mollie post als het goed is de gegevens naar de webhookpagina."

Precies. Maar aangezien het niet goed is, is dus de vraag wat er wél in zit.

Gebruik bijvoorbeeld print_r om de inhoud van $post te achterhalen, en mail dat aan jezelf of schrijf het in een file




Bedankt voor je hulp



[size=xsmall]Toevoeging op 14/11/2015 16:11:57:[/size]

Thomas van den Heuvel op 14/11/2015 15:53:48

Allereerst, die meldingen:
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/wehlroma/domains/db6179.web42.ixl.nu/public_html/connection2.php on line 6

Notice: Undefined index: id in /home/wehlroma/domains/db6179.web42.ixl.nu/public_html/02-webhook-verification.php on line 25
API call failed: Invalid payment ID: ''. A payment ID should start with 'tr_'.

Die zul je moeten repareren.

Vervolgens, bestudeer dit plaatje nogmaals. Mollie roept de webhook aan als reactie op (de afhandeling van) een betaling(sverzoek) (als reactie op een statuswijziging dus), je kunt hier niet zelf de draad tussendoor oppakken door zelf de webhook aan te roepen (behalve als test dan wellicht) - dat doet Mollie.

Je moet de webhook call zien als een handshake op de achtergrond tussen Mollie en jouw website, normaal "zie" je hier niets van, enkel het resultaat. Dat staat ook in stap 4:
In response to you webhook being called your website just needs to issue a 200 OK status. From that response Mollie can tell that your processing the new status was successful – for any other response we keep trying.

Ook staat bij de documentatie van "get payment" waar je eerder naar linkte:
Please note: we call your webhook when the payment status changes, so there's no need to poll this endpoint for status changes.

Probeer dus eerst even goed te doorgronden hoe de "flow" is.



Het probleem is verholpen. Hartstikke bedankt voor jullie tijd! Ik zal jullie maar uitleggen wat er fout ging. (Dit was een heel stomme fout die mij 3 dagen heeft gekost) Bij het aanvragen van de payment gebruikte ik de test_key van een andere website. Dus vandaar dat ik bij het aanvragen van de status geen resultaat kreeg.

Voor iedere beginner die in het vervolg nog op zoek is naar hoe je dit script precies moet gebruiken. Ik wijzig nu het script in de openingspost naar de situatie hoe het voor mij werkt. Veel succes

Succes

Reageren