0 purchases
stone payments
Idioma: Português | English
Pacote de Integração da Máquina de Pagamento Stone para Flutter #
Este pacote é um plugin para Flutter que fornece integração com as máquinas de pagamento da empresa Stone. Com este pacote, você pode facilmente processar pagamentos de seu aplicativo Flutter usando as máquinas de pagamento da Stone.
Instalação #
Para usar este pacote, adicione stone_payments como uma dependência em seu arquivo pubspec.yaml.
dependencies:
stone_payments: ^0.1.7
copied to clipboard
Em seguida, execute flutter pub get para instalar o pacote.
Inclua no arquivo local.properties, localizado na raiz do projeto, a variável abaixo com seu token:
packageCloudReadToken=SEU_TOKEN
copied to clipboard
O minSdkVersion deve ser igual ou maior que 23
minSdkVersion=23
copied to clipboard
Atenção!
Dipositivos Suportados:
Positivo - L400
Positivo - L300
Ingenico - APOS A8
Sunmi - P2
Gertec - GPOS700X
Uso #
Para usar a integração da Stone Payment Machine em seu aplicativo Flutter, você precisa seguir estas etapas:
1. Ative a máquina de pagamento
await StonePayments.activateStone(
appName: 'Meu aplicativo',
stoneCode: '12345678', // O código obtido com a equipe da Stone
qrCodeProviderId: 'PROVIDER ID', // QRCODE_PROVIDERID fornecido pela equipe de integração da Stone, caso vá utilizar PIX.
qrCodeAuthentication: 'TOKEN', // QRCODE_AUTHENTICATION fornecido pela equipe de integração da Stone, caso vá utilizar PIX.
);
copied to clipboard
2. Inicie uma transação de pagamento
final transactionResult = await StonePayments.transaction(
valor: 5,
typeTransaction: TypeTransactionEnum.debit,
parcelas: 1, // opcional
printReceipt: false, // opcional: Imprime o recibo do Comerciante
onPixQrCode: (value) {
setState(() {
image = base64Decode(value);
});
}, // opcional: Callback para receber o QRCode do PIX
);
copied to clipboard
O método transaction retorna um Future<Transaction> com o resultado da transação, sendo Transaction um objeto com os seguintes atributos:
class Transaction {
final String? acquirerTransactionKey;
final String? actionCode;
final String? aid;
final String? amount;
final String? appLabel;
final String? arcq;
final String? authorizationCode;
final bool? capture;
final String? cardBrand;
final int? cardBrandId;
final String? cardBrandName;
final String? cardExpireDate;
final String? cardHolderName;
final String? cardHolderNumber;
final String? cardSequenceNumber;
final String? commandActionCode;
final String? date;
final String? entryMode;
final String? iccRelatedData;
final int? idFromBase;
final String? initiatorTransactionKey;
final String? instalmentTransaction;
final String? instalmentType;
final bool? isFallbackTransaction;
final List<String>? qualifiers;
final String? saleAffiliationKey;
final String? serviceCode;
final String? time;
final String? timeToPassTransaction;
final TransAppSelectedInfo? transAppSelectedInfo;
final String? transactionReference;
final String? transactionStatus;
final String? typeOfTransactionEnum;
}
copied to clipboard
class TransAppSelectedInfo {
final String? aid;
final int? brandId;
final String? brandName;
final String? cardAppLabel;
final String? paymentBusinessModel;
final TransactionTypeInfo? transactionTypeInfo;
}
copied to clipboard
class TransactionTypeInfo {
final String? appLabel;
final int? id;
final String? transTypeEnum;
}
copied to clipboard
3. Status da transação
StonePayments.onMessageListener((mensagem) {
setState(() {
texto = mensagem;
});
});
copied to clipboard
4. Imprimir textos e imagens
É necessário passar uma lista com ItemPrintModel para o método print, onde cada item da lista é uma linha do recibo, podendo ser texto ou imagem em base64.
A imagem em base64 só pode ter no máximo as dimensões de 380x595 pixels, conforme a documentação da Stone.
await StonePayments.print([
const ItemPrintModel(
type: ItemPrintTypeEnum.text,
data: 'Teste Título',
),
const ItemPrintModel(
type: ItemPrintTypeEnum.text,
data: 'Teste Subtítulo',
),
ItemPrintModel(
type: ItemPrintTypeEnum.image,
data: imgBase64,
),
],
);
copied to clipboard
Example #
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await StonePayments.activateStone(
appName: 'My App',
stoneCode: '12345678',
qrCodeAuthorization: 'TOKEN',
qrCodeProviderId: 'PROVIDER_ID',
);
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String text = 'Running';
late StreamSubscription<String> listen;
Uint8List? image;
@override
void initState() {
listen = StonePayments.onMessageListener((message) {
setState(() {
text = message;
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: SizedBox(
width: double.infinity,
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(text),
ElevatedButton(
onPressed: () async {
if (listen.isPaused) {
listen.resume();
}
try {
final result = await StonePayments.transaction(
value: 5,
typeTransaction: TypeTransactionEnum.pix,
onPixQrCode: (value) {
setState(() {
image = base64Decode(value);
});
},
);
print(result);
} catch (e) {
listen.pause();
setState(() {
text = "Falha no pagamento";
});
}
},
child: const Text('Comprar R\$5,00'),
),
if (image != null)
Image.memory(
image!,
height: 200,
),
Image.asset('assets/flutter5786.png'),
ElevatedButton(
onPressed: () async {
try {
var byteData = await rootBundle.load('assets/flutter5786.png');
var imgBase64 = base64Encode(byteData.buffer.asUint8List());
var items = [
const ItemPrintModel(
type: ItemPrintTypeEnum.text,
data: 'Teste Título',
),
const ItemPrintModel(
type: ItemPrintTypeEnum.text,
data: 'Teste Subtítulo',
),
ItemPrintModel(
type: ItemPrintTypeEnum.image,
data: imgBase64,
),
];
await StonePayments.print(items);
} catch (e) {
setState(() {
text = "Falha na impressão";
});
}
},
child: const Text('Imprimir'),
),
ElevatedButton(
onPressed: () async {
try {
await StonePayments.printReceipt(TypeOwnerPrintEnum.merchant);
} catch (e) {
setState(() {
text = "Falha na impressão";
});
}
},
child: const Text('Imprimir Via Loja'),
),
ElevatedButton(
onPressed: () async {
try {
await StonePayments.printReceipt(TypeOwnerPrintEnum.client);
} catch (e) {
setState(() {
text = "Falha na impressão";
});
}
},
child: const Text('Imprimir Via Cliente'),
),
],
),
),
),
),
);
}
}
copied to clipboard
Documentação Stone #
Você pode aprender mais sobre o SDK aqui.
Autor #
Este projeto foi desenvolvido por:
Leonardo Castro
Voltar para o topo
Pacote não oficial! #
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.