Flutter支付集成插件klarna_mobile_sdk_flutter的使用

Klarna Mobile SDK Flutter 插件 #

Klarna 的 Flutter 包装器,用于 Klarna 移动 SDK。

构建状态 许可证 Developed at Klarna

寻找原生 Klarna 移动 SDK? 请查看 Klarna 移动 SDK 仓库。

寻找 React-Native Klarna 移动 SDK? 请查看 React Native Klarna 移动 SDK 仓库。

集成 #

要求 #

  • iOS 9 或更高版本。
  • Android 4.4 或更高版本。

支持的产品 #

  • ✅ Klarna Post Purchase
  • ❌ Klarna Payments
  • ❌ Klarna Checkout

Post Purchase

目前,Post Purchase 所需的凭证仅通过 Klarna 交付经理提供。如果您想测试此集成,请联系您的交付经理以获取有关 Post Purchase 的所需信息。

Klarna 移动 SDK 文档 #

SDK 概述

Flutter 依赖 #

在您的 pubspec.yaml 文件中添加 klarna_mobile_sdk_flutter 作为依赖项,根据 官方文档

使用 #

KlarnaPostPurchaseSDK

构造
参数
名称 类型 描述
eventListener KlarnaPostPurchaseEventListener 实现 PostPurchaseSDK 事件和错误回调的接口。
returnUrl String 组件用来将客户返回到应用的应用定义 URL 方案。
environment named optional KlarnaEnvironment? Post Purchase SDK 的环境。
region named optional KlarnaRegion? Post Purchase SDK 的区域。
resourceEndpoint named optional KlarnaResourceEndpoint? Post Purchase SDK 的资源云端点。
初始化

初始化新的 WebView 和 JavaScript Klarna Post Purchase 体验库。

参数
名称 类型 描述
locale String 表示用户语言环境的字符串。例如: se-SE
purchaseCountry String 表示购买国家的字符串。例如: SE
design named optional String? 表示设计 ID 的字符串。
授权请求

调用以启动 OAuth 流。

参数
名称 类型 描述
clientId String 您的应用程序的 client_id。
scope String 一组以空格分隔的范围,标识您的应用程序可以代表用户访问的资源。这些值定义了 Klarna 显示给用户的同意屏幕。
redirectUri String OAuth 服务器在用户完成授权流程后重定向用户的“位置”。该值必须与 Klarna 提供的其中一个 redirect_url 值完全匹配。
locale named optional String? 表示用户语言环境的字符串。
state named optional String? 您的应用程序在授权请求和授权服务器响应之间维护状态的一个字符串值。授权服务器会将您发送到 redirect_url 的确切值作为 URL 参数返回。
loginHint named optional String? 如果您的应用程序知道尝试验证的用户是谁,它可以使用此参数向 Klarna 的授权服务器提供提示。服务器使用提示来简化登录流程,通过预填表单中的电子邮件字段来简化登录过程。建议使用此功能,因为它将改善用户体验。
responseType named optional String? 所需的授予类型。该值必须为 "code"(请求授权代码)或 "token"(请求访问令牌,隐式授权)。默认值为 "code"。
渲染操作

加载 Klarna 小部件以进行操作。

参数
名称 类型 描述
operationToken String 与订单相关的操作令牌,从 post purchase API 返回。
locale named optional String? 表示用户语言环境的字符串。
redirectUri named optional String OAuth 服务器在用户完成授权流程后重定向用户的“位置”。该值必须与 Klarna 提供的其中一个 redirect_url 值完全匹配。
销毁

销毁任何对象,包括附属于客户端的 WebView

开发 #

开始 #

克隆存储库后,运行以下命令来设置项目。

flutter packages get

Flutter

  1. 从 Android Studio 或您首选的 Dart 支持的 IDE 打开根目录。

插件实现位于 lib 目录下,示例应用实现位于 example/lib 目录下。

Android

  1. 从 Android Studio 打开 example/android 目录。

