stripe_terminal 1.4.2+2 copy "stripe_terminal: ^1.4.2+2" to clipboard
stripe_terminal: ^1.4.2+2 copied to clipboard

A flutter plugin to scan stripe readers and connect to the them and get the payment methods.

stripe_terminal #

pub package

A flutter plugin to scan stripe readers and connect to the them and get the payment methods.

Installation #

Android #

No Configuration needed, workes out of the box.

iOS #

You need to provide permission request strings to your Info.plist file. A sample content can be

	<key>NSLocationWhenInUseUsageDescription</key>
	<string>Location access is required in order to accept payments.</string>
	<key>NSBluetoothPeripheralUsageDescription</key>
	<string>Bluetooth access is required in order to connect to supported bluetooth card readers.</string>
	<key>NSBluetoothAlwaysUsageDescription</key>
	<string>This app uses Bluetooth to connect to supported card readers.</string>

You also need to authorize backround modes authorization for bluetooth-central. Paste the following to your Info.plist file

	<key>UIBackgroundModes</key>
	<array>
		<string>bluetooth-central</string>
	</array>

Usage #

  • First initilize the SDK
    stripeTerminal = StripeTerminal(
      fetchToken: () async {
        // Call your backend to get the connection token and return to this function
        // Example token can be.
        const token = "pst_test_XXXXXXXXXX...."; 

        return token;
      },
    );
  • Example backend code to get the connection token written on node.js:
    import Stripe from "stripe";
    import express from "express"

    const stripe = new Stripe("sk_test_XXXXXXXXXXXXXXXXXX", {
        apiVersion: "2020-08-27"
    })

    const app = express();

    app.get("/connectionToken", async (req, res) => {
        const token = await stripe.terminal.connectionTokens.create();
        res.send({
            success: true,
            data: token.secret
        });
    });

    app.post("/createPaymentIntent", async (req, res) => {
        const pi = await stripe.paymentIntents.create({
            amount: 1000,
            currency: "USD",
            capture_method: "manual",
            payment_method_types: ["card_present"]
        })

        res.send({
            success: true,
            paymentIntent: pi
        })
    })

    app.listen(8000, () => {
        console.log("Server started")
    });
  • Discover the devices nearby and show it to the user
    stripeTerminal
        .discoverReaders(simulated: true)
        .listen((List<StripeReader> readers) {
            setState(() {
                this.readers = readers;
            });
        });
  • Connect to a bluetooth reader
    bool connected = await stripeTerminal.connectBluetoothReader(readers[0].serialNumber);
    if(connected) {
        print("Connected to a device");
    }
  • Scan a card from the reader
    stripeTerminal
        .readReusableCardDetail()
        .then((StripePaymentMethod paymentMethod) {
            print("A card was read, the last four digit is ${paymentMethod.card?.last4}");
        });
  • Scan payment method from the reader using tap, swipe, insert method
    // Get this from your backend by creating a new payment intent
    
    Future<String> createPaymentIntent() async {
        Response invoice = await _dio.post("/createPaymentIntent");
        return invoice.data["paymentIntent"]["client_secret"];
    }

    String payment_intent_client_secret = await createPaymentIntent();

    stripeTerminal
        .collectPaymentMethod(payment_intent_client_secret)
        .then((StripePaymentIntent paymentIntent) {
            print("A payment intent has captured a payment method, send this payment intent to you backend to capture the payment");
        });

And you are done!!!!

Currently supported features: #

  • Initializing terminal SDK
  • Scanning the readers
  • Connecting to a device (Only bluetooth devices on android)
  • Checking connection status
  • Checking connected device
  • Read payment method from the device

Missing Features #

  • Create payment intent
  • Process payment
  • Capture payment

Future Plan #

Please feel free to send a PR for further feature as you need or just create an issue on the repo with the feature request.

I have no plans to maintain this package in the long future thus the package will be deprecated as soon as flutter_stripe adds support to their SDK as mentioned here

Support the creator #

Creating software for free takes time and effort thus please consider buying me a cup of coffee. This we definitely put a smile on my face and motivate me to contribute more.

"Buy Me A Coffee"

❤️ Sponsor

18
likes
120
pub points
58%
popularity

Publisher

verified publisheraawaz.dev

A flutter plugin to scan stripe readers and connect to the them and get the payment methods.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (LICENSE)

Dependencies

flutter

More

Packages that depend on stripe_terminal