使用Klarna支付, 从发起付款到显示小部件到创建订单完整详细流程

Klarna是欧洲流行的一种支付方式, 支付方式有立即,以后支付,分期付款
我们通过立即支付的方式调通支付接口
klarna的文档是英文的, 语言不通和客服沟通费劲, 记录下完整调试过程, 以便后来人提高接入效率.

开始之前创建一个新的测试帐户(有测试账户的人忽略此部分)。
要创建新的测试帐户,请执行以下步骤:
klarna 测试之前

  1. 单击 Klarna Docs 导航栏中的商户门户​​按钮。
  2. 选择您的凭证所在的地区(例如,🇪🇺 欧洲)。
  3. 选择Playground作为环境。
  4. 点击注册。
  5. 输入您的电子邮件地址,然后单击注册。您将在此地址收到一封确认电子邮件。
  6. 打开确认电子邮件,然后单击激活帐户。
  7. 完成设置您的帐户:接受条款和条件。选择一个新密码。输入你的名字。登录到商家门户。
  8. 使用 Klarna 进行

付款的端到端流程包括三个主要步骤

一. 发起付款

会创建一个会话,用于识别向 Klarna 的购买。

当您的客户想要使用 Klarna 付款时,您必须打开一个付款会话并在对端点的POST请求中共享购物车详细信息。{apiURL}/payments/v1/sessions在该请求中,您还指定付款是一次性的还是经常性的。

一旦您开始付款会话,它会保持打开状态 48 小时或直到您下订单。您还可以发送单独的POST请求以取消会话。

base URL - 实时(生产)
欧洲: https://api.klarna.com/
北美: https://api-na.klarna.com/
大洋洲: https://api-oc.klarna.com/

base URL - 测试(操场)
欧洲: https://api.playground.klarna.com/
北美: https://api-na.playground.klarna.com/
大洋洲: https://api-oc.playground.klarna.com/
在这里插入图片描述

请求发送参数

{
  "intent": "buy",//一次性支付
  // "intent": "tokenize",//结帐时无需付款的定期付款
  // "intent": "buy_and_tokenize",//结帐时付款的定期付款
  "purchase_country": "US",
  "purchase_currency": "USD",
  "locale": "en-US",
  "order_amount": 10,
  "order_tax_amount": 0,
  "order_lines": [{
    "type": "physical",
    "reference": "19-402",
    "name": "Battery Power Pack",
    "quantity": 1,
    "unit_price": 10,
    "tax_rate": 0,
    "total_amount": 10,
    "total_discount_amount": 0,
    "total_tax_amount": 0,
    "image_url": "https://www.exampleobjects.com/logo.png",
    "product_url": "https://www.estore.com/products/f2a8d7e34"
  }]
}

locale Klarna 小部件上显示的信息语言。了解有关在 API 调用中使用语言环境的更多信息。
purchase_country 进行购买的国家/地区。了解有关受支持国家/地区的更多信息。
purchase_currency 向客户收取费用的货币。了解有关支持货币的更多信息。
order_amount 订单的总价格,包括税费和折扣。
order_lines 采购中订单行的详细信息。
intent 付款会话的目的。
在这里插入图片描述
成功会返回:client_token(下一步要用!)
另外要注意payment_method_categories会返回支持的付款方式pay_now pay_over_time``pay_later,
注意注意: 只有结果有返回的方式才能显示小部件!
如果得不到你期望的方式, 请检查是否配置了收款信息!!!

二. 结帐显示

Klarna 付款方式并授权购买。

