You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Klarna checkout集成流程中获取client token

Klarna支付集成client_token获取方案
  • 首先纠正思路误区:你不需要额外发起GET请求获取client_token,你在Postman中测试的POST /payments/v1/sessions创建支付会话接口的响应里,已经直接包含了所需的client_token、session_id等全部字段,直接解析该响应即可。
  • 核心实现逻辑注意事项:该POST请求必须在服务端发起,绝对不能在前端调用,因为请求头中的Basic认证密钥属于敏感信息,前端泄露会导致支付安全风险。你可以在服务端完成请求和解析后,仅把client_token传递给前端用于初始化Klarna支付组件。

不同服务端语言实现示例

Node.js(Axios)示例

const axios = require('axios');

// 构造Klarna会话请求参数,可根据实际订单信息动态替换
const requestData = {
  purchase_country: "GB",
  purchase_currency: "GBP",
  locale: "en-GB",
  order_amount: 1000,
  order_tax_amount: 0,
  order_lines: [{
    type: "physical",
    name: "Shirt",
    quantity: 1,
    unit_price: 1000,
    tax_rate: 0,
    total_amount: 1000,
    total_tax_amount: 0
  }]
};

// 发起创建会话的POST请求
const klarnaResponse = await axios.post('Klarna接口域名/payments/v1/sessions', requestData, {
  headers: {
    'Authorization': 'Basic 替换为你的实际认证密钥',
    'Content-Type': 'application/json'
  }
});

// 直接从响应中提取所需字段
const clientToken = klarnaResponse.data.client_token;
const sessionId = klarnaResponse.data.session_id;

PHP(cURL)示例

// 构造Klarna会话请求参数,可根据实际订单信息动态替换
$requestData = [
    'purchase_country' => 'GB',
    'purchase_currency' => 'GBP',
    'locale' => 'en-GB',
    'order_amount' => 1000,
    'order_tax_amount' => 0,
    'order_lines' => [
        [
            'type' => 'physical',
            'name' => 'Shirt',
            'quantity' => 1,
            'unit_price' => 1000,
            'tax_rate' => 0,
            'total_amount' => 1000,
            'total_tax_amount' => 0
        ]
    ]
];

// 初始化cURL发起请求
$ch = curl_init('Klarna接口域名/payments/v1/sessions');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestData));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic 替换为你的实际认证密钥',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$responseContent = curl_exec($ch);
curl_close($ch);

// 解析响应提取所需字段
$responseData = json_decode($responseContent, true);
$clientToken = $responseData['client_token'];
$sessionId = $responseData['session_id'];

额外注意事项

  • 测试阶段使用Klarna测试环境域名,上线后再切换为生产环境域名
  • Basic认证密钥不要硬编码在业务代码中,建议存储在环境变量或者加密的配置文件中,避免泄露
  • 建议增加异常处理逻辑,覆盖请求超时、接口返回错误、响应解析失败等异常场景
  • session_id建议存储在你的服务端订单数据中,后续支付回调、订单状态同步等操作都需要用到该字段

内容的提问来源于stack exchange,提问作者Paul Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:09:00