搜索插件、代码仓与 APP 分类

GitHub 代码仓PurpleSoftSrl/sumup_flutter_plugin

sumup_flutter_plugin

一个用于使用 SumUp SDK 的 Flutter 包装器。通过此插件,您的应用可以轻松连接到 SumUp 终端,登录并接收 Android 和 iOS 上的信用卡支付。

sumup_flutter_plugin 项目封面
星标
21
复刻
27
最近推送(UTC)
2026年8月31日
项目状态
未归档

原始 README

以下为英文项目原文快照,最新内容请访问 GitHub。

sumup

pub package likes popularity pub points

A Flutter plugin for the SumUp SDK. Supports card reader and Tap-to-Pay payments on Android and iOS.

Partner Links

Support this project by purchasing SumUp terminals through our affiliate links for your country:

Prerequisites

  1. Registered for a merchant account via SumUp's country websites (or received a test account).
  2. Received a SumUp card terminal: Solo, Air, Air Lite, PIN+ terminal, Chip & Signature reader, or SumUp Air Register.
  3. Requested an Affiliate (Access) Key and registered your application ID via the SumUp Dashboard.
  4. Flutter 3.44+ and Dart 3.12+.
  5. iOS deployment target 16.0+ and Xcode 26.2+ (iOS 16.7+ for Tap-to-Pay; 17.5+ recommended).
  6. Android minSdkVersion 26+ (30+ for Tap-to-Pay), targetSdkVersion 36, Java 17, Android Gradle Plugin 9.2.1, and Gradle 9.5.1.

Migrating from 0.14.x

Version 0.15.0 adopts the native SDK 7.x toolchains.

  • Upgrade the app to Flutter 3.44+ / Dart 3.12+. SumUp Android SDK 7.1 requires Kotlin 2.4.0, while Flutter 3.44 still needs its temporary AGP 9 compatibility mode for this explicit KGP version. In the host app's android/gradle.properties, set:
    android.builtInKotlin=false
    android.newDsl=false
    
    Declare org.jetbrains.kotlin.android version 2.4.0 with apply false in android/settings.gradle:
    plugins {
        id "org.jetbrains.kotlin.android" version "2.4.0" apply false
    }
    
    Then apply it in android/app/build.gradle:
    plugins {
        id "org.jetbrains.kotlin.android"
    }
    
    Flutter 3.44 reports this legacy-KGP path as temporary; keep the two compatibility flags until Flutter can use the vendor-required Kotlin version through AGP's built-in Kotlin integration.
  • Compile and target Android API 36 with Java 17, AGP 9.2.1, and Gradle 9.5.1.
  • Keep Android minSdk 26 for card-reader-only apps. Configuring Tap-to-Pay credentials enables the TTP implementation; the host app must then also set minSdk to 30.
  • Use an iOS 16 deployment target with Xcode 26.2 or later. Swift Package Manager is recommended; SumUp will stop publishing new CocoaPods SDK releases after October 31, 2026.

Android rollback warning: after an app has initialized SumUp Android SDK 7.1.0, downgrading that installation to a version backed by an older native SDK is not supported. Validate the migration with a sandbox merchant and use a staged rollout.

iOS rollback warning: before downgrading from SumUp iOS SDK 7.1.2, upload all pending Offline Payments. If a downgrade is unavoidable, upload them first, delete the app, and then install the version backed by the older SDK.

Installing

Add sumup to your pubspec.yaml:

dependencies:
  sumup:

Import sumup:

import 'package:sumup/sumup.dart';

Getting Started

// 1. Initialise the SDK with your Affiliate Key
await Sumup.init(affiliateKey);

// 2. Log in — either interactively or with an OAuth token
await Sumup.login();
// or
await Sumup.loginWithToken(token);

// 3. (Optional) Ask the user to pick / configure a card reader
await Sumup.openSettings();

// 4. Optionally warm up the reader before checkout
await Sumup.prepareForCheckout();

// 5. Run a checkout
var payment = SumupPayment(
    title: 'Coffee',
    total: 3.50,
    currency: 'EUR',
    foreignTransactionId: '', // leave empty to auto-generate a unique ID
    saleItemsCount: 1,
    skipSuccessScreen: false,
    tip: 0.0,
);

var checkout = await Sumup.checkout(SumupPaymentRequest(payment));
// checkout.success          — bool
// checkout.transactionCode  — String
// checkout.amount           — double (not available on Android Tap-to-Pay)
// checkout.currency         — String (not available on Android Tap-to-Pay)
// checkout.products         — List<SumupProduct>; iOS and Android card reader only
// checkout.merchantCode     — String; Android Tap-to-Pay only
// checkout.cardScheme       — String; Android Tap-to-Pay only
// checkout.errors           — String; non-null when success is false

