json omztten in php
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"totalCount": 280,
"offset": 0,
"count": 10,
"data": [
{
"id": "tr_7UhSN1zuXS",
"mode": "test",
"createdDatetime": "2014-06-05T08:29:39.0Z",
"status": "open",
"expiryPeriod": "PT15M",
"amount": 10.00,
"description": "My first payment",
"metadata": {
"order_id": "12345"
},
"locale": "nl",
"profileId": "pfl_QkEhN94Ba",
"links": {
"redirectUrl": "https://webshop.example.org/order/12345/"
}
},
{ ... },
{ ... }
],
"links": {
"first": "https://api.mollie.nl/v1/payments?count=10&offset=0",
"previous": null,
"next": "https://api.mollie.nl/v1/payments?count=10&offset=10",
"last": "https://api.mollie.nl/v1/payments?count=10&offset=270"
}
}
nu moet ik dat parsen in php, deze array in een variabele. maar dat wil niet zo goed
ik heb geprobeerd
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
$decoded = json_decode($json);
var_dump($decoded);
$payment_id=$decoded=>id;
$order_id=$decoded=>metadata=>order_id;
hoe moet het wel?
lex
$order_id=$decoded=>metadata=>order_id;
meot worden
$payment_id = $decoded->id;
$order_id = $decoded->metadata->order_id;
Gewijzigd op 05/08/2015 08:42:55 door Robert Wazzaa
Je moet niet de syntax-beschrijving van php.net overnemen in je code, als je dat gedaan hebt ;).
ik heb nu
$decoded = json_decode($json);
var_dump($decoded);
$payment_id = $decoded->id;
$order_id = $decoded->metadata->order_id;
maar ik denk dat ik nog iets moet doen om de json variabelen in een $json te krijgen. wat commando moet ik daarvoor gebruiken?
Welke data wil je precies hebben, want in $decoded heb je een array met objecten zitten die je met -> kan ophalen.
die jsonlijst moet ik dan in een phparray zien te krijgen en dan kan ik daar de interessante gegevens weer uithalen, is het idee.
de order_id heb ik in een mysql tabel gezet en dan kan ik in die rij het payment_id erbij updaten, zodat ik de reactie van mollie gekoppeld heb aan mijn order.
wat mollie mij opstuurt staat hierboven in het begin, dus ondrandere het nummer wat zij eraan gehangen hebben en mijn order_id.
$decoded->data->metadata->order_id zou als het goed is voor de order_id moeten werken.
$sql = "UPDATE betaling SET payment_id=$payment_id WHERE timestamp=$order_id";
$result = mysql_query($sql) or die (mysql_error());
payment_id en timestamp zijn velden in de tabel betaling. Ik ben verbonden, ik gebruik de timestamp als order_id
Verder is or die() als foutafhandeling smerig, en zou ik voor dergelijke queries voor betalingen transactions in MySQL gebruiken. Je wilt immers niet dat door een foutje een betaling half geregistreerd wordt in de database.
Wat je het beste kunt doen bij de Webhook URL is het volgende script gebruiken, hier zit alle informatie in (exclusief je eigen meegegeven metadata):
(P.S. download EERST de Mollie API van Github: https://github.com/mollie/mollie-api-php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
// INCLUDE CONNECTIE
try
{
// INCLUDE MOLLIE, ZIE GITHUB LINK
include "mollie/examples/initialize.php";
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;
$Mode = $payment->mode;
$ID = $payment->id;
$CrDate = $payment->createdDatetime;
$PDate = $payment->paidDatetime;
$CaDate = $payment->cancelledDatetime;
$EDate = $payment->expiredDatetime;
$Amount = $payment->amount;
$Description = $payment->description;
$Method = $payment->method;
$Details_Name = $payment->details->consumerName;
$Links = $payment->links->redirectUrl;
$Details_Account = $payment->details->consumerAccount;
// Update HIER je order, niet in het isPaid() deel, want stel, een betaling is geannuleerd (cancelled), dan wil je die ook updaten.
if ($payment->isPaid() == TRUE)
{
// Wat je hier kunt doen is jezelf, je leverancier en/of je klant mailen
}
elseif ($payment->isOpen() == FALSE)
{
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
?>
// INCLUDE CONNECTIE
try
{
// INCLUDE MOLLIE, ZIE GITHUB LINK
include "mollie/examples/initialize.php";
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;
$Mode = $payment->mode;
$ID = $payment->id;
$CrDate = $payment->createdDatetime;
$PDate = $payment->paidDatetime;
$CaDate = $payment->cancelledDatetime;
$EDate = $payment->expiredDatetime;
$Amount = $payment->amount;
$Description = $payment->description;
$Method = $payment->method;
$Details_Name = $payment->details->consumerName;
$Links = $payment->links->redirectUrl;
$Details_Account = $payment->details->consumerAccount;
// Update HIER je order, niet in het isPaid() deel, want stel, een betaling is geannuleerd (cancelled), dan wil je die ook updaten.
if ($payment->isPaid() == TRUE)
{
// Wat je hier kunt doen is jezelf, je leverancier en/of je klant mailen
}
elseif ($payment->isOpen() == FALSE)
{
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
?>
Wat ik je aanraad, is om via de functie error_log (http://php.net/manual/en/function.error-log.php) jezelf te emailen bij een fout (in het catch deel), zodat je weet wat er mis gaat als er een betaling niet gewijzigd kan worden. Zo kan je achteraf zien wat de fout is geweest.
Hopelijk heb je er wat aan.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
$loginstring = "";
$host = "localhost";
$servermelding = "Helaas kan op dit moment geen verbinding met de database worden gemaakt, probeer het later nog eens";
$database = "algen23_crowd";
$user="";
$password = "";
$t = @mysql_connect ($host, $user, $password) or die ($servermelding); mysql_select_db($database);
// INCLUDE CONNECTIE
try
{
// INCLUDE MOLLIE, ZIE GITHUB LINK
require_once 'Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_sHkWPVSxt4QNuWs5p8FNpUygNnhtzf');
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;
$Mode = $payment->mode;
$ID = $payment->id;
$CrDate = $payment->createdDatetime;
$PDate = $payment->paidDatetime;
$CaDate = $payment->cancelledDatetime;
$EDate = $payment->expiredDatetime;
$Amount = $payment->amount;
$Description = $payment->description;
$Method = $payment->method;
$Details_Name = $payment->details->consumerName;
$Links = $payment->links->redirectUrl;
$Details_Account = $payment->details->consumerAccount;
// Update HIER je order, niet in het isPaid() deel, want stel, een betaling is geannuleerd (cancelled), dan wil je die ook updaten.
if ($payment->isPaid() == TRUE)
{
// Wat je hier kunt doen is jezelf, je leverancier en/of je klant mailen
$to = '[email protected]';
$from = 'From: betaalwebhookpagina';
$subject = 'succes';
$message = 'zo gaat i goed';
mail($to, $subject, $message, $from);
}
elseif ($payment->isOpen() == FALSE)
{
$to = '[email protected]';
$from = 'From: betaalwebhookpagina';
$subject = 'nee';
$message = 'zo gaat i slecht';
mail($to, $subject, $message, $from);
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
error_log("Big trouble!", 1,
"[email protected]");
}
Response
HTTP/1.1 200 OK
$loginstring = "";
$host = "localhost";
$servermelding = "Helaas kan op dit moment geen verbinding met de database worden gemaakt, probeer het later nog eens";
$database = "algen23_crowd";
$user="";
$password = "";
$t = @mysql_connect ($host, $user, $password) or die ($servermelding); mysql_select_db($database);
// INCLUDE CONNECTIE
try
{
// INCLUDE MOLLIE, ZIE GITHUB LINK
require_once 'Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_sHkWPVSxt4QNuWs5p8FNpUygNnhtzf');
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;
$Mode = $payment->mode;
$ID = $payment->id;
$CrDate = $payment->createdDatetime;
$PDate = $payment->paidDatetime;
$CaDate = $payment->cancelledDatetime;
$EDate = $payment->expiredDatetime;
$Amount = $payment->amount;
$Description = $payment->description;
$Method = $payment->method;
$Details_Name = $payment->details->consumerName;
$Links = $payment->links->redirectUrl;
$Details_Account = $payment->details->consumerAccount;
// Update HIER je order, niet in het isPaid() deel, want stel, een betaling is geannuleerd (cancelled), dan wil je die ook updaten.
if ($payment->isPaid() == TRUE)
{
// Wat je hier kunt doen is jezelf, je leverancier en/of je klant mailen
$to = '[email protected]';
$from = 'From: betaalwebhookpagina';
$subject = 'succes';
$message = 'zo gaat i goed';
mail($to, $subject, $message, $from);
}
elseif ($payment->isOpen() == FALSE)
{
$to = '[email protected]';
$from = 'From: betaalwebhookpagina';
$subject = 'nee';
$message = 'zo gaat i slecht';
mail($to, $subject, $message, $from);
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
error_log("Big trouble!", 1,
"[email protected]");
}
Response
HTTP/1.1 200 OK
Wat gaat er nu mis met deze code? Waar loop je op vast?
het aanroepen van de betaalwijze doe ik hiermee en dat gaat goed, ga netjes naar mollie en ideal:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
require_once 'Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_sHkWPVSxt4QNuWs5p8FNpUygNnhtzf');
try
{
$payment = $mollie->payments->create(
array(
'amount' => $bedrag,
'description' => 'Algenie Optie A',
'redirectUrl' => 'http://www.algenie.eu/test2/bedankt.php', 'webhookUrl'=>'http://www.algenie.eu/test2/webhook.php',
'metadata' => array(
'order_id' => $order
)
)
);
/*
ik kom misschien niet op de webook.php maar waarom dan niet?
* Send the customer off to complete the payment.
*/
header("Location: " . $payment->getPaymentUrl());
exit;
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage()) . " on field " + htmlspecialchars($e->getField());
}
?>
require_once 'Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_sHkWPVSxt4QNuWs5p8FNpUygNnhtzf');
try
{
$payment = $mollie->payments->create(
array(
'amount' => $bedrag,
'description' => 'Algenie Optie A',
'redirectUrl' => 'http://www.algenie.eu/test2/bedankt.php', 'webhookUrl'=>'http://www.algenie.eu/test2/webhook.php',
'metadata' => array(
'order_id' => $order
)
)
);
/*
ik kom misschien niet op de webook.php maar waarom dan niet?
* Send the customer off to complete the payment.
*/
header("Location: " . $payment->getPaymentUrl());
exit;
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage()) . " on field " + htmlspecialchars($e->getField());
}
?>
Toevoeging op 05/08/2015 17:20:43:
dat stukje "ik kom misschien...." had onderaan moeten staan, staat niet op de site
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 05/08/2015 17:54:49 door - Ariën -
Dat is PHP-commentaar en zie je niet.
:-)
lex
De location wordt wel aangeroepen verder?
require_once 'Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_sHkWPVSxt4QNuWs5p8FNpUygNnhtzf');
try
{
$payment = $mollie->payments->create(
array(
'amount' => $bedrag,
'description' => 'Algenie Optie A',
'redirectUrl' => 'http://www.algenie.eu/test2/bedankt.php', 'webhookUrl'=>'http://www.algenie.eu/test2/webhook.php',
'metadata' => array(
'order_id' => $order
)
)
);
/*
* Send the customer off to complete the payment.
*/
header("Location: " . $payment->getPaymentUrl());
exit;
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage()) . " on field " + htmlspecialchars($e->getField());
}
Toevoeging op 05/08/2015 23:23:23:
Ik heb in een foutenlogboek gezien dat het niet lukt om webhook.php aan te roepen:
Rapportage fouten logboek
Filter op URL:
Toon hele lijst
URL Type Start / Laatste Pogingen
http://www.algenie.eu/test2/webhook.php
id=tr_qAZQQ9Ugyk api 05-08-2015 16:54
05-08-2015 21:22 10x rotate clockwise
http://www.algenie.eu/test2/webhook.php
id=tr_FHq5d2krp3 api 05-08-2015 16:53
05-08-2015 21:21 10x rotate clockwise
webhook.php staat in de map test2
dus, lijkt me, moet de fout in de inhoud van webhook.php zitten
ik hb na het decoderen van de json string een updateopdracht gezet van een getalletje op een plaats, dus geen uitkomsten van de string gebruikt en dat werkt niet. de fout moet dan daarboven zitten
misschien een puntkomma waar het niet mag? typefout? maar ik zie de fout niet
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
$loginstring = "";
$host = "localhost";
$servermelding = "Helaas kan op dit moment geen verbinding met de database worden gemaakt, probeer het later nog eens";
$database = "algen23_crowd";
$user="algen23";
$password = "8x9S7sYO";
$t = @mysql_connect ($host, $user, $password) or die ($servermelding);
// INCLUDE CONNECTIE
try
{
// INCLUDE MOLLIE, ZIE GITHUB LINK
require_once 'Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_sHkWPVSxt4QNuWs5p8FNpUygNnhtzf');
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;
$Mode = $payment->mode;
$ID = $payment->id;
$CrDate = $payment->createdDatetime;
$PDate = $payment->paidDatetime;
$CaDate = $payment->cancelledDatetime;
$EDate = $payment->expiredDatetime;
$Amount = $payment->amount;
$Description = $payment->description;
$Method = $payment->method;
$Details_Name = $payment->details->consumerName;
$Links = $payment->links->redirectUrl;
$Details_Account = $payment->details->consumerAccount;
// Update HIER je order, niet in het isPaid() deel, want stel, een betaling is geannuleerd (cancelled), dan wil je die ook updaten.
$update="update betaling set (payment_id='4555') where volgnummer='35'";
$res=mysql_query ($update);
if ($payment->isPaid() == TRUE)
{
// Wat je hier kunt doen is jezelf, je leverancier en/of je klant mailen
$to = '[email protected]';
$from = 'From: betaalwebhookpagina';
$subject = 'succes';
$message = 'zo gaat i goed';
mail($to, $subject, $message, $from);
}
elseif ($payment->isOpen() == FALSE)
{
$to = '[email protected]';
$from = 'From: betaalwebhookpagina';
$subject = 'nee';
$message = 'zo gaat i slecht';
mail($to, $subject, $message, $from);
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
error_log("Big trouble!", 1,
"[email protected]");
}
Response
HTTP/1.1 200 OK
?>
$loginstring = "";
$host = "localhost";
$servermelding = "Helaas kan op dit moment geen verbinding met de database worden gemaakt, probeer het later nog eens";
$database = "algen23_crowd";
$user="algen23";
$password = "8x9S7sYO";
$t = @mysql_connect ($host, $user, $password) or die ($servermelding);
// INCLUDE CONNECTIE
try
{
// INCLUDE MOLLIE, ZIE GITHUB LINK
require_once 'Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_sHkWPVSxt4QNuWs5p8FNpUygNnhtzf');
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;
$Mode = $payment->mode;
$ID = $payment->id;
$CrDate = $payment->createdDatetime;
$PDate = $payment->paidDatetime;
$CaDate = $payment->cancelledDatetime;
$EDate = $payment->expiredDatetime;
$Amount = $payment->amount;
$Description = $payment->description;
$Method = $payment->method;
$Details_Name = $payment->details->consumerName;
$Links = $payment->links->redirectUrl;
$Details_Account = $payment->details->consumerAccount;
// Update HIER je order, niet in het isPaid() deel, want stel, een betaling is geannuleerd (cancelled), dan wil je die ook updaten.
$update="update betaling set (payment_id='4555') where volgnummer='35'";
$res=mysql_query ($update);
if ($payment->isPaid() == TRUE)
{
// Wat je hier kunt doen is jezelf, je leverancier en/of je klant mailen
$to = '[email protected]';
$from = 'From: betaalwebhookpagina';
$subject = 'succes';
$message = 'zo gaat i goed';
mail($to, $subject, $message, $from);
}
elseif ($payment->isOpen() == FALSE)
{
$to = '[email protected]';
$from = 'From: betaalwebhookpagina';
$subject = 'nee';
$message = 'zo gaat i slecht';
mail($to, $subject, $message, $from);
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
error_log("Big trouble!", 1,
"[email protected]");
}
Response
HTTP/1.1 200 OK
?>
</body>
</html>
de info achter // staat in 1 lange zin,niet afgebroken zoals het scherm hier doet
Toevoeging op 06/08/2015 09:08:27:
HET LUKT!
geen idee waarom, maar vooral stilzetten en niet bewegen en verder gaan :-)
bedankt