搜尋套件、儲存庫與 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 ↗