2.1显示klarna小部件
本地创建一个html文件,写入下方代码(记得改client_token), 保存浏览器打开


 <script src="https://x.klarnacdn.net/kp/lib/v1/api.js" async></script>
 <script>
   window.klarnaAsyncCallback = function() {
     Klarna.Payments.init({
       client_token: "上一步返回的client_token",
     });

     Klarna.Payments.load({
         container: "#klarna-payments-container1",
         payment_method_category: "pay_now",
       },
       function(res) {
       // 成功会返回 {show_form: true}
         console.log(res);
         console.debug(res);
       }
     );
  </script>

浏览器打开页面已经生成小部件
在这里插入图片描述 如果得不到你期望的小部件, 请检查是否配置了收款信息!!!

2.2 用户开始支付
前面生成了小部件你会发现没有下一步按钮, 其实按钮是需要你自己写一个,然后调起支付动作

  <button onclick="payHanle()">确定支付</button>
  <script>
    function payHanle() {
      Klarna.Payments.authorize({
        payment_method_category: "pay_now"
      }, {
        // "purchase_country": "SE",
        // "purchase_currency": "SEK",
        // "locale": "sv-SE",
      }, function(res) {
        // 用户支付成功回调
		// authorization_token: "b4bd3423-24e3",
		// approved: true,
		// show_form: true
		if (res.approved) {
			// 用户支付成功之后调用成功接口,进入下一步创建订单
		}
      })
    }
  </script>

在这里插入图片描述
测试支付需要填写正确测试数据

测试直接借记
要从客户的角度测试直接借记支付流程,请使用 IBAN 格式的号码。例如,以下示例 IBAN 编号适用于德国的测试商店:DE1152 0513 7351 2071 0131。
测试信用卡
要从客户的角度测试卡支付流程,请在加载的 Klarna 小部件中使用以下卡详细信息:

学分号:4111 1111 1111 1111
CVC: 123
到期日期: 12/28或 MM/YY 格式的任何其他未来日期
触发3-D 安全流程的卡号:4687388888888881
身份id
Field Name Field Value
芬兰 Henkilötunnus 190122-829F
挪威 Fødselsnummer 01087000571
瑞典 Personnummer 410321-9202

漂亮国测试数据

/Privateperson.
/ApprovedDenied
Date of Birth10-07-197010-07-1970
First NameTestTest
Last NamePerson-usPerson-us
StreetAmsterdam AveAmsterdam Ave
House number509509
ApartmentApt 214Apt 214
Postal Code1002410024
CityNew YorkNew York
RegionNYNY
Phone Number31066833123106354386
Emailcustomer@email.uscustomer+denied@email.us
OTP(Random 6-digit different from 999999)123456123456

更多测试数据
更多测试地址数据

创建订单

使用上一步中的授权付款并创建订单。
要为一次性付款创建订单,请将POST请求发送到{apiUrl}/payments/v1/authorizations/{authorizationToken}/order 端点并包含authorization_token在路径中。

例如,如果authorization_token是b4bd3423-24e3,则将您的请求发送到{apiUrl}/payments/v1/authorizations/b4bd3423-24e3/order端点。
请求参数是前面创建sessions时候带的参数
在这里插入图片描述
成功之后回调下面的参数

{
    "order_id": "3eaeb557-5e30-47f8-b840-b8d987f5945d",
    "redirect_url": "https://payments.klarna.com/redirect/...",
    "fraud_status": "ACCEPTED",
    "authorized_payment_method": "invoice"
}

服务端代码

await axios({
  method: 'post',
  url: `${appConfig.klarna.baseUrl}/payments/v1/authorizations/${params.authorizationToken}/order`,
  data: {
  "intent": "buy",//一次性支付
  // "intent": "tokenize",//结帐时无需付款的定期付款
  // "intent": "buy_and_tokenize",//结帐时付款的定期付款
  "purchase_country": "US",
  "purchase_currency": "USD",
  "locale": "en-US",
  "order_amount": 10,
  "order_tax_amount": 0,
  "order_lines": [{
    "type": "physical",
    "reference": "19-402",
    "name": "Battery Power Pack",
    "quantity": 1,
    "unit_price": 10,
    "tax_rate": 0,
    "total_amount": 10,
    "total_discount_amount": 0,
    "total_tax_amount": 0,
    "image_url": "https://www.exampleobjects.com/logo.png",
    "product_url": "https://www.estore.com/products/f2a8d7e34"
  }]
},
  auth: {
    username: appConfig.klarna.authUsername,
    password: appConfig.klarna.authPassword
  },
  headers: {
    'Content-Type': 'application/json'
  },
  withCredentials: true
})
  .then(async response => {
    const data = response.data;
    console.log('支付成功回调', data);
    if (data.error_code) {
    // 失败
      return res.json(commonResult.fail());
    } else {
      return res.json(commonResult.success());
    }
  })
  .catch(error => {
    console.log(error.response);
  });

查看klarna后台订单

进入后台看到产生的订单了, 点进去能看到你传进来的商品详情
在这里插入图片描述

完成! 点赞! !

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢泽的网络日志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值