bancard_vpos 0.1.0 copy "bancard_vpos: ^0.1.0" to clipboard
bancard_vpos: ^0.1.0 copied to clipboard

Flutter package for Bancard VPOS 2.0 payments (Paraguay). Supports single buy and recurring payments with native card management. No backend required.

bancard_vpos #

pub version likes pub points

Flutter package for Bancard VPOS 2.0 payments (Paraguay). Supports single buy payments, recurring payments with saved cards, and native card management — no backend required.

Features #

  • Single Buy — One-time payments via Bancard checkout form
  • Card Registration — Save cards for future use
  • Charge Saved Cards — Pay with previously registered cards (alias token)
  • Card Management — List, add, and delete saved cards
  • Transaction Rollback — Reverse completed transactions
  • Payment Confirmation — Retrieve transaction details
  • Native WebView — Bancard form rendered inside the app with URL interception
  • Lottie Animations — Polished success/failure animations with customization support
  • Zero Server Dependency — No backend or deep link configuration needed
  • Sandbox + Production — Easy environment switching

How It Works #

The package uses a custom URI scheme (bancardvpos://result) as the return_url for Bancard. When the payment completes, Bancard attempts to redirect to this URL. The WebView intercepts this navigation via shouldOverrideUrlLoading, cancels it (never loads the URL), and emits the result natively to Flutter.

This means:

  • No real server at the return URL
  • No deep link configuration in AndroidManifest.xml or Info.plist
  • No backend of any kind

Getting Started #

Installation #

dependencies:
  bancard_vpos: ^0.1.0

Android Setup #

Add internet permission in android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET"/>

iOS Setup #

Add to ios/Runner/Info.plist (required for sandbox HTTP resources):

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key><true/>
</dict>

Usage #

Quick Checkout #

import 'package:bancard_vpos/bancard_vpos.dart';

final config = BancardConfig(
  publicKey: 'your_public_key',
  privateKey: 'your_private_key',
  environment: BancardEnvironment.sandbox,
);

// Full checkout with saved cards
final result = await Navigator.push<BancardPaymentResult>(
  context,
  MaterialPageRoute(builder: (_) => BancardCheckoutPage(
    config: config,
    shopProcessId: 123456,   // your unique transaction ID
    amount: 150000,
    description: 'Order #123',
    userId: 42,              // enables saved card selection
    currency: 'PYG',
  )),
);

if (result?.isSuccess == true) {
  print('Payment approved!');
}

Card Management #

await Navigator.push(context, MaterialPageRoute(
  builder: (_) => BancardCardManagementPage(
    config: config,
    userId: 42,
    userEmail: 'user@email.com',
    userPhone: '0981000000',
  ),
));

Direct API Usage #

final service = BancardService(config);

// Get saved cards
final cards = await service.getUserCards(42);

// Charge a saved card
final chargeResult = await service.charge(
  shopProcessId: 123456,
  amount: 150000,
  aliasToken: cards.first.aliasToken,
  description: 'Order #123',
);

// Rollback a transaction
await service.rollback(123456);

// Get confirmation
final confirmation = await service.getConfirmation(123456);

Card Selector Widget #

BancardCardSelector(
  config: config,
  userId: 42,
  selectedCard: _selectedCard,
  onCardSelected: (card) => setState(() => _selectedCard = card),
  onAddNewCard: () => _openCardRegistration(),
)

Custom Result Animations #

The result widget uses built-in Lottie animations for success and failure. You can override them with your own:

BancardResultWidget(
  result: paymentResult,
  onDone: () => Navigator.pop(context),
  // Use your own Lottie JSON assets:
  successAnimationAsset: 'assets/my_success.json',
  failedAnimationAsset: 'assets/my_error.json',
  animationSize: 200,
)

⚠️ Security Warning #

The privateKey in BancardConfig is used to generate authentication tokens. Do NOT embed it in production apps distributed via Play Store / App Store. For public-facing apps, use a backend to generate the process_id and pass it directly to the WebView.

This package is suitable for:

  • Enterprise / internal apps
  • Apps paired with a backend proxy
  • Prototyping and sandbox testing

Environments #

Environment Base URL
Sandbox https://vpos.infonet.com.py:8888
Production https://vpos.infonet.com.py

Sandbox Test Data #

Field Value
Card Number 4111 1111 1111 1111
Expiration Any future date
CVV 123
Cédula 9661000
OTP Zimple 1234

API Reference #

BancardService #

Method Description
initSingleBuy() Start a single payment, returns process_id
initCardRegistration() Start card registration, returns process_id
getUserCards() Get saved cards for a user
charge() Charge a saved card
deleteCard() Delete a saved card
rollback() Reverse a transaction
getConfirmation() Get transaction details

Pages & Widgets #

Component Description
BancardCheckoutPage Complete checkout flow (cards + payment + result)
BancardCardManagementPage Card CRUD management
BancardCardSelector Reusable saved card picker
BancardResultWidget Embeddable payment result display
BancardResultPage Full-page payment result

License #

MIT

0
likes
140
points
29
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Flutter package for Bancard VPOS 2.0 payments (Paraguay). Supports single buy and recurring payments with native card management. No backend required.

Topics

#payments #bancard #vpos #paraguay #ecommerce

License

MIT (license)

Dependencies

crypto, flutter, flutter_inappwebview, http, lottie

More

Packages that depend on bancard_vpos