插件实现位于 klarna_mobile_sdk_flutter/java/com.klarna.mobile.sdk.flutter/

iOS

  1. example/ios 中执行 pod install
  2. 从 XCode 打开 example/ios/Runner.xcworkspace 文件。

插件实现位于 Pods/Development Pods/klarna_mobile_sdk_flutter/../../example/ios/.symlinks/plugins/klarna_mobile_sdk_flutter/ios/Classes 内部 XCode。

构建示例应用 #

  • example 目录中执行 flutter build apk 以构建 Android 示例应用。
  • example 目录中执行 flutter build ios --no-codesign 以构建 iOS 示例应用。

支持 #

如果您在项目中使用 SDK 时遇到任何问题,或者认为 SDK 本身存在问题,请在 Github 上创建一个问题或遵循下一节中的指南报告错误。

我如何贡献? #

感谢您阅读此内容并花时间为 Klarna 移动 SDK 贡献。以下是一组指南,帮助您贡献,无论您是想报告错误、提供建议还是修改代码。

报告错误

本节将指导您提交 Klarna 移动 SDK 的错误报告。

在提交错误报告之前,请检查该问题是否已被报告过。如果您发现一个已关闭的问题,似乎描述了一个类似于您想要报告的问题,请打开一个新的问题并将原始问题链接到新问题。当您已经检查该问题尚未被报告时,请填写 所需的模板,这将帮助我们更快地解决问题。

提交错误报告

提交的错误将作为 GitHub 问题 进行跟踪。要报告错误,请创建一个问题并使用 模板 提供有关错误的信息。详细解释问题,并包含任何可能有助于维护人员重现问题的附加信息。在创建 GitHub 问题时,请确保:

  • 使用清晰且描述性的标题
  • 描述重现问题的确切步骤,尽可能提供尽可能多的细节。通常情况下,提供更多而不是更少的信息更好。
  • 描述您在遵循步骤之后观察到的行为,并精确说明该行为的问题所在。
  • 解释您期望的行为是什么,以及为什么。
  • 提供可能有助于解释您所面临问题的截图和/或屏幕录制。要对连接到 Android Studio 或模拟器的手机进行屏幕录制,请按照此处的步骤 这里。要在 iOS 上进行屏幕录制,请按照此处描述的步骤 这里
  • 在错误报告中包含相关日志,将其放在 代码块文件附件gist 中,并提供该 gist 的链接。
  • 告诉您何时开始遇到该问题。 您第一次遇到问题是什么时候,是在更新 SDK 版本之后吗?或者这个问题一直存在吗?
  • 如果问题是最近才开始发生的,请 尝试在较旧版本的 SDK 中重现它。问题不再出现的最旧 SDK 版本是什么?
  • 您能否可靠地重现问题? 如果不能,请解释问题发生频率以及通常在什么条件下发生。例如,您运行的环境。

包括您遇到问题的设备/模拟器/模拟器的详细信息:

  • 您正在使用哪个 SDK 版本?
  • 这是哪个操作系统的问题,iOS、Android 还是两者都有? 具体版本是什么?还要在问题中添加适当的标签。
  • 您是在模拟器/模拟器还是在真实设备上遇到问题?

贡献 #

在贡献之前,请阅读 Klarna 移动 SDK 文档

分支

根据您要处理的内容(错误修复或功能),前缀您将要工作的分支。创建新分支时使用以下前缀:

  • feature/ 如果分支包含新功能,例如: feature/my-shiny-feature
  • bugfix/ 如果分支包含错误修复,例如: bugfix/my-bug-fix
拉取请求

创建拉取请求时,请尽可能多地提供有关增强类型的详细信息,无论是错误修复、新功能还是其他更改。有 一个模板 可供您填写,这将使维护人员的审查过程更快。创建拉取请求时,请针对 master 分支。拉取请求应包括:

  • 一个清晰且描述性的标题
  • 问题描述 如果您正在修复错误,请附上相关问题的链接,或者 引入新功能的背景

