mek-packages's People
Forkers
markusramsak vitaly-v kuamanet yatinj30 manuinnz sumgroup-ltd kekko7072 aryan-bb erolisdev jacopofranza build-online mikekael stephanwaltersmek-packages's Issues
Error message given by stripe during payment verification
Hi @BreX900
No matter what reason the payment fails, PlatformException
is constantly thrown and it does not contain the error message coming from stripe.
I think it is already stated in the codes that this part is not fully verified. As a result of my tests, while it works smoothly on Android devices, we cannot catch the error on iOS devices.
![Screenshot 2024-02-14 at 14 58 26](https://private-user-images.githubusercontent.com/139364224/304725193-54a1b453-f078-4aba-814f-64bb4f2ee36a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQwOTMyMjgsIm5iZiI6MTcyNDA5MjkyOCwicGF0aCI6Ii8xMzkzNjQyMjQvMzA0NzI1MTkzLTU0YTFiNDUzLWYwNzgtNGFiYS04MTRmLTY0YmI0ZjJlZTM2YS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgxOVQxODQyMDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hZDg2MjkwMzg5MDNkMzdhY2U2NjViODE1OWEyYTZmYjFjMWQyMzY3NGY4MGUwOGVhYzNiNGUyNDBlYTdjZjJiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.avx9j8KIfqRXV4VOE8CI-awJELTPWF0zrbyQUJAxYtg)
When I catch the error it looks like this
![Screenshot 2024-02-14 at 14 54 59](https://private-user-images.githubusercontent.com/139364224/304726003-36136e63-ef87-4ddb-b044-188cddd5c6fb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQwOTMyMjgsIm5iZiI6MTcyNDA5MjkyOCwicGF0aCI6Ii8xMzkzNjQyMjQvMzA0NzI2MDAzLTM2MTM2ZTYzLWVmODctNGRkYi1iMDQ0LTE4OGNkZGQ1YzZmYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgxOVQxODQyMDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mOGVjZjQ2YmJiMDVmYTUxODEyN2UzMWUxN2M2YzZhNjkyYjg0ODYxNGU3NzNjODk5OTU2MTM5NDM2MWVmNjc2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.J5NwZHp93tEp5l24HLuilbl72XM_pTHxPcg7zdkx3Ro)
I leave a simple code block so you can reproduce the error. If there is a point I missed and you can help me, I would be very happy.
Future<void> payment(
String clientSecret,
) async {
try {
// insufficient_funds
terminal?.setSimulatorConfiguration(const SimulatorConfiguration(
simulatedCard: SimulatedCard.fromTestCardNumber("4000000000009995")));
PaymentIntent? paymentIntent =
await terminal?.retrievePaymentIntent(clientSecret);
PaymentIntent? processablePaymentIntent =
await terminal?.collectPaymentMethod(paymentIntent!);
await terminal?.confirmPaymentIntent(processablePaymentIntent!);
} on TerminalException catch (e) {
print(e);
} on PlatformException catch (e) {
print(e);
} catch (e) {
print(e);
}
}
mek_stripe_terminal version : 3.2.1
flutter version : 3.16.0
The tap to pay screen cannot display decimal price?
The tap to pay screen cannot display decimal price? I have transmitted the price of 15015 but it only shows 150$ and I would like your help to show 150.15$
Wrong Android BLUETOOTH_ADMIN permission check for SDK > 30
In your TerminalPlugin.kt you have typed BLUETOOTH_ADMIN instead of BLUETOOTH_CONNECT for permission check for Android VERSION_CODES.S.
Cannot connect to BBPOS WisePad 3...
Hi @BreX900,
thanks for this library. It looks really cool! However, I'm not able to connect to my BBPOS WisePad 3. I'm using the very simple demo code from below. When using isSimulated: true
, everything works as expected. However, when isSimulated: false
, the following happens: the reader does appear in the list, when selecting it, I get the bluetooth popup and the reader now beeps and displays the bluetooth icon continuously. However, Connected to reader [...]
is never printed, the connectBluetoothReader()
method does not seem to return.
Do you have any idea what the problem could be? The properties of the reader say that there's no update available, though I don't know if this would even be set correctly before being fully connected.
Thanks in advance!
pubspec.yaml
name: pos
description: A new Flutter project.
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: '>=3.1.0 <4.0.0'
dependencies:
flutter:
sdk: flutter
mek_stripe_terminal: ^3.2.1
permission_handler: ^11.1.0
stripe: ^4.11.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
uses-material-design: true
main.dart
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:mek_stripe_terminal/mek_stripe_terminal.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:stripe/stripe.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
Terminal? stripeTerminal;
var _readers = const <Reader>[];
Stripe stripe = Stripe(
"[[redacted]]");
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextButton(
onPressed: () async {
final permissions = [
Permission.locationWhenInUse,
Permission.bluetooth,
Permission.bluetoothScan,
Permission.bluetoothConnect,
];
await permissions.request();
print("Got permissions");
},
child: const Text('1. Request Permissions')),
const Divider(),
TextButton(
onPressed: () async {
stripeTerminal = await Terminal.getInstance(
fetchToken: () async {
return await createTerminalConnectionToken();
},
);
print("Initialized Terminal");
},
child: const Text('2. Initialize Terminal'),
),
const Divider(),
TextButton(
onPressed: () async {
setState(() => _readers = const <Reader>[]);
await stripeTerminal
?.setSimulatorConfiguration(const SimulatorConfiguration());
stripeTerminal
?.discoverReaders(const BluetoothDiscoveryConfiguration(
isSimulated: false))
.listen((List<Reader> readers) {
setState(() => _readers = readers);
});
},
child: const Text('3. Discover Readers'),
),
ListView.builder(
shrinkWrap: true,
itemCount: _readers.length,
itemBuilder: (BuildContext context, int index) {
final reader = _readers[index];
return ListTile(
title: Text(reader.serialNumber),
subtitle: Text(reader.batteryStatus.toString()),
onTap: () async {
try {
print('Connecting to reader ${reader.serialNumber}...');
await stripeTerminal?.connectBluetoothReader(reader,
locationId: "[[redacted]]");
print('Connected to reader ${reader.serialNumber}');
} catch (error, stackTrace) {
print('$error\n$stackTrace');
}
},
);
},
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
Future<String> createTerminalConnectionToken() async {
try {
final terminalToken =
await stripe.client.post('/terminal/connection_tokens');
print(jsonEncode(terminalToken));
return terminalToken['secret'] as String;
} catch (error, stackTrace) {
print('$error\n$stackTrace');
rethrow;
}
}
}
PlatformException - Failed to generate key pair
Thanks for the great package!
I developed a simple demo app using this plugin. But while it works fine on Android 12 and above devices, I get the following error on an Android 11 device.
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: PlatformException(error, Failed to generate key pair, null, java.security.ProviderException: Failed to generate key pair
at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateKeystoreKeyPair(AndroidKeyStoreKeyPairGeneratorSpi.java:515)
at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateKeyPair(AndroidKeyStoreKeyPairGeneratorSpi.java:471)
at java.security.KeyPairGenerator$Delegate.generateKeyPair(KeyPairGenerator.java:727)
at java.security.KeyPairGenerator.genKeyPair(KeyPairGenerator.java:497)
at com.stripe.cots.common.compatibility.PreFlightChecks.initialize(Unknown Source:87)
at com.stripe.stripeterminal.internal.common.adapter.CotsClient.initializeKeys(Unknown Source:2)
at com.stripe.stripeterminal.internal.common.adapter.CotsAdapter.initKeystore(Unknown Source:2)
at com.stripe.stripeterminal.Terminal$Companion.initTerminal(SourceFile:3)
at com.stripe.stripeterminal.Terminal$Companion.initTerminal(SourceFile:2)
at s6.c.g(Unknown Source:109)
at t6.m1$b.b(Unknown Source:393)
at t6.m1$b.a(Unknown Source:0)
at t6.l1.a(Unknown Source:2)
at k4.j$a.a(Unknown Source:17)
at c4.c.l(Unknown Source:18)
at c4.c.m(Unknown Source:40)
at c4.c.i(Unknown Source:0)
at c4.b.run(Unknown Source:12)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7664)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.security.KeyStoreException: Unknown error
at android.security.KeyStore.getKeyStoreException(KeyStore.java:1301)
... 25 more
)
at StandardMethodCodec.decodeEnvelope(message_codecs.dart:651)
at MethodChannel._invokeMethod(platform_channel.dart:322)
at _$TerminalPlatform.init(terminal_platform.api.dart:27)
at Terminal.getInstance.<fn>(terminal.dart:52)
at _HomeViewState._initTerminal(home.dart:102)
Device informations
![Screenshot 2023-12-27 at 12 57 25](https://private-user-images.githubusercontent.com/139364224/293007966-1405c082-74c3-4252-9e31-a2f98a32e454.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQwOTMyMjgsIm5iZiI6MTcyNDA5MjkyOCwicGF0aCI6Ii8xMzkzNjQyMjQvMjkzMDA3OTY2LTE0MDVjMDgyLTc0YzMtNDI1Mi05ZTMxLWEyZjk4YTMyZTQ1NC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgxOVQxODQyMDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xODk5M2Q0YzYzN2M0MjUxOWQ1YTQ0YTEwNTM2ZTFmMThhOTM2NTk2YTRjZDE4NzZkYmU4NWYwNDc3ODYxY2Y1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.qgoRAFZfReRjoPIjBpgbrRoDFM_5i3uBLbOW9Koj_RE)
pubspec.yaml
description: A new Flutter project.
publish_to: "none"
version: 1.0.0+2
environment:
sdk: ">=3.0.0 <4.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
mek_stripe_terminal: ^3.2.0
stripe:
git:
url: https://github.com/enyo/stripe-dart
permission_handler: ^11.1.0
shared_preferences: ^2.2.2
intl: ^0.19.0
firebase_core: ^2.24.2
firebase_crashlytics: ^3.4.8
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
uses-material-design: true
project/build.gradle
buildscript {
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.1.3'
// START: FlutterFire Configuration
classpath 'com.google.gms:google-services:4.4.0'
// END: FlutterFire Configuration
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
project/app/build.gradle
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
// START: FlutterFire Configuration
apply plugin: 'com.google.gms.google-services'
// END: FlutterFire Configuration
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdk 34 // flutter.compileSdkVersion
ndkVersion flutter.ndkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.companyname.mek_test.mek_test"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion 26
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
namespace 'com.companyname.mek_test.mek_test'
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
The error occurs during the process of initializing our app's Stripe Terminal SDK.
final terminal = await Terminal.getInstance(
fetchToken: _fetchConnectionToken,
);
Future<String> _fetchConnectionToken() async {
var token = await _api.createTerminalConnectionToken();
return token;
}
Future<String> createTerminalConnectionToken() async {
try {
final terminalToken =
await _stripe.client.post('/terminal/connection_tokens');
return terminalToken['secret'] as String;
} catch (error) {
rethrow;
}
}
Flutter version: 3.16.0 (stable channel)
mek_stripe_terminal: ^3.2.0
I would like to know if there are any suggestions or updates to resolve this issue. I'm also wondering if other users are experiencing this issue and if there is a potential workaround.
discoverReaders DiscoveryMethod.internet not found readers
Terminal it's working and added to Stripe but method discoverReaders cant find BBPOS WisePOS E
someone connected WIFI terminal?
discoverReaders ios bug
discoverReaders(configuration).listen((readers) {
});
IOS After 2-3 calls it doesn’t find any more readers
on Android everything is fine
clientsecret
hi there
when create a paymentintent then clientsecret already null. how can i get clientsecret ? thanks
Some issues about update device, lost connect and reconnect
Hi @BreX900, thanks for this lib. I'm encountering a few issues while using your SDK:
Can you guide me on how to identify if an M2 device has a new update available?
To update the M2 device, we would use the function installAvailableUpdate()
, correct? After using this function, how can we listen for events that indicate the device update completion?
How can we determine which M2 device have lost connection, and what is the process for reconnecting it?
I hope you can help explain these issues I'm facing.
Thanks
unable to discover device after 2 attempt
Hy
The nearby device discovery works fine in first 2 attempt but after that it it fails to show any nearby devices.
Help
Execution failed for task ':app:minifyReleaseWithR8'
Hi,
Whenever try to build release apk that time showing error like this :
can you please help me
ERROR: Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in /home/user/StudioProjects/mek_stripe_terminal_build_gen/build/app/outputs/mapping/release/missing_rules.txt.
ERROR: R8: Missing class com.google.android.play.core.splitcompat.SplitCompatApplication (referenced from: void io.flutter.app.FlutterPlayStoreSplitApplication.() and 5 other contexts)
Missing class com.google.android.play.core.splitinstall.SplitInstallException (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.lambda$installDeferredComponent$1(int, java.lang.String, java.lang.Exception))
Missing class com.google.android.play.core.splitinstall.SplitInstallManager (referenced from: com.google.android.play.core.splitinstall.SplitInstallManager io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.splitInstallManager and 5 other contexts)
Missing class com.google.android.play.core.splitinstall.SplitInstallManagerFactory (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.(android.content.Context, io.flutter.embedding.engine.FlutterJNI))
Missing class com.google.android.play.core.splitinstall.SplitInstallRequest$Builder (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String))
Missing class com.google.android.play.core.splitinstall.SplitInstallRequest (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String))
Missing class com.google.android.play.core.splitinstall.SplitInstallSessionState (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager$FeatureInstallStateUpdatedListener.onStateUpdate(com.google.android.play.core.splitinstall.SplitInstallSessionState) and 1 other context)
Missing class com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.(android.content.Context, io.flutter.embedding.engine.FlutterJNI) and 2 other contexts)
Missing class com.google.android.play.core.tasks.OnFailureListener (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String))
Missing class com.google.android.play.core.tasks.OnSuccessListener (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String))
Missing class com.google.android.play.core.tasks.Task (referenced from: void io.flutter.embedding.engine.deferredcomponents.PlayStoreDeferredComponentManager.installDeferredComponent(int, java.lang.String) and 1 other context)
Missing class java.beans.ConstructorProperties (referenced from: void com.fasterxml.jackson.databind.ext.Java7SupportImpl.() and 2 other contexts)
Missing class java.beans.Transient (referenced from: void com.fasterxml.jackson.databind.ext.Java7SupportImpl.() and 1 other context)
Missing class org.slf4j.impl.StaticLoggerBinder (referenced from: void org.slf4j.LoggerFactory.bind() and 3 other contexts)
Missing class org.slf4j.impl.StaticMDCBinder (referenced from: org.slf4j.spi.MDCAdapter org.slf4j.MDC.bwCompatibleGetMDCAdapterFromBinder())
FAILURE: Build failed with an exception.
- What went wrong:
Execution failed for task ':app:minifyReleaseWithR8'.
A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable
Compilation failed to complete
Stripe physical test card "Card Error" on reader's screen
When attempting to use the Stripe physical test card on BBPOS WisePad 3 in test mode, I encounter the errors 'Card Error!' followed by 'Try another card' on the reader's screen.
![](https://private-user-images.githubusercontent.com/91616806/310872526-2fdb719b-717b-444a-b3e0-a6436f85154f.jpeg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQwOTMyMjgsIm5iZiI6MTcyNDA5MjkyOCwicGF0aCI6Ii85MTYxNjgwNi8zMTA4NzI1MjYtMmZkYjcxOWItNzE3Yi00NDRhLWIzZTAtYTY0MzZmODUxNTRmLmpwZWc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgxOVQxODQyMDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04NzIzYjEwZjY5NGZkNDI2YmI0OWRlNjA5MjYwYThiODNjY2VlOGQ5OWM5OTQ0MWJiZmFmNjA0NmRhMzRmMWI5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.bmncwTK2HXakGLELS8bhbObxF210eW-pH3uoTJABasw)
![](https://private-user-images.githubusercontent.com/91616806/310872522-0eab68ce-e8f9-41c9-b763-a161f8157ba0.jpeg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQwOTMyMjgsIm5iZiI6MTcyNDA5MjkyOCwicGF0aCI6Ii85MTYxNjgwNi8zMTA4NzI1MjItMGVhYjY4Y2UtZThmOS00MWM5LWI3NjMtYTE2MWY4MTU3YmEwLmpwZWc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgxOVQxODQyMDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02YjViYWExZWFlZTE3NTIwYzI1NmI1OWViOTg1OWU2NzRjZTE2ZTU2MjgwYWY0OWFlZWIzYWQxYTcwNzZkMGMzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.MwwGPtMKk4X9aLqfM47KDlj_2ZQRXSFIRI0iEUWK3CI)
The Stripe SDK indicates support for the test card.
stripe/stripe-terminal-android#418 (comment)
What could be the source of the problem?
Invalid Required Parameter of iOS when trying to collectionPaymentMethod on (via Mobile Reader)
I am getting an invalidateRequiredParameter error on the Terminal.collectPaymentMethod() only on iOS.
Android is working as expected.
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: TerminalException: invalidRequiredParameter
A required parameter was invalid or missing.
#0 TerminalPlatform._throwIfIsHostException (package:mek_stripe_terminal/src/platform/terminal_platform.dart:185:5)
#1 _$TerminalPlatform.startCollectPaymentMethod (package:mek_stripe_terminal/src/platform/terminal_platform.api.dart:288:24)
<asynchronous suspension>
#2 Terminal.collectPaymentMethod.<anonymous closure> (package:mek_stripe_terminal/src/terminal.dart:331:14)
This is the payment intent i am creating server side. and this is the response I'm getting from Stripe.
{
"object": {
"id": "pi_xxxxxx",
"object": "payment_intent",
"amount": 2120,
"amount_capturable": 0,
"amount_details": {
"tip": {
}
},
"amount_received": 0,
"application": null,
"application_fee_amount": null,
"automatic_payment_methods": {
"enabled": false
},
"canceled_at": null,
"cancellation_reason": null,
"capture_method": "automatic",
"client_secret": "pi_xxxxxxxx",
"confirmation_method": "automatic",
"created": 1711836594,
"currency": "usd",
"customer": null,
"description": null,
"invoice": null,
"last_payment_error": null,
"latest_charge": null,
"livemode": false,
"metadata": {
"buyerId": "terminal",
},
"next_action": null,
"on_behalf_of": "acct_1xxxxxxxxx",
"payment_method": null,
"payment_method_configuration_details": null,
"payment_method_options": {
"card_present": {
"request_extended_authorization": false,
"request_incremental_authorization_support": false
}
},
"payment_method_types": [
"card_present"
],
"processing": null,
"receipt_email": null,
"review": null,
"setup_future_usage": null,
"shipping": null,
"source": null,
"statement_descriptor": null,
"statement_descriptor_suffix": null,
"status": "requires_payment_method",
"transfer_data": {
"destination": "acct_xxxx"
},
"transfer_group": null
}
}
App crashes when we try to discover Bluetooth devices in IOS Simulator
When I try to discover Bluetooth device in ios simulator, the app crashes with following error code in crash report.
For the discovering local devices it works well. I have also checked the required permission before initializing terminal.
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: SIGNAL 6
Abort trap: 6 Terminating Process: pos [12533]
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x7ff8376f4202 __pthread_kill + 10
1 libsystem_pthread.dylib 0x7ff83774cee6 pthread_kill + 263
2 libsystem_c.dylib 0x7ff800131ef2 __abort + 139
3 libsystem_c.dylib 0x7ff800131e67 abort + 145
4 StripeTerminal 0x102515a05 -[SCPTerminal validateInfoPlistForDiscoveryConfiguration:].cold.2 + 104
5 StripeTerminal 0x1024043b1 -[SCPTerminal validateInfoPlistForDiscoveryConfiguration:] + 188
6 StripeTerminal 0x102404824 -[SCPTerminal discoverReaders:delegate:completion:] + 87
7 mek_stripe_terminal 0x101b97a03 DiscoveryDelegatePlugin.onListen(_:_:) + 515 (DiscoveryDelegatePlugin.swift:40)
8 mek_stripe_terminal 0x101bf20db implicit closure #2 in implicit closure #1 in TerminalPlugin.setupDiscoverReaders() + 75 (TerminalPlugin.swift:88)
9 mek_stripe_terminal 0x101ba320f closure #1 in DiscoverReadersControllerApi.setHandler(_:_:) + 783 (TerminalApi.swift:254)
10 mek_stripe_terminal 0x101ba2405 ControllerHandler.onListen(withArguments:eventSink:) + 149 (TerminalApi.swift:86)
11 mek_stripe_terminal 0x101ba254e @objc ControllerHandler.onListen(withArguments:eventSink:) + 222
12 Flutter 0x108def4d4 invocation function for block in SetStreamHandlerMessageHandlerOnChannel(NSObject<FlutterStreamHandler>*, NSString*, NSObject<FlutterBinaryMessenger>*, NSObject<FlutterMethodCodec>*, NSObject<FlutterTaskQueue>*) + 524
13 Flutter 0x1087b0f52 invocation function for block in flutter::PlatformMessageHandlerIos::HandlePlatformMessage(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<flutter::PlatformMessage, std::_LIBCPP_ABI_NAMESPACE::default_delete<flutter::PlatformMessage>>) + 94
14 libdispatch.dylib 0x7ff80013be40 _dispatch_call_block_and_release + 12
15 libdispatch.dylib 0x7ff80013d0d9 _dispatch_client_callout + 8
16 libdispatch.dylib 0x7ff80014cb86 _dispatch_main_queue_drain + 1330
17 libdispatch.dylib 0x7ff80014c646 _dispatch_main_queue_callback_4CF + 31
18 CoreFoundation 0x7ff8003b26cc __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
19 CoreFoundation 0x7ff8003acfbe __CFRunLoopRun + 2429
20 CoreFoundation 0x7ff8003ac264 CFRunLoopRunSpecific + 560
21 GraphicsServices 0x7ff809b4024e GSEventRunModal + 139
22 UIKitCore 0x1050827bf -[UIApplication _run] + 994
23 UIKitCore 0x1050875de UIApplicationMain + 123
24 pos 0x1009e186f main + 63 (AppDelegate.swift:5)
25 dyld_sim 0x100ba0384 start_sim + 10
26 dyld 0x10867f41f start + 1903
checked about SIGABRT error happens due to https://developer.apple.com/documentation/xcode/understanding-the-exception-types-in-a-crash-report#EXCCRASH-SIGABRT
Simulator : ios 16.4
Flutter version : 3.13.7
Mek package version : 3.1.1
dongle restarts on readReusableCard()
Hello
I'm using the BBPOS Chipper 2X BT. I connect to it via bluetooth successfully, but once I click a button I use for the method readReusableCard(), nothing happens, not even an error log is displayed.
Is it possible to track the error?
Once the dongle is connected it should be able to read the debt card on the dongle?
thanks a lot
[iOS Tap To Pay] This feature is currently not available for the selected reader.
First and foremost, thank you for such an excellent product!
I'm having a problem with Tap to Pay on iOS.
Could you please assist me in figuring it out?
On Android, everything works.
Apple granted me permission to utilize the ProximityReader APIs.
The project appears to be correctly set up. I created project.entitlements added "com.apple.developer.proximity-reader.payment.acceptance" to the project.entitlements and added the full path in Code Signing Entitlements.
To be sure that I have all the permissions and that I set the project well, I installed the official Stripe iOS SDK, and Tap to Pay works on exact same device (tested SDK versions 3.0.0 and 2.23.1)
Log:
2023-09-14 12:50:18.813753+0200 Runner[3779:1281223] Metal API Validation Enabled 2023-09-14 12:50:19.291982+0200 Runner[3779:1281223] [VERBOSE-2:FlutterDarwinContextMetalImpeller.mm(37)] Using the Impeller rendering backend. 2023-09-14 12:50:19.373268+0200 Runner[3779:1281644] flutter: The Dart VM service is listening on http://127.0.0.1:55715/3wDt3bh-UNE=/ 2023-09-14 12:50:21.102277+0200 Runner[3779:1281613] [VERBOSE-2:shell.cc(1004)] The 'StripeTerminalHandlers' channel sent a message from native to Flutter on a non-platform thread. Platform channel messages must be sent on the platform thread. Failure to do so may result in data loss or crashes, and must be fixed in the plugin or application code creating that channel. See https://docs.flutter.dev/platform-integration/platform-channels#channels-and-platform-threading for more information. 2023-09-14 12:50:23.066992+0200 Runner[3779:1281609] [ProximityReader] User cancelled 2023-09-14 12:50:30.290732+0200 Runner[3779:1281223] Can't find keyplane that supports type 4 for keyboard iPhone-PortraitTruffle-NumberPad; using 27315_PortraitTruffle_iPhone-Simple-Pad_Default 2023-09-14 12:50:32.787972+0200 Runner[3779:1281617] [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(, This feature is currently not available for the selected reader., Error Domain=com.stripe-terminal Code=1880 "This feature is currently not available for the selected reader." UserInfo={NSLocalizedDescription=This feature is currently not available for the selected reader., com.stripe-terminal:Message=This feature is currently not available for the selected reader.}, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18) <asynchronous suspension> #2 _$StripeTerminalPlatform.createPaymentIntent (package:mek_stripe_terminal/src/platform/stripe_terminal_platform.api.dart:214:22) <asynchronous suspension> #3 StripeTerminal.createPaymentIntent (package:mek_stripe_terminal/src/stripe_terminal.dart:288:7) <asynchronous suspension> #4 _TapToPayState._pay (package:shoppingapp/src/sample_feature/tap_to_pay.dart:150:16) <asynchronous suspension>
Code:
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:mek_stripe_terminal/mek_stripe_terminal.dart';
import 'package:permission_handler/permission_handler.dart';
class TapToPay extends StatefulWidget {
const TapToPay({
super.key,
});
static const routeName = '/';
@override
State<TapToPay> createState() => _TapToPayState();
}
class _TapToPayState extends State<TapToPay> {
StripeTerminal? stripeTerminal;
@override
void initState() {
super.initState();
_init();
}
var _readers = [];
var _amount = 0;
var _error = "";
var _isSuccess = false;
void _init() async {
setState(() {
_error = "";
_isSuccess = false;
});
final permissions = [
Permission.locationWhenInUse,
Permission.bluetooth,
if (Platform.isAndroid) ...[
Permission.bluetoothScan,
Permission.bluetoothConnect,
],
];
await permissions.request();
stripeTerminal = await StripeTerminal.getInstance(
fetchToken: getStripeToken,
);
stripeTerminal!
.discoverReaders(
discoveryMethod: DiscoveryMethod.localMobile, simulated: false)
.listen((List readers) {
setState(() => _readers = readers);
_connectReader();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(50),
child: TextField(
textAlign: TextAlign.center,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Amount',
),
keyboardType: TextInputType.number,
onChanged: (value) {
setState(() {
_amount = int.parse(value);
});
},
),
),
const SizedBox(
height: 20,
),
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green, // background
),
onPressed: _pay,
child: const Text(
'Pay',
style: TextStyle(color: Colors.white, fontSize: 20),
),
),
const SizedBox(
height: 50,
),
if (_isSuccess)
const Text('SUCCESS', style: TextStyle(color: Colors.green)),
Padding(
padding: const EdgeInsets.all(20),
child: Text(
_error,
style: const TextStyle(color: Colors.red),
),
),
],
),
);
}
Future<String> getStripeToken() async {
var response = await Dio().get(
'https://YOUR_BACKEND/getTerminalToken');
var token = jsonDecode(response.data);
log(token['secret']);
return token['secret'];
}
_connectReader() async {
try {
if (stripeTerminal != null && _readers.isNotEmpty) {
await stripeTerminal!.connectMobileReader(_readers[0],
locationId: "YOUR_LOCATION_ID");
}
} catch (e) {
log(e.toString());
setState(() {
_error = e.toString();
});
}
}
void _pay() async {
setState(() {
_error = "";
_isSuccess = false;
});
try {
var pip = PaymentIntentParameters(
amount: _amount * 100,
currency: 'usd',
captureMethod: CaptureMethod.automatic,
paymentMethodTypes: [
PaymentMethodType.card,
PaymentMethodType.cardPresent
]);
var pi = await stripeTerminal!.createPaymentIntent(pip);
final processablePaymentIntent =
await stripeTerminal!.collectPaymentMethod(pi);
final capturablePaymentIntent =
await stripeTerminal!.processPayment(processablePaymentIntent);
setState(() {
_isSuccess = true;
});
} on TerminalException catch (e) {
print(e);
setState(() {
_error = e.message!;
});
}
}
}
app bundle error..why ?
hi there
im getting error. but everything is ok.
Unhandled Exception: PlatformException(2900, Operation not permitted. Verify the app has the necessary entitlements and that the application bundle is valid., Error Domain=com.stripe-terminal Code=2900 "Operation not permitted. Verify the app has the necessary entitlements and that the application bundle is valid." UserInfo={com.stripe-terminal:ReaderMessage=Error usually caused by an entitlement issue, an invalid application bundle, a configuration issue, or a token issue., NSLocalizedDescription=Operation not permitted. Verify the app has the necessary entitlements and that the application bundle is valid., com.stripe-terminal:Message=Operation not permitted. Verify the app has the necessary entitlements and that the application bundle is valid.}, null)
v3.0.0 TapToPay error "Must have a country code to connect to reader"
There is a known issue with v3.0.0 of the Stripe Terminal SDK that throws an "Must have a country code to connect to a Tap to Pay reader." error when using a Tap to Pay reader
stripe/stripe-terminal-android#372
Stripe have said this issue will be resolved in v3.1.0 which will be released in the next week.
Missing Plugin Exception while running release build in Real Device while it works in Android Emulator
I am able to initialize stripe terminal properly in Android Emulator but it fails in Real Device
I am getting only below Error
MissingPluginException(No implementation found for method init on channel StripeTerminalPlatform)
Provide DeviceType enum for built in Android NFC reader
Currently, Device Type enum values don't consists built-in Android NFC reader please add this
Error on building the app in android emulator, when I add mek_stripe_terminal package.
I added the mek_stripe_terminal: ^3.4.0 on our app in pubspec.yaml, then in the android/app/build.gradle I upgrade the minSdkVersion to 26. But I don't why I'm facing an build failed on emulator but on the ios simulator doesn't have problem. I just follow the readme step on the pub.dev ref: https://pub.dev/packages/mek_stripe_terminal.
Hopefully anyone can answer my issue.
My Java version as of now is OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
cancel action
hi. when i start the collectionn on reader and then how can i cancel reader action..
StatementDescriptorSuffix
hi there..how are you..
how can i add StatementDescriptorSuffix on createpayment intent. do you have supportt this ? thankss.
Cancel payment
cancelPaymentIntent does not cancel the payment on the terminal
the device still shows a waiting card
discoverymethod not working
hi there
after 3.2.1 update then. now discoverymethod undefined. whatis. wrong ? thanks
mek_stripe_terminal/StripeTerminalPlugin.swift:255: Fatal error: Unexpectedly found nil while unwrapping an Optional value
Getting fatal error and crash (version 3.0.0-dev.1) during accepting payment method with:
mek_stripe_terminal/StripeTerminalPlugin.swift:255: Fatal error: Unexpectedly found nil while unwrapping an Optional value
mek_stripe_terminal/StripeTerminalPlugin.swift:255: Fatal error: Unexpectedly found nil while unwrapping an Optional value
thread 9, queue = 'com.apple.root.user-initiated-qos.cooperative', stop reason = Fatal error: Unexpectedly found nil while unwrapping an Optional value
frame #0: 0x00000001a6d90818 libswiftCore.dylib_swift_runtime_on_report libswiftCore.dylib
:
-> 0x1a6d90818 <+0>: ret
libswiftCore.dylib: 0x1a6d9081c <+0>: b 0x1a6d90818 ; _swift_runtime_on_report libswiftCore.dylib
:
0x1a6d90820 <+0>: adrp x8, 376357
0x1a6d90824 <+4>: ldrb w0, [x8, #0x434]
Target 0: (Runner) stopped.
cancelling an active payment
using this mek_stripe_terminal, if you initialize a terminal, generate a payment intent and connect the card reader to usb so its ready for a payment, at this point you cannot call cancelPaymentIntent to stop a payment from going through. when you call cancelPaymentIntent with the paymentintent object, it gets stuck in a loop with an await call.
Unhandled Exception: TerminalException: localMobileDebugNotSupported
please help..ios no problem. but android getting error
Unhandled Exception: TerminalException: localMobileDebugNotSupported
Do you make lib can support offline mode?
Do you make lib can support offline mode?
Update to latest android sdk version 3.3.0
Hey @BreX900, can you update this package to latest version of stripe sdk. It will fix the issue of initialisation with geolocation not available on the device.
physical device gets connected but app gets stuck on connecting
Hey I am trying to connect an physical device it's get connected with the device but the example app gets stuck to the connecting
. While the simulator device gets connected and the rest of the flow works just fine.
The operation couldn’t be completed. (mek_stripe_terminal.PlatformError error 1.) when using simulator or test card amounts on iOS.
Am I doing something wrong or is the package not handling simulated declines properly on iOS.
I'm getting the same results using Tap to Pay for all of the following on iOS:
- Using a Terminal Test Card and physical device
- Using a simulated device and simulated reader
I've been using the test card amounts listed here to simulate the failures: https://docs.stripe.com/terminal/references/testing#physical-test-cards for the following amounts I'm just seeing a generic failure when calling confirmPaymentIntent()
:
[log] PlatformException (PlatformException(mek_stripe_terminal.PlatformError:1, The operation couldn’t be completed. (mek_stripe_terminal.PlatformError error 1.), mek_stripe_terminal.PlatformError, null))
[log] #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:651:7)
#1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18)
<asynchronous suspension>
#2 _$TerminalPlatform.confirmPaymentIntent (package:mek_stripe_terminal/src/platform/terminal_platform.api.dart:306:22)
<asynchronous suspension>
#3 Terminal.confirmPaymentIntent (package:mek_stripe_terminal/src/terminal.dart:368:7)
<asynchronous suspension>
#4 PaymentController.build.handlePayment (package:flutterdonate/controllers/payment_controller.dart:111:27)
<asynchronous suspension>
#5 _FutureBuilderState._subscribe.<anonymous closure> (package:flutter/src/widgets/async.dart:624:31)
<asynchronous suspension>
All of these amounts give the error above:
- 10.01, // Payment is declined with a 'call issuer' code
- 10.02, // Offline pin required (use 1234)
- 10.03, // Online/Offline pin required
- 10.05, // Generic Decline
- 10.55, // Incorrect Pin
- 10.65, // Withdrawal amount limit exceeded
- 10.75, // Pin try exceeded
However the following scenario amount is working as expecting (showing the PIN UI and then succeeding)
- 10.60, // Online or Offline pin required
When I catch and swallow the PlatformException I can use the terminal to retrieve the the paymentIntent and successfully see that there is a failed charges on there in the charges list but this isn't ideal and doesn't behave like Android does. Android returns a proper TerminalExceptionCode.stripeApiError with a lovely apiError I can parse for a decline message to inform the user.
Essentially it looks like iOS isn't handling simulated scenarios properly with test values (either when simulated or using a physical test card). Is this something other people are finding? Can this be fixed in the package?
Hopefully the stack trace above will help you find the issue but if you need any more information let me know.
After `Terminal.getInstance` is called, subsequent calls do not override the fetch token method
When the Terminal.getInstance()
method is called and passed a fetchToken method, subsequent calls to getInstance
passing a new fetchToken
method, to create new instances of a Terminal
do not appear to override the fetchToken
method passed in the first call. It appears that the fetchToken
method is run a second time in the second getInstance
call. However, the fetchToken
method is the original method passed, not a new method.
Unhandled Exception: TerminalException: localMobileDebugNotSupported on android
hi mate. please help. when runing on android im getting this error. but iphone is working perfect. thanks
Amount not showing on payment screen android
Hey I have been trying to create a simulated payment through tap & pay , the payment is getting successful but i am unable to show the amount on the screen
c.c. @kuamanet @ManuInNZ @BreX900 @GabM3 @jacopofranza
this is how i am creating intent
This is how i am calling
await _createPaymentIntent( _terminal!, '0.80', 5, );
MissingPluginExcepition - Andorid Embedded Board ZC-3566
Hi, i'm trying using this package with a flutter app on an andorid 11 device for TV monitors.
I used the example and successfully run it on a mobile device (Tablet), now when i try it on this device it return the error No implementatio found for method init on channel mek_stripe_terminal:
Any solution / workaround ?
Unhandled Exception if selected device is not Google Mobile Services certified
Hi, thanks for the great package!
When testing, I found my Android phone was behind on security updates and triggered this error:
10-05 11:27:50.911 15069 15118 E flutter : [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: TerminalException: localMobileDeviceTampered
10-05 11:27:50.911 15069 15118 E flutter : INTEGRATION_ERROR.LOCAL_MOBILE_DEVICE_TAMPERED: ATTESTATION_FAILURE (req_He0V1ayPubuPsZ): Device is not Google Mobile Services (GMS) certified. If this is incorrect, we recommend that you perform a factory reset or contact your device manufacturer.
10-05 11:27:50.911 15069 15118 E flutter : Message: ATTESTATION_FAILURE (req_He0V1ayPubuPsZ): Device is not Google Mobile Services (GMS) certified. If this is incorrect, we recommend that you perform a factory reset or contact your device manufacturer.
10-05 11:27:50.911 15069 15118 E flutter : com.stripe.stripeterminal.external.models.TerminalException: ATTESTATION_FAILURE (req_He0V1ayPubuPsZ): Device is not Google Mobile Services (GMS) certified. If this is incorrect, we recommend that you perform a factory reset or contact your device manufacturer.
As this error was unhandled I was unable to show any feedback in my app when it occurs. Are you able to update the error handling logic for connectMobileReader
in stripe_terminal.dart?
Updating my phone with the latest security updates resolved this error, but without debugging the app, there was no way to see this error message to get an indication that something was wrong.
[PlatformException] "...required providing that Connected Account's ID in SCPLocalMobileConnectionConfiguration""
Hello folks,
Firstly thanks for the hard work on this library. We have it working on Android and soon to push to prod. While testing on iOS we noticed that calling the retrievePaymentIntent(clientSecret)
method on the Terminal
object returns a PaymentIntent
object that omits certain required fields from the initial payment intent created via our backend service.
When attempting to pass that payment intent object to collectPaymentMethod(...)
we get the following error:
A required parameter was invalid or missing. Collecting a PaymentMethod for a PaymentIntent
on_bahalf_of
a Connected Account required providing that Connected Account's ID inSCPLocalMobileConnectionConfiguration
I noticed while digging in this package's codebase I found that these fields have been set to nil
in stripe_terminal/ios/Classes/Mappings/PaymentIntentMappings.swift
- amountCapturable
- amountReceived
- applicationFeeAmount
- clientSecret
- onBehalfOf
I tried a workaround of instanting a PaymentIntent
object while passing those missing values manually using the payment intent object returned from our backend:
PaymentIntent(
amountCapturable: rawIntent['amount_capturable'),
onBehalfOf: rawIntent['on_behalf_of'],
...
...
)
Sadly this did not resolve the issue. Your help including any suggestions would be appreciated.
Thanks so much
Terminal update
Hi @BreX900, thanks for this lib.
Can I ask you to make new methods for simulated updates of terminal and methods for nofying about update process like estimatedUpdateTime
FAILURE: Android Build failed Execution failed for task ':app:mergeDevDebugNativeLibs'
Hello,
Your lib looks really good. Congratulations for all your hard work. However, I have a problem with Android. when I install the lib. I can't compile my project. I keep getting this message. I found this article : but it does not work but i am not sure of the config. I tried to change my gradle version but noting.
Can you help me ?
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.22.3, on macOS 14.3.1 23D60 darwin-arm64, locale fr-FR)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.4)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.3)
[✓] VS Code (version 1.91.1)
[✓] Connected device (4 available)
[✓] Network resources
`
FAILURE: Build failed with an exception.
- What went wrong:
Execution failed for task ':app:mergeDevDebugNativeLibs'.
Could not resolve all files for configuration ':app:devDebugRuntimeClasspath'.
Failed to transform jackson-core-2.16.1.jar (com.fasterxml.jackson.core:jackson-core:2.16.1) to match attributes {artifactType=android-jni, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime}.
> Execution failed for JetifyTransform: /Users/vincentboulanger/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.16.1/9456bb3cdd0f79f91a5f730a1b1bb041a380c91f/jackson-core-2.16.1.jar.
> Failed to transform '/Users/vincentboulanger/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.16.1/9456bb3cdd0f79f91a5f730a1b1bb041a380c91f/jackson-core-2.16.1.jar' using Jetifier. Reason: IllegalArgumentException, message: Unsupported class file major version 65. (Run with --stacktrace for more details.)
Suggestions:
- Check out existing issues at https://issuetracker.google.com/issues?q=componentid:460323&s=modified_time:desc, it's possible that this issue has already been filed there.
- If this issue has not been filed, please report it at https://issuetracker.google.com/issues/new?component=460323 (run with --stacktrace and provide a stack trace if possible).
- Try:
Run with --stacktrace option to get the stack trace.
Run with --info or --debug option to get more log output.
Run with --scan to get full insights.
- Get more help at https://help.gradle.org
BUILD FAILED in 51s
`
In Simulated mode Transaction Fails
In Package version 3.1.0
the simualted sechnario for payment processsing is failing with following error
com.stripe.stripeterminal.external.models.TerminalException: This transaction requires a PIN. In testmode, using a physical test card with designated amount ending values produce specific decline responses. See https://stripe.com/docs/terminal/references/testing#physical-test-cards for details.
ApiError(error=InnerError(charge=ch_3O1pmCPx7XPnEVCK05rNOvvO, code=online_or_offline_pin_required, declineCode=online_or_offline_pin_required, docUrl=null, message=This transaction requires a PIN. In testmode, using a physical test card with designated amount ending values produce specific decline responses. See https://stripe.com/docs/terminal/references/testing#physical-test-cards for details., param=null, paymentIntent=PaymentIntent(id=pi_3O1pmCPx7XPnEVCK0P13G5Fk, amount=8103, amountCapturable=0, amountReceived=0, application=null, applicationFeeAmount=0, canceledAt=0, cancellationReason=null, captureMethod=manual, charges=ChargesList(data=[Charge(id=ch_3O1pmCPx7XPnEVCK05rNOvvO, amount=8103, amountRefunded=0, application=null, applicationFee=null, applicationFeeAmount=0, balanceTransaction=null, captured=false, created=1697458810, currency=usd, customer=null, description=null, dispute=null, failureCode=online_or_offline_pin_required, failureMessage=This transaction requires a PIN.
This works properly in an older version 2.1.4
I am connected to a Simulated Chipper2X reader and using isSimulated
as true while discovering readers
incompatibleReader
hi mate..
im working your perfect package.. again thank you so much about it.
but when i change the connected reader then im getting incompatibleReader error.
for example. i have. 2 buttons on the widget
First button => Tap to Pay button
Second button => USB Reader button
first when i click the first button everything is ok. then after process when i click to second button then getting error.
every each buttons when click
- first disconnect reader
- discovery reader
- connect to reader
i hope i could explain..
gradle kotlin version error on android build
Hey when i add mek_stripe_terminal in my flutter project, this error is coming when i building it for android
I have tried updating gradle and kotlin but no success , i think i am doing any mistake
Please help it's bet urgent -
cc @kuamanet @ManuInNZ @BreX900 @GabM3 @jacopofranza
My flutter version is
Flutter (Channel stable, 3.22.3, on macOS 14.4.1 23E224 darwin-arm64, locale en-IN
Java version OpenJDK Runtime Environment (build 17.0.11+0-17.0.11b1207.24-11852314)
android/setting.gradle
tap to pay
hi mate.. im trying for tap to pay(iphone).. but im getting error.but every settings is true. can you help. me
Operation not permitted. Verify the app has the necessary entitlements and that the application bundle is valid., Error Domain=com.stripe-terminal Code=2900 "Operation not permitted. Verify the app has the necessary entitlements and that the application bundle is valid." UserInfo={com.stripe-terminal:ReaderMessage=Error usually caused by an entitlement issue, an invalid application bundle, a configuration issue, or a token issue., NSLocalizedDescription=Operation not permitted. Verify the app has the necessary entitlements and that the application bundle is valid., com.stripe-terminal:Message=Operation not permitted. Verify the app has the necessary entitlements and that the application bundle is valid
Cancelling collectPaymentMethod results in an unhandled error and a black screen
I may be doing something wrong here but I am not sure how to handle cancelling the collectPaymentMethod screen that is shown.
Here is my log:
I/flutter (10941): Payment Status Changed: waitingForInput
W/ty.paymintyplus(10941): Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed)
W/ty.paymintyplus(10941): Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
I/StripeTerminal(10941): class=TerminalStatusManager message=endPaymentFlow.
D/StripeTerminal(10941): class=ProxyTerminalListener message=onPaymentStatusChange(READY)
E/StripeTerminal(10941): class=TerminalSession
E/StripeTerminal(10941): com.stripe.stripeterminal.external.models.TerminalException: Contactless transaction was canceled
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.adapter.CotsAdapter.collectPaymentMethodHandler(CotsAdapter.kt:172)
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.adapter.CotsAdapter.collectPaymentMethod(CotsAdapter.kt:136)
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.adapter.ProxyAdapter.collectPaymentMethod(ProxyAdapter.kt:144)
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.terminalsession.TerminalSession$CollectPaymentMethodOperation.executeIfNotCanceled(TerminalSession.kt:1297)
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.terminalsession.TerminalSession$CancelableOperation.execute(TerminalSession.kt:1058)
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.terminalsession.TerminalSession$ExternalOperation.run$terminalsession_release(TerminalSession.kt:1016)
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.terminalsession.TerminalSession.enqueueOperation$lambda$6(TerminalSession.kt:875)
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.terminalsession.TerminalSession.$r8$lambda$6lM7341_XI6PEqXfOM-yc2U5tkQ(Unknown Source:0)
E/StripeTerminal(10941): at com.stripe.stripeterminal.internal.common.terminalsession.TerminalSession$$ExternalSyntheticLambda0.run(Unknown Source:4)
E/StripeTerminal(10941): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487)
E/StripeTerminal(10941): at java.util.concurrent.FutureTask.run(FutureTask.java:264)
E/StripeTerminal(10941): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
E/StripeTerminal(10941): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
E/StripeTerminal(10941): at java.lang.Thread.run(Thread.java:1012)
I/flutter (10941): Payment Status Changed: ready
Advice on how to handle this would be great, thanks!
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.