stripe_terminal 1.5.0  stripe_terminal: ^1.5.0 copied to clipboard
stripe_terminal: ^1.5.0 copied to clipboard
A flutter plugin to scan stripe readers and connect to the them and get the payment methods.
stripe_terminal #
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.