更多关于Flutter支付集成插件klarna_mobile_sdk_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter支付集成插件klarna_mobile_sdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Klarna 是一个流行的支付解决方案,提供了多种支付方式,如分期付款、即时银行转账等。为了在 Flutter 应用中集成 Klarna 支付,你可以使用 klarna_mobile_sdk_flutter 插件。以下是如何使用该插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 klarna_mobile_sdk_flutter 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  klarna_mobile_sdk_flutter: ^1.0.0 # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 Klarna SDK

在你的 Dart 代码中,首先需要初始化 Klarna SDK。通常,你可以在应用的 main 函数或某个初始化函数中进行初始化。

import 'package:klarna_mobile_sdk_flutter/klarna_mobile_sdk_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Klarna SDK
  await KlarnaMobileSdkFlutter.initialize();
  
  runApp(MyApp());
}

3. 创建 Klarna 支付组件

接下来,你可以创建一个 Klarna 支付组件。Klarna 提供了 KlarnaPaymentView 来嵌入支付界面。

import 'package:flutter/material.dart';
import 'package:klarna_mobile_sdk_flutter/klarna_mobile_sdk_flutter.dart';

class KlarnaPaymentScreen extends StatefulWidget {
  @override
  _KlarnaPaymentScreenState createState() => _KlarnaPaymentScreenState();
}

class _KlarnaPaymentScreenState extends State<KlarnaPaymentScreen> {
  late KlarnaPaymentView _klarnaPaymentView;

  @override
  void initState() {
    super.initState();
    
    // 创建 KlarnaPaymentView
    _klarnaPaymentView = KlarnaPaymentView(
      clientToken: 'YOUR_CLIENT_TOKEN', // 从 Klarna 获取的 client token
      returnUrl: 'your-app://return-url', // 支付完成后返回的 URL
      onEvent: (event) {
        // 处理支付事件
        print('Klarna Payment Event: ${event.name}');
        if (event.name == 'authorized') {
          // 支付成功
          print('Payment authorized!');
        } else if (event.name == 'error') {
          // 支付失败
          print('Payment error: ${event.body}');
        }
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Klarna Payment'),
      ),
      body: Center(
        child: _klarnaPaymentView, // 嵌入支付界面
      ),
    );
  }
}

4. 处理支付结果

onEvent 回调中,你可以处理支付结果。event.name 会返回支付的状态,例如 authorized 表示支付成功,error 表示支付失败。

5. 启动支付流程

当用户点击支付按钮时,你可以启动 Klarna 支付流程。通常,Klarna 会展示一个支付界面,用户可以在其中选择支付方式并完成支付。

ElevatedButton(
  onPressed: () {
    // 启动支付流程
    _klarnaPaymentView.authorize();
  },
  child: Text('Pay with Klarna'),
)

6. 处理返回 URL

在支付完成后,Klarna 会重定向到你在 returnUrl 中指定的 URL。你需要在应用中处理这个 URL,以便在支付完成后进行相应的操作。

你可以使用 uni_links 插件来处理深度链接:

dependencies:
  uni_links: ^0.5.1

然后在 main.dart 中处理链接:

import 'package:uni_links/uni_links.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Klarna SDK
  await KlarnaMobileSdkFlutter.initialize();
  
  // 处理深度链接
  getInitialLink().then((String? link) {
    if (link != null) {
      // 处理返回的链接
      print('Return URL: $link');
    }
  });

  runApp(MyApp());
}

7. 测试与发布

在开发过程中,你可以使用 Klarna 提供的测试环境进行测试。确保在发布应用时切换到生产环境,并使用正确的 clientTokenreturnUrl

8. 错误处理

在支付过程中,可能会遇到各种错误。确保你妥善处理这些错误,并向用户提供友好的错误提示。

if (event.name == 'error') {
  // 支付失败
  print('Payment error: ${event.body}');
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('Payment failed: ${event.body}')),
  );
}
回到顶部