stone_payment_tech 0.0.2
stone_payment_tech: ^0.0.2 copied to clipboard
Plugin Flutter para integrar sua aplicação com o SDK Android da Stone para meios de pagamento.
Stone Payment Tech #
Plugin Flutter não oficial para integração com o SDK da Stone Smart POS.
Compatível com maquininhas Android inteligentes.
Sobre • Tecnologias • Instalação • Configuração de Flavors • Uso • Modelo de Resposta •
🚨 Aviso #
Este plugin é não oficial e foi desenvolvido de forma independente para facilitar a integração de pagamentos via SDK da Stone em dispositivos Android Smart POS.
🎯 Sobre #
O stone_payment_tech é um plugin Flutter para integração direta com o SDK Stone, permitindo a realização de transações em maquininhas smart Android.
Gradle #
O gradle.wrapper.properties utilizado está na versão 8.9 kotlin_version = '1.9.0' stone_sdk_version = '4.11.5' classpath 'com.android.tools.build:gradle:8.7.3'
🔐 Licenciamento #
Para adquirir uma licença, cadastre-se no site Licença JY Labtech.
Cada licença é válida por terminal. Após a compra, será gerada uma chave licenceKey vinculada ao terminal.
Inicialização com licença #
await StonePaymentTech.initPayment(
handler: controller,
licenceKey: 'SUA_CHAVE',
);
✅ Máquinas compatíveis #
- Positivo L300
- Positivo L400
- Ingenico APOS A8
- Sunmi P2
- Gertec GPOS700X
- Tectoy T2
🚀 Tecnologias #
- Flutter
- SDK Stone
v4.11.5 - Comunicação via Platform Channels
⚙️ Instalação #
1. pubspec.yaml #
Adicione a dependência:
dependencies:
stone_payment_tech: any
2. build.gradle #
No arquivo android/app/build.gradle, defina o minSdkVersion como 23:
defaultConfig {
...
minSdkVersion 23
...
}
⚠️ O SDK da Stone requer
minSdkVersion >= 23.
🧩 Configuração de Flavors #
Para utilizar o plugin corretamente, você precisa configurar os seguintes productFlavors e signingConfigs no android/app/build.gradle do seu projeto:
👇 Exemplo completo: #
...
android {
....
signingConfigs {
release {
storeFile keyProperties.storeFile
keyAlias keyProperties.keyAlias
keyPassword keyProperties.keyPassword
storePassword keyProperties.storePassword
}
}
flavorDimensions "model"
productFlavors {
gertecGPOS700X {
dimension "model"
signingConfig signingConfigs.release
}
positivoSeriesL {
dimension "model"
signingConfig signingConfigs.release
}
sunmi {
dimension "model"
signingConfig signingConfigs.release
}
tectoySeriesT {
dimension "model"
signingConfig signingConfigs.release
}
ingenico {
dimension "model"
signingConfig signingConfigs.release
}
}
}
✅ Importante: mesmo que o seu projeto não use todos os modelos, você precisa declarar todos os
flavorspara evitar erro de compilação, pois o plugin depende da estrutura deles.
⚠️ O SDK da Stone requer
minSdkVersion >= 23.
📦 Uso #
Criando um StoneHandler #
Crie uma classe que estenda IStoneHandler. Essa será responsável por monitorar os eventos e respostas da Stone:
class StoneHandler extends IStoneHandler {
final Function(StoneTransaction?)? onTransaction;
final Function(String)? onMessageMonitor;
StoneHandler({this.onTransaction, this.onMessageMonitor});
@override
Future<void> onError(String message) async {}
@override
Future<void> onMessage(String message) async {}
@override
Future<void> onFinishedResponse(String message) async {}
@override
Future<void> onChanged(String message) async {}
@override
Future<void> onAuthProgress(String message) async {}
@override
Future<void> onTransactionSuccess() async {}
@override
Future<void> onLoading(bool show) async {}
}
Iniciando uma transação #
Ative primeiro o pinpad com seu StoneCode:
StoneTech.I.payment.activePinpad(stoneCode: '12345');
Após ativar, você pode iniciar uma das transações disponíveis:
StoneTech.I.payment.creditPayment(12.50);
StoneTech.I.payment.creditPaymentParc(value: 12.50, installment: 2);
StoneTech.I.payment.debitPayment(12.50);
StoneTech.I.payment.voucherPayment(12.50);
StoneTech.I.payment.pixPayment(
amount: 1250,
qrCodeAuthorization: '',
qrCodeProviderid: '',
);
StoneTech.I.payment.cancelTransaction(
amount: 12.50,
transactionType: PaymentTypeTransaction.CREDIT,
);
StoneTech.I.payment.abortTransaction();
🔖 Obs: o SDK imprime automaticamente a via do consumidor.
📥 Callbacks implementáveis (StoneHandler) #
| Método | Descrição |
|---|---|
onAbortedSuccessfully |
Transação abortada com sucesso |
onAuthProgress |
Status de autenticação (inclui PIN pad) |
onError |
Erro em uma operação |
onMessage |
Mensagem bruta vinda da Stone |
onFinishedResponse |
Resultado final da transação |
onTransactionSuccess |
Sucesso da transação |
📄 Modelo de resposta #
Exemplo: onAuthProgress, onChanged, onError #
{
"method": "transaction",
"message": "Transação aprovada",
"errorMessage": "",
"result": 0
}
Exemplo: onFinishedResponse #
{
"method": "transaction",
"idFromBase": 0,
"amount": 1250,
"cardHolderNumber": "",
"cardBrand": "",
"date": "",
"time": "",
"aid": "",
"arcq": "",
"transactionReference": "",
"saleAffiliationKey": "",
"entryMode": "",
"typeOfTransactionEnum": "",
"serialNumber": "",
"manufacture": "",
"actionCode": "",
"transactionStatus": "",
"messageFromAuthorize": "",
"errorMessage": "",
"result": 0
}
❗ Observações importantes #
- Para transações PIX, forneça
qrCodeAuthorizationeqrCodeProviderid. - Para exibir QRCode (campo
method: QRCode), o retorno virá emmessagecomo uma imagem emBitmapconvertida paraString. - O método
getAllTransactions()pode ser usado para buscar transações anteriores para fins de estorno.
💡 Dica #
A resposta mais completa da SDK Stone virá sempre no método onFinishedResponse. Use o campo method da resposta para identificar o tipo de evento:
void onFinishedResponseMonitor(StoneTransaction? stoneTransaction) {
switch (stoneTransaction?.method) {
case 'active':
// Terminal ativado
break;
case 'transaction':
// Transação finalizada
break;
case 'abort':
case 'abortPix':
case 'cancel':
case 'printer':
case 'QRCode':
// Exibir QR Code
break;
case 'PaymentOptions':
// Use _stoneTech.payment.setPaymentOption(option: ...)
break;
case 'reversal':
break;
default:
}
}