Klarna Checkout KCO проверить

Я пытаюсь подтвердить, что клиент старше 20 через Klarna Checkout.

У них есть встроенная функция для проверки, смотрите здесь https://developers.klarna.com/en/se/kco-v2/checkout/use-cases

Страница checkout.php выглядит следующим образом

Accept: application/vnd.klarna.checkout.aggregated-order-v2+json
Authorization: Klarna pwhcueUff0MmwLShJiBE9JHA==
Content-Type: application/vnd.klarna.checkout.aggregated-order-v2+json

{
    "purchase_country": "se",
    "purchase_currency": "sek",
    "locale": "sv-se",
    "cart": {
        "items": [
            {
                "reference": "123456789",
                "name": "Klarna t-shirt",
                "quantity": 2,
                "unit_price": 12300,
                "discount": 1000,
                "tax_rate": 2500
            },
            {
                "type": "shipping_fee",
                "reference": "SHIPPING",
                "name": "Shipping fee",
                "quantity": 1,
                "unit_price": 4900,
                "tax_rate": 2500
            }
        ]
    },
        "merchant": {
        "id": "0",
        "terms_uri": "http://example.com/terms.php",
        "checkout_uri": "https://example.com/checkout.php",
        "confirmation_uri": "https://example.com/thankyou.php?sid=123&klarna_order={checkout.order.uri}",
        "push_uri": "https://example.com/push.php?sid=123&klarna_order={checkout.order.uri}",
        "validation_uri": "https://example.com/klarna_validation.php"
    }
}

Когда клиент нажимает кнопку "купить сейчас", запускается сценарий klarna_validation.php и отправляет возврат в Klarna со статусом HTTP 202 OK или 303 SEE OTHER.

Ниже мой klarna_validation.php

<?php
    $pno = $_POST['customer']['date_of_birth'];
    $birthdate = new DateTime("$pno");
    $today     = new DateTime();
    $interval  = $today->diff($birthdate);
    $interval2 = $interval->format('%y');
    if($interval2 <= "20"){
    header("Location: https://example.com/too_young.php?$pno", true, 303);
    exit;
    } else {
    http_response_code(200);
    }
?>

По словам Кларны: запрос POST будет отправлен на адрес merchant.validation_uri. Тело запроса будет содержать информацию о текущем заказе. Структура информации о заказе идентична результату получения заказа, как вы видели при рендеринге оформления заказа.

Дело в том, что я не получаю никаких данных с $_POST['customer']['date_of_birth']; оно пустое.

Чтобы проверить, что это $_POST['customer']['date_of_birth']; пусто, я включил его в URL страницы too_young.php, например: too_young.php?$pno). При посадке на too_young.php $ pno пусто! (URL-адреса выглядят как too_young.php?)

У кого-нибудь есть представление о том, что я делаю неправильно?

1 ответ

Решение

Наконец-то мы получили его на работу!

Нам просто нужно было добавить этот код в проверочный файл:
$ post_data = json_decode (file_get_contents ('php: // input'), true);

Как это:

<?php

$post_data = json_decode(file_get_contents('php://input'), true);

$pno = $post_data['customer']['date_of_birth'];
$birthdate = new DateTime("$pno");
$today     = new DateTime();
$interval  = $today->diff($birthdate);
$interval2 = $interval->format('%y');
if($interval2 < "60"){
header("Location: https://example.com/too_young.php?$pno&$interval2", true, 303);
exit;
} else {
http_response_code(200);
}
?>
Другие вопросы по тегам