Как получить значения из многомерного массива PHP с декодированным JSON?(PayPal API) - PullRequest
0 голосов
/ 30 мая 2019

Я использую платежи PayPal на своем веб-сайте.

API Paypal отправляет мне детали заказа через JSON в мой скрипт success.php.

Я хочу получить каждую переменную и сохранить ее в своей базе данных.

Итак, я получаю данные JSON с:

$RAW=file_get_contents('php://input');

Данные, которые я получаю, выглядят так (print_r из $ RAW):

{"id":"XXXXXXXXXXXXX-XXXXXXXXX","event_version":"1.0","create_time":"2019-05-30T09:58:56.756Z","resource_type":"capture","resource_version":"2.0","event_type":"PAYMENT.CAPTURE.COMPLETED","summary":"Payment completed for EUR 10.0 EUR","resource":{"id":"XXXXXXXXXXXXXXXXXXX","amount":{"currency_code":"EUR","value":"10.00"},"final_capture":true,"seller_protection":{"status":"ELIGIBLE","dispute_categories":["ITEM_NOT_RECEIVED","UNAUTHORIZED_TRANSACTION"]},"seller_receivable_breakdown":{"gross_amount":{"currency_code":"EUR","value":"10.00"},"paypal_fee":{"currency_code":"EUR","value":"0.59"},"net_amount":{"currency_code":"EUR","value":"9.41"}},"status":"COMPLETED","create_time":"2019-05-30T09:58:52Z","update_time":"2019-05-30T09:58:52Z","links":[{"href":"https://api.sandbox.paypal.com/v2/payments/captures/XXXXXXXXXXXXXXX","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v2/payments/captures/XXXXXXXXXXXXX/refund","rel":"refund","method":"POST"},{"href":"https://api.sandbox.paypal.com/v2/checkout/orders/XXXXXXXXXXXXXX","rel":"up","method":"GET"}]},"links":[{"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks-events/XXXXXXXXXXXXX-XXXXXXXXXXX","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks-events/XXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX/resend","rel":"resend","method":"POST"}]}

Я декодирую его в массиве с помощью:

$response=json_decode($RAW, true);

Я получаю этот массив (print_r из $ response):

Array
(
    [id] => XXXXXXXXXXX-XXXXXXXXXX
    [event_version] => 1.0
    [create_time] => 2019-05-30T09:58:56.756Z
    [resource_type] => capture
    [resource_version] => 2.0
    [event_type] => PAYMENT.CAPTURE.COMPLETED
    [summary] => Payment completed for EUR 10.0 EUR
    [resource] => Array
        (
            [id] => XXXXXXXXXXXXX
            [amount] => Array
                (
                    [currency_code] => EUR
                    [value] => 10.00
                )

            [final_capture] => 1
            [seller_protection] => Array
                (
                    [status] => ELIGIBLE
                    [dispute_categories] => Array
                        (
                            [0] => ITEM_NOT_RECEIVED
                            [1] => UNAUTHORIZED_TRANSACTION
                        )

                )

            [seller_receivable_breakdown] => Array
                (
                    [gross_amount] => Array
                        (
                            [currency_code] => EUR
                            [value] => 10.00
                        )

                    [paypal_fee] => Array
                        (
                            [currency_code] => EUR
                            [value] => 0.59
                        )

                    [net_amount] => Array
                        (
                            [currency_code] => EUR
                            [value] => 9.41
                        )

                )

            [status] => COMPLETED
            [create_time] => 2019-05-30T09:58:52Z
            [update_time] => 2019-05-30T09:58:52Z
            [links] => Array
                (
                    [0] => Array
                        (
                            [href] => https://api.sandbox.paypal.com/v2/payments/captures/XXXXXXXXXXX
                            [rel] => self
                            [method] => GET
                        )

                    [1] => Array
                        (
                            [href] => https://api.sandbox.paypal.com/v2/payments/captures/XXXXXXXXXXXX/refund
                            [rel] => refund
                            [method] => POST
                        )

                    [2] => Array
                        (
                            [href] => https://api.sandbox.paypal.com/v2/checkout/orders/XXXXXXXXXXXXXXX
                            [rel] => up
                            [method] => GET
                        )

                )

        )
    [links] => Array
        (
            [0] => Array
                (
                    [href] => https://api.sandbox.paypal.com/v1/notifications/webhooks-events/XXXXXXXXX-XXXXXX
                    [rel] => self
                    [method] => GET
                )

            [1] => Array
                (
                    [href] => https://api.sandbox.paypal.com/v1/notifications/webhooks-events/XXXXXXX-XXXXXXXXX/resend
                    [rel] => resend
                    [method] => POST
                )

        )

)

Но когда я пытаюсь вставить его в базу данных:

<?php
$RAW=file_get_contents('php://input');
$response=json_decode($RAW, true);

$sqluser="xxxxxxx";
$sqlpass="xxxx";
$database="xxxxxxxx";

$query="INSERT INTO testpaypal(

        webhookId,
        event_version,
        create_time,
        resource_type,
        resource_version,
        event_type,
        summary,
        resource__id,
        resource__amount__currency_code,
        resource__amount__value,
        resource__final_capture,
        resource__seller_protection__status,
        resource__seller_protection__dispute_categories__1,
        resource__seller_protection__dispute_categories__2,
        resource__seller_receivable__gross_amount__currency_code,
        resource__seller_receivable__gross_amount__value,
        resource__seller_receivable__paypal_fee__currency_code,
        resource__seller_receivable__paypal_fee__value,
        resource__seller_receivable__net_amount__currency_code,
        resource__seller_receivable__net_amount__value,
        resource__status,
        resource__create_time,
        resource__update_time,
        resource__links__href1,
        resource__links__rel1,
        resource__links__method1,
        resource__links__href2,
        resource__links__rel2,
        resource__links__method2,
        resource__links__href3,
        resource__links__rel3,
        resource__links__method3,
        links__href1,
        links__rel1,
        links__method1,
        links__href2,
        links__rel2,
        links__method2
                                        )
                                VALUES(
        $response[id],
        $response[event_version],
        $response[create_time],
        $response[resource_type],
        $response[resource_version],
        $response[event_type],
        $response[summary],
        $response[resource][id],
        $response[resource][amount][currency_code],
        $response[resource][amount][value],
        $response[resource][final_capture],
        $response[resource][seller_protection][status],
        $response[resource][seller_protection][dispute_categories][0],
        $response[resource][seller_protection][dispute_categories][1],
        $response[resource][seller_receivable_breakdown][gross_amount][currency_code],
        $response[resource][seller_receivable_breakdown][gross_amount][value],
        $response[resource][seller_receivable_breakdown][paypal_fee][currency_code],
        $response[resource][seller_receivable_breakdown][paypal_fee][value],
        $response[resource][seller_receivable_breakdown][net_amount][currency_code],
        $response[resource][seller_receivable_breakdown][net_amount][value],
        $response[resource][status],
        $response[resource][create_time],
        $response[resource][update_time],
        $response[resource][links][0][href],
        $response[resource][links][0][rel],
        $response[resource][links][0][method],
        $response[resource][links][1][href],
        $response[resource][links][1][rel],
        $response[resource][links][1][method],
        $response[resource][links][2][href],
        $response[resource][links][2][rel],
        $response[resource][links][2][method],
        $response[links][0][href],
        $response[links][0][rel],
        $response[links][0][method],
        $response[links][1]href],
        $response[links][1][rel],
        $response[links][1][method]
                                        );";

try { $db = new PDO("mysql:host=sqlserver;dbname=$database", $sqluser, $sqlpass); }
catch(Exception $e) { echo 'Error : '.$e->getMessage().''; echo 'N° : '.$e->getCode(); }

$result = $db->query($query);

file_put_contents("post.log", print_r($_POST, true));
file_put_contents("get.log", print_r($_GET, true));
file_put_contents("RAW.log", print_r($RAW, true));
file_put_contents("array.log", print_r($response, true));

?>

Я получаю это предупреждение:

log PHP Примечание: преобразование массива в строку в /xxxxxxxxxxxxxxxxxxxxxxxx/success.php в строке 57 Примечание PHP: Массив преобразование в строку в /xxxxxxxxxxxxxxxxxxxxxxxx/success.php на линии 58 Примечание PHP: преобразование массива в строку в /xxxxxxxxxxxxxxxxxxxxxxxx/success.php в строке 59 Примечание PHP: Массив преобразование в строку в /xxxxxxxxxxxxxxxxxxxxxxxx/success.php на линии 60 Примечание PHP: преобразование массива в строку в /xxxxxxxxxxxxxxxxxxxxxxxx/success.php в строке 61 [...] Примечание PHP: Преобразование массива в строку в /xxxxxxxxxxxxxxxxxxxxxxxx/success.php on линия 87

и ничего не вставляется.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Я нашел свою проблему:

В моем объявлении запроса отсутствовали несколько точек, простые и двойные кавычки:

$requete="INSERT INTO xxxxxxxxx.testpaypal(

        webhookId,
        event_version,
        create_time,
        resource_type,
        resource_version,
        event_type,
        summary,
        resource__id,
        resource__amount__currency_code,
        resource__amount__value,
        resource__final_capture,
        resource__seller_protection__status,
        resource__seller_protection__dispute_categories__1,
        resource__seller_protection__dispute_categories__2,
        resource__seller_receivable__gross_amount__currency_code,
        resource__seller_receivable__gross_amount__value,
        resource__seller_receivable__paypal_fee__currency_code,
        resource__seller_receivable__paypal_fee__value,
        resource__seller_receivable__net_amount__currency_code,
        resource__seller_receivable__net_amount__value,
        resource__status,
        resource__create_time,
        resource__update_time,
        resource__links__href1,
        resource__links__rel1,
        resource__links__method1,
        resource__links__href2,
        resource__links__rel2,
        resource__links__method2,
        resource__links__href3,
        resource__links__rel3,
        resource__links__method3,
        links__href1,
        links__rel1,
        links__method1,
        links__href2,
        links__rel2,
        links__method2
                                        )
                                VALUES(
        '".$response['id']."',
        '".$response['event_version']."',
        '".$response['create_time']."',
        '".$response['resource_type']."',
        '".$response['resource_version']."',
        '".$response['event_type']."',
        '".$response['summary']."',
        '".$response['resource']['id']."',
        '".$response['resource']['amount']['currency_code']."',
        '".$response['resource']['amount']['value']."',
        '".$response['resource']['final_capture']."',
        '".$response['resource']['seller_protection']['status']."',
        '".$response['resource']['seller_protection']['dispute_categories']['0']."',
        '".$response['resource']['seller_protection']['dispute_categories']['1']."',
        '".$response['resource']['seller_receivable_breakdown']['gross_amount']['currency_code']."',
        '".$response['resource']['seller_receivable_breakdown']['gross_amount']['value']."',
        '".$response['resource']['seller_receivable_breakdown']['paypal_fee']['currency_code']."',
        '".$response['resource']['seller_receivable_breakdown']['paypal_fee']['value']."',
        '".$response['resource']['seller_receivable_breakdown']['net_amount']['currency_code']."',
        '".$response['resource']['seller_receivable_breakdown']['net_amount']['value']."',
        '".$response['resource']['status']."',
        '".$response['resource']['create_time']."',
        '".$response['resource']['update_time']."',
        '".$response['resource']['links']['0']['href']."',
        '".$response['resource']['links']['0']['rel']."',
        '".$response['resource']['links']['0']['method']."',
        '".$response['resource']['links']['1']['href']."',
        '".$response['resource']['links']['1']['rel']."',
        '".$response['resource']['links']['1']['method']."',
        '".$response['resource']['links']['2']['href']."',
        '".$response['resource']['links']['2']['rel']."',
        '".$response['resource']['links']['2']['method']."',
        '".$response['links']['0']['href']."',
        '".$response['links']['0']['rel']."',
        '".$response['links']['0']['method']."',
        '".$response['links']['1']['href']."',
        '".$response['links']['1']['rel']."',
        '".$response['links']['1']['method']."'
  );";

Теперь все работает, спасибо за вашу помощь!

0 голосов
/ 30 мая 2019

Я думаю, вы должны называть элементы массива следующим образом:

$ ответ [ 'резюме']

Вам не хватает кавычек

...