如何在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
相关产品推荐
相关产品推荐