Available APIs

Sumup.init(affiliateKey);

Sumup.login();
Sumup.loginWithToken(token);

Sumup.isLoggedIn;
Sumup.merchant;

Sumup.openSettings();
Sumup.prepareForCheckout();
Sumup.isTipOnCardReaderAvailable;
Sumup.isCardTypeRequired;       // iOS only
Sumup.isCheckoutInProgress;     // iOS only

// Card reader checkout
Sumup.checkout(SumupPaymentRequest(payment));

// Tap-to-Pay checkout
Sumup.checkout(SumupPaymentRequest(payment, paymentMethod: PaymentMethod.tapToPay));
Sumup.checkTapToPayAvailability();  // → TapToPayAvailabilityResult
Sumup.presentTapToPayActivation();  // iOS only; no-op on Android

Sumup.logout();

Tap-to-Pay (TTP)

Accept contactless payments directly on compatible smartphones, without any additional hardware.

iOS

Requirements:

  • iPhone XS or later, iOS 16.7+ (17.5+ recommended); iPad is not supported
  • Entitlement com.apple.developer.proximity-reader.payment.acceptance added to your project (requires approval from Apple)
  • See Apple's HIG for Tap to Pay on iPhone

Setup:

  1. Log in with Sumup.login() or Sumup.loginWithToken().
  2. Call Sumup.checkTapToPayAvailability(). If isActivated is false, call Sumup.presentTapToPayActivation() to run the one-time activation flow.
  3. Use PaymentMethod.tapToPay in your request:
    var request = SumupPaymentRequest(payment, paymentMethod: PaymentMethod.tapToPay);
    var checkout = await Sumup.checkout(request);
    
Android

Tap-to-Pay is opt-in (since 0.14.2). The TTP SDK (com.sumup.tap-to-pay:utopia-sdk) lives in a private SumUp Maven repository. By default the plugin builds without it — no credentials, no private-repo access, no 401. The card-reader (merchant-sdk) checkout path works fully in this mode. You only need the steps below if you actually want Tap-to-Pay. (If you previously hit Could not resolve com.sumup.tap-to-pay:utopia-sdk … 401 Unauthorized, upgrade to 0.14.2+ and simply don't set the property.)

Requirements:

  • NFC-enabled physical device, Android 11 (API 30)+
  • Set the host application's minSdk to 30 when enabling Tap-to-Pay.
  • Enable core-library desugaring in the host app module, as required by Tap-to-Pay 1.1.1+:
    android {
        compileOptions {
            coreLibraryDesugaringEnabled true
        }
    }
    
    dependencies {
        coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
    }
    
  • Get Tap-to-Pay Maven credentials from SumUp (contact integration@sumup.com), then add them to your user-level ~/.gradle/gradle.properties (or pass them via -P / environment). Do not commit the credentials to the app repository. The plugin reads both credentials and automatically wires the private Maven repo and compiles the utopia-sdk dependency — you do not add it to your own build.gradle.
    SUMUP_TTP_MAVEN_USERNAME=...
    SUMUP_TTP_MAVEN_PASSWORD=...
    
    For environment-only configuration, use the names above or Gradle's standard ORG_GRADLE_PROJECT_SUMUP_TTP_MAVEN_USERNAME and ORG_GRADLE_PROJECT_SUMUP_TTP_MAVEN_PASSWORD variables.
  • SumUp sandbox merchants can test with a debuggable build. Live merchants require a non-debuggable build with USB Debugging and Developer Options disabled.

Usage:

  1. You must use Sumup.loginWithToken(accessToken) — token login is required for the TTP SDK to authenticate in the background.
  2. Use PaymentMethod.tapToPay in your request:
    var request = SumupPaymentRequest(payment, paymentMethod: PaymentMethod.tapToPay);
    var checkout = await Sumup.checkout(request);
    

Note: The Android TTP SDK does not return amount or currency in the transaction result. If you need them, query the SumUp Transactions API using checkout.transactionCode or checkout.foreignTransactionId.

PurpleSoft S.r.l. GitHub avatar
GitHub 作者

PurpleSoft S.r.l. ↗

语言KotlinDartSwiftRubyObjective-C

分类

此仓库发布的插件

使用的依赖

依赖清单 2 项

  • flutter{"sdk":"flutter"}
  • flutter_test开发依赖{"sdk":"flutter"}

如何选择适合项目的代码仓?

先按使用场景筛选,再比较项目活跃情况,最后到原始仓库核对使用要求。

  1. 通过仓库名、作者或描述搜索,再按技术分类缩小范围。
  2. 结合星标、复刻与最近推送比较项目;星标反映社区关注,不代表质量保证。
  3. 使用前在 GitHub 核对 README、许可证与 Issues。

来源与维护

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