Search packages, repositories and app categories

Package detailsv1.0.2

yandex_kassa

Yandex.Kassa (Yandex.Checkout) plugin for both Android and iOS platforms

30-day downloads
13
Likes
15
Pub points
40

Install package

flutter pub add yandex_kassa

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

The yandex_kassa package is a Flutter plugin that enables integration with Yandex.Kassa (Yandex.Checkout) for processing payments on both Android and iOS platforms. It provides a straightforward interface to initiate checkout flows, handle payment statuses, and manage transactions securely. Designed for developers building apps requiring in-app payments, it supports seamless payment processing through Yandex's trusted infrastructure. The plugin simplifies the implementation of payment workflows while ensuring compatibility across mobile platforms.

Use cases

  • In-app purchases
  • E-commerce integrations
  • Subscription billing
  • Digital goods sales

Key features

  • Cross-platform support
  • Secure payment handling
  • Easy checkout integration
  • Transaction status tracking
  • Yandex.Kassa backend connectivity

Suitable for

  • Mobile apps requiring payments
  • Developers using Yandex.Checkout
  • E-commerce solutions on Flutter
  • Apps targeting Russian or CIS markets

Considerations

  • Requires Yandex.Kassa merchant account
  • Platform-specific setup needed
  • Limited to Yandex.Kassa payment methods
  • Depends on external API availability
  • Needs proper error handling for payment failures

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

yandex_kassa

Yandex.Kassa (Yandex.Checkout) plugin for both Android and iOS platforms. Implements Yandex Checkout SDK for Flutter. Official documentation can be found here:

Please, follow the official documentation for quick start. Note, that you need to get .framework files from Yandex Money support to use plugin for iOS. Don't forget to set them as Embed & Sign or Embed Without Signing at Runner -> General -> Frameworks, Libraries and Embedded Content

Example

Demonstrated how use the plugin.

import 'dart:convert';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:yandex_kassa/yandex_kassa.dart';
import 'package:http_client/console.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

final idempotenceKey = 'some_unique_idempotence_key' +
    DateTime.now().microsecondsSinceEpoch.toString();
const shopId = 'some_shop_id';
const clientAppKey = 'live_MTkzODU2VY5GiyQq2GMPsCQ0PW7f_RSLtJYOT-mp_CA';
const secretKey = 'your secret key';

class _MyAppState extends State<MyApp> {
  final paymentParameters = PaymentParameters(
      amount: Amount(5),
      purchaseName: 'Product name',
      purchaseDescription: 'Some detailed description of current purchase',
      clientApplicationKey: clientAppKey,
      iosColorScheme: IosColorScheme.redOrange,
      paymentMethods: [PaymentMethod.bankCard, PaymentMethod.sberbank],
      applePayMerchantIdentifier: "merchant.ru.yandex.mobile.msdk.debug",
      androidColorScheme: IosColorScheme.redOrange,
      iosTestModeSettings: IosTestModeSettings(charge: Amount(3.1415926)),
      googlePayParameters: GooglePayCardNetwork.values,
      shopId: shopId,
      returnUrl: 'https://your.return/url',
      androidTestModeSettings: AndroidTestModeSettings(
          mockConfiguration: AndroidMockConfiguration(
              serviceFee: Amount(3.1415926),
              paymentAuthPassed: true,
              completeWithError: false,
              linkedCardsCount: 3)));

  TokenizationResult tokenizationResult;
  Map paymentResult;
  bool loading = false;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: [
        const Locale('en', 'US'),
        const Locale('ru', 'RU'),
      ],
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Stack(children: [
          Center(
              child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: [
                Spacer(),
                Container(
                    child: OutlineButton(
                        child: const Text('Open payment screen'),
                        onPressed: () async {
                          final result = await YandexKassa.startCheckout(
                              paymentParameters);
                          setState(() {
                            tokenizationResult = result;
                          });
                        })),
                if (tokenizationResult != null) ...[
                  (tokenizationResult.success
                      ? Text(
                          'Token has been successfully received\nToken: ${tokenizationResult?.paymentData?.token ?? ""}\nPayment method: ${tokenizationResult?.paymentData?.paymentMethod ?? ""}',
                          style: TextStyle(
                              color: Colors.green,
                              fontSize: 16,
                              fontWeight: FontWeight.bold),
                          textAlign: TextAlign.center,
                        )
                      : Text(
                          'An error occured\n${tokenizationResult.error}',
                          style: TextStyle(
                              color: Colors.redAccent,
                              fontSize: 16,
                              fontWeight: FontWeight.bold),
                          textAlign: TextAlign.center,
                        )),
                  if (tokenizationResult?.success == true)
                    OutlineButton(
                      child: Text('Send Token'),
                      onPressed: () async {
                        final httpClient = ConsoleClient();
                        setState(() => loading = true);
                        Request request = Request(
                            'POST',
                            Uri.parse(
                                'https://payment.yandex.net/api/v3/payments'),
                            headers: Headers(),
                            body: json.encode({
                              "payment_token":
                                  tokenizationResult.paymentData.token,
                              "amount": paymentParameters.amount.jsonIso4217,
                              "confirmation": {
                                "type": "redirect",
                                "return_url":
                                    "https://4081d9747ee2.ngrok.io/v1.3/verifications/yandex_checkout"
                              },
                              "metadata": {"my_key": "my_val"},
                              "description":
                                  paymentParameters.purchaseDescription
                            }));
                        request.headers.add("Idempotence-Key", idempotenceKey);
                        request.headers.add(
                            'Authorization',
                            "Basic " +
                                base64Encode(
                                    utf8.encode("$shopId:$secretKey")));
                        request.headers.add('Content-Type', 'application/json');
                        Response response = await httpClient.send(request);
                        paymentResult =
                            json.decode(await response.readAsString());
                        setState(() => loading = false);
                      },
                    ),
                  if (paymentResult != null)
                    Text(
                      paymentResult.toString(),
                      style: TextStyle(
                          color: Colors.green,
                          fontSize: 16,
                          fontWeight: FontWeight.bold),
                      textAlign: TextAlign.center,
                    )
                ],
                Spacer(),
              ])),
          if (loading)
            Container(
                width: double.infinity,
                height: double.infinity,
                color: Colors.black26,
                child: Center(child: CircularProgressIndicator()))
        ]),
      ),
    );
  }
}
TODO
  • add card scanning

Categories

Source repository

Projects using this package

No data available yet.