json omztten in php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lex moen

lex moen

05/08/2015 08:38:17
Quote Anchor link
Ik krijg van de betalingssite mollie een json reactie terug, bv
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
 
PHP hulp

PHP hulp

23/12/2024 21:34:25
 
Robert Wazzaa

Robert Wazzaa

05/08/2015 08:42:40
Quote Anchor link
$payment_id=$decoded=>id;
$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
 
- Ariën  -
Beheerder

- Ariën -

05/08/2015 08:59:56
Quote Anchor link
Je moet niet de syntax-beschrijving van php.net overnemen in je code, als je dat gedaan hebt ;).
 
Lex moen

lex moen

05/08/2015 09:53:26
Quote Anchor link
:-) Als het niet werkt ga je de gekste dingen proberen, Aar :-)

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?
 
- Ariën  -
Beheerder

- Ariën -

05/08/2015 10:01:01
Quote Anchor link
Welke data wil je precies hebben, want in $decoded heb je een array met objecten zitten die je met -> kan ophalen.
 
Lex moen

lex moen

05/08/2015 10:07:13
Quote Anchor link
in eerste instantie wil ik het ordernummer hebben (dat heb ik aan de order gehangen) en het payment_id, dat heeft mollie eraan toegekend. die twee zitten ook in die array van json. die jsonlijst wordt teruggestuurd door mollie naar een webpagina van mij (webhook.php wat een namen)die ik gemaakt heb.
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.
 
- Ariën  -
Beheerder

- Ariën -

05/08/2015 10:09:42
Quote Anchor link
$decoded->data->metadata->order_id zou als het goed is voor de order_id moeten werken.
 
Lex moen

lex moen

05/08/2015 10:29:13
Quote Anchor link
tja, ik zal wel iets stoms doen. klopt dit wel?

$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
 
- Ariën  -
Beheerder

- Ariën -

05/08/2015 10:31:59
Quote Anchor link
Als je zekerheid wilt hebben of de query klopt: Echo eens $sql, en je ziet of alle waardes het juiste zijn.
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.
 
Peter  Flos

Peter Flos

05/08/2015 12:58:19
Quote Anchor link
Ik maak ook gebruik van Mollie.

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)
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
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());
}

?>

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.
 
Lex moen

lex moen

05/08/2015 16:58:04
Quote Anchor link
ik doe iets anders fout, ik heb de webhook.php goed aangevraagd, dat moet ged zijn. wil je eens naar de hele pagina kijken? ik heb alleen ww en gebruikersnaam voor inloggen verwijderd.Ik word gillend gek

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>
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
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
 
- Ariën  -
Beheerder

- Ariën -

05/08/2015 17:09:00
Quote Anchor link
We hebben ook code-tags op het forum ;-)

Wat gaat er nu mis met deze code? Waar loop je op vast?
 
Lex moen

lex moen

05/08/2015 17:19:07
Quote Anchor link
nou, ik hb nu op meerdere plaatsen een emailreactie ingevoerd, dus als het goed of fout gaat, maar als er iets gebeurt op de pagina, dan zou ik een mail moeten krijgen. en dan kan ik verder gaan, updaten enzo. maar eerst maar eens de pagina aan de gang krijgen.

het aanroepen van de betaalwijze doe ik hiermee en dat gaat goed, ga netjes naar mollie en ideal:

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
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());
}

?>




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!
Gewijzigd op 05/08/2015 17:54:49 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

05/08/2015 17:31:14
Quote Anchor link
Dat is PHP-commentaar en zie je niet.
 
Lex moen

lex moen

05/08/2015 17:35:28
Quote Anchor link
puur om niet daarvoor op mijn kop te krijgen :-(

:-)

lex
 
- Ariën  -
Beheerder

- Ariën -

05/08/2015 17:55:59
Quote Anchor link
De location wordt wel aangeroepen verder?
 
Lex moen

lex moen

05/08/2015 21:20:16
Quote Anchor link
ja, webhook.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
)
)
);

/*
* 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)
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
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
?>

</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
 



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.