Klarna Checkout KCO验证

时间:2016-05-11 10:19:12

标签: php validation klarna

我试图通过Klarna Checkout验证客户是否超过20岁。

他们有内置的验证功能,请参阅此处https://developers.klarna.com/en/se/kco-v2/checkout/use-cases#validate-checkout-order

checkout.php页面如下所示

objWorksheet.CommandButton2_Click()

当客户发现"立即购买"运行klarna_validation.php脚本,并向HTTP状态202 OK或303 SEE OTHER发送返回Klarna。

以下是我的klarna_validation.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: POST请求将被发送到merchant.validation_uri。请求正文将包含当前订单信息。订单信息的结构与获取订单的结果相同,正如您在渲染中看到的那样。

问题是我没有获得任何数据 $ _ POST ['客户'] [' date_of_birth']; 它是空的。

要验证此 $ _ POST ['客户'] [' date_of_birth']; 是否为空,我已将其包含在too_young的网址中。 php页面,像这样(too_young.php?$ pno)。登陆too_young.php时,$ pno为空! (网址看起来像是_young.php?)

有没有人知道我做错了什么?

1 个答案:

答案 0 :(得分:2)

最后我们开始工作了!

我们只需将此代码添加到验证文件中:
$ 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);
}
?>
相关问题