flutter_nmi 1.0.28
flutter_nmi: ^1.0.28 copied to clipboard
NMI Payment Integration.
flutter_nmi #
NMI Payment SDK for Android (Flutter plugin).
Current version: 1.0.28
SDK versions #
| Platform | ChipDna / NMI SDK |
|---|---|
| Android | Payment Device SDK 5.4.1 Cassiopeia (full jars) |
Android requirements #
- minSdkVersion 31
- Bluetooth + location permissions (including
BLUETOOTH_CONNECTon API 31+) - For TCP/IP SmartPOS (Axium loopback): host app must allow cleartext / loopback (
usesCleartextTrafficis declared by the plugin)
Android features (5.4.1) #
Existing Flutter API is preserved. Additive options:
- TCP/IP connection:
initializewithdeviceType: "TcpIp", optionalis_smart_pos: "1",pinPadIpAddress,pinPadPort(defaults0.0.0.0/8088), anddeviceName - BluetoothDeviceId: pass
bluetoothDeviceId(ordeviceId) oninitialize, or select from the pin-pad list (IDs included) - Offline:
FlutterNmi.processOfflineRequest({ 'userReference': '...' }) - TMS (Android):
initializewithaction: "TMSUpdate"forces a TMS update (FullTmsUpdate=FALSE). Addfull_tms_update: "1"to download all pin-pad configuration. - Get PinPad Status:
initializewithaction: "PinPadStatus"(orFlutterNmi.getPinPadStatus()after connect). Result arrives ononPinPadStatusUpdated. Status is also sent on theflutter_nmi_devicechannel forFlutterNMIDevice. - Connect / configure:
connectAndConfigureruns off the UI thread. Progress viaonPinPadConfigurationUpdate(ChipDna stage strings). Failures viaonPinPadConnectionFailedwith the ChipDna error string.onPinPadInitializationFailedis only for ChipDnainitializefailure and currently passes no reason string. - Partial approval (Android): TMS-driven. Listen for
onPartialApprovalRequired; whenresponseRequiredis true, callcontinuePartialApproval(accept:, operatorPin?). - Pre-auth / confirm / void (Android):
preAuth({ amount, userReference, ... })— Sale withAutoConfirm=FALSE/CloseTransaction=FALSE, ChipDnaTippingType=END_OF_DAY(noTipAmounton start). Terminal TMS must allow end-of-day tipping.confirmTransaction({ userReference|transactionId, amount, tip? })— capture; optionaltip(dollars) maps to ChipDnaTipAmount(ornullwhen 0). Completes to Flutter when ChipDna returnsTRANSACTION_RESULT=APPROVED(not onlyRESULT=TRUE).voidTransaction({ userReference|transactionId })— void open auth; sameTRANSACTION_RESULT=APPROVEDsuccess mapping as confirm- Default
initialize+action: Transactionremains auto-sale (AutoConfirm=TRUE); optionaltip(dollars) maps to ChipDnaTipAmount(ornullwhen 0). Sale does not sendTippingType=END_OF_DAY. - Sale / transaction declines and ChipDna errors use
onTransactionFailed, notonPinPadConnectionFailed.
- Keyed pre-auth (Direct Post, Android): not the pin pad.
manualPreAuth({ api_key, ccnumber, ccexp, amount, cvv? })— gatewaytype=auth. Result JSON includestransactionid.manualCapture({ api_key, transactionid, amount?, tip? })— gatewaytype=capture.amountis the original auth;tipis added into the capture total (amount + tip) and also sent astip. Do not use ChipDnaconfirmTransaction.manualVoidAuth({ api_key, transactionid })— gatewaytype=void. Do not use ChipDnavoidTransaction.manualCreditPaymentremains sale/credit (typefrom the caller).
Tap to Pay / Cloud Commerce AAR and surcharge Flutter APIs are not included in this release.
Getting Started #
This project is a Flutter plug-in package.
For help getting started with Flutter, see the online documentation.