pluspay_a2a 0.7.0
pluspay_a2a: ^0.7.0 copied to clipboard
PlusPay A2A (app-to-app) payment plugin for Android POS devices — start payments, EOD, refunds and transaction queries.
pluspay_a2a #
POS+ (Pluspay) Android uygulaması ile App-to-App (A2A) iletişim kurmak için geliştirilmiş Flutter eklentisi. Bu paket, Flutter uygulamanızdan POS+ uygulamasını başlatarak ödeme, iptal, EFT işlemleri, sipariş ödemeleri, gün sonu raporları ve parametre güncellemeleri yapmanızı sağlar.
Not: Bu paket yalnızca Android platformunu desteklemektedir. iOS desteği bulunmamaktadır.
Kurulum #
Aşağıdaki komutu çalıştırın:
flutter pub add pluspay_a2a
Veya pubspec.yaml dosyanıza elle ekleyip flutter pub get çalıştırın:
dependencies:
pluspay_a2a: ^0.7.0
Not: Mevcut versiyonları pub.flutter-io.cn/packages/pluspay_a2a sayfasından görebilirsiniz.
Hızlı Başlangıç #
import 'package:pluspay_a2a/pluspay_a2a.dart';
// 1. İstemciyi oluşturun ve başlatın
final pluspay = PPA2AClient();
await pluspay.initialize();
// 2. Ödeme başlatın
try {
final result = await pluspay.startPayment(
PPStartPaymentRequestModel.toRequest(
clientToken: 'YOUR-CLIENT-TOKEN',
orderCode: 'ORD-001',
totalAmount: 150.0,
paymentType: PPPaymentType.POS,
paymentMethod: PPPaymentMethod.CC,
),
);
print('Ödeme başarılı: ${result.id}');
} on PPA2AException catch (e) {
print('Ödeme başarısız: ${e.errorCode} - ${e.message}');
}
// 3. İşiniz bittiğinde kaynakları temizleyin
await pluspay.dispose();
İstemci Metodları #
Tüm metodlar PPA2AClient sınıfı üzerindedir. Her metod başarılı durumda tipli bir response modeli döner, hata durumunda PPA2AException fırlatır.
| Metod | İstek Modeli | Yanıt Modeli | Açıklama |
|---|---|---|---|
startPayment |
PPStartPaymentRequestModel |
PPStartPaymentResponseModel |
Ödeme başlat |
cancelPayment |
PPCancelPaymentRequestModel |
PPStartPaymentResponseModel |
Ödeme iptal et |
startEftPayment |
PPEftPaymentRequestModel |
PPStartPaymentResponseModel |
EFT POS ödemesi başlat |
cancelEftPayment |
PPEftCancelRequestModel |
PPStartPaymentResponseModel |
EFT POS ödemesini iptal et |
startOrderPayment |
PPOrderPaymentRequestModel |
PPOrderPaymentResponseModel |
Sipariş ödemesi başlat |
startMultiPayment |
PPMultiPaymentRequest |
PPMultiPaymentResponseModel |
Çoklu ödeme başlat |
createOrder |
PPOrderCreateRequest |
PPOrderCreateResponseModel |
Ödeme başlatmadan sipariş oluştur |
triggerEod |
PPEodRequestModel |
PPEodResponseModel |
Gün sonu tetikle |
triggerParameters |
PPParameterRequestModel |
PPParametersResponseModel |
Parametre güncellemesi tetikle |
getAvailablePaymentMethods |
PPAvailablePaymentMethodsRequestModel |
PPAvailablePaymentMethodsResponseModel |
Aktif/kullanılabilir ödeme yöntemlerini sorgula |
İstek Modelleri #
Her istek modeli, düz ve kullanışlı bir API sunan toRequest factory constructor'ına sahiptir. İlgili alanları doğrudan geçirirsiniz; model dahili header + data yapısını sizin için oluşturur.
Ödeme Başlat #
PPStartPaymentRequestModel.toRequest(
clientToken: 'YOUR-CLIENT-TOKEN',
orderCode: 'ORD-001',
totalAmount: 100.0,
paymentType: PPPaymentType.POS,
paymentMethod: PPPaymentMethod.CC,
installment: 3, // opsiyonel
isPartial: false, // opsiyonel, varsayılan: false
partialType: null, // opsiyonel
products: [], // opsiyonel
billingInformation: null, // opsiyonel
);
Ödeme İptal #
PPCancelPaymentRequestModel.toRequest(
clientToken: 'YOUR-CLIENT-TOKEN',
orderCode: 'ORD-001',
transactionId: 'TX-123',
note: 'Müşteri iptali talep etti', // opsiyonel
);
EFT Ödeme #
PPEftPaymentRequestModel.toRequest(
clientToken: 'YOUR-CLIENT-TOKEN',
totalAmount: 250.0,
paymentType: PPPaymentType.POS,
paymentMethod: PPPaymentMethod.CC,
transactionId: 'EFT-001',
taxRate: 18,
installment: null, // opsiyonel
);
EFT İptal #
PPEftCancelRequestModel.toRequest(
clientToken: 'YOUR-CLIENT-TOKEN',
transactionId: 'EFT-001',
totalAmount: 250.0,
);
Sipariş Ödemesi #
PPOrderPaymentRequestModel.toRequest(
clientToken: 'YOUR-CLIENT-TOKEN',
orderCode: 'ORD-001',
);
Gün Sonu (EOD) #
PPEodRequestModel.toRequest(
clientToken: 'YOUR-CLIENT-TOKEN',
isAll: false,
types: [PPEodType.POS, PPEodType.MULTINET],
);
Parametre Yükleme #
PPParameterRequestModel.toRequest(
clientToken: 'YOUR-CLIENT-TOKEN',
isAll: true,
types: null,
);
Mevcut Ödeme Yöntemleri #
POS+ üzerinde o an aktif/kullanılabilir ödeme tiplerini ve yöntemlerini sorgular. Ekstra parametre gerektirmez.
PPAvailablePaymentMethodsRequestModel.toRequest();
Sipariş Oluşturma (Order Create) #
Ödeme başlatmadan yalnızca sipariş oluşturur. Oluşturulan sipariş daha sonra aynı orderCode ile startOrderPayment üzerinden tahsil edilebilir. orderCode POS+ üzerinde zaten kayıtlıysa sipariş güncellenir.
PPOrderCreateRequest.toRequest(
orderCode: 'ORD-001',
orderDate: DateTime.now(),
products: [
ProductModel(
id: 1,
sku: 'SKU-001',
title: 'Ürün 1',
price: 100.0,
quantity: 1,
taxRate: 10,
unit: PPQtyEnums.ADET,
vatInclude: true,
productType: PPProductTypeEnum.PHYSICALLY,
discountValue: 0,
),
],
currency: PPCurrencyType.TRY, // opsiyonel, varsayılan: TRY
deliveryType: PPDeliveryTypeEnum.CASH_ORDER, // opsiyonel, varsayılan: CASH_ORDER
discountAmount: 0, // opsiyonel, varsayılan: 0
billingInformation: null, // opsiyonel
installment: null, // opsiyonel
groupCode: null, // opsiyonel
note: null, // opsiyonel
);
Yanıt PPOrderCreateResponseModel (PPMultiPaymentResponseModel ile aynı sipariş detayı yapısı) döner.
Çoklu Ödeme (Multi Payment) #
PPMultiPaymentRequest.toRequest(
orderCode: 'ORD-001',
orderDate: DateTime.now(),
changePaymentStatus: true,
products: [
ProductModel(
id: 1,
sku: 'SKU-001',
title: 'Ürün 1',
price: 100.0,
quantity: 1,
taxRate: 10,
unit: PPQtyEnums.ADET,
vatInclude: true,
productType: PPProductTypeEnum.PHYSICALLY,
discountValue: 0,
otvOrani: 0, // opsiyonel, varsayılan: 0
konaklamaOrani: 0, // opsiyonel, varsayılan: 0
),
],
transactions: [
TransactionModel(
paymentType: PPPaymentType.POS,
totalAmount: 100.0,
paymentMethod: PPPaymentMethod.CC,
),
],
currency: PPCurrencyType.TRY, // opsiyonel, varsayılan: TRY
deliveryType: PPDeliveryTypeEnum.CASH_ORDER, // opsiyonel, varsayılan: CASH_ORDER
discountAmount: 0, // opsiyonel, varsayılan: 0
billingInformation: null, // opsiyonel
installment: null, // opsiyonel
groupCode: null, // opsiyonel
note: null, // opsiyonel
canTryAgain: true, // opsiyonel, varsayılan: true
);
Yanıt Modelleri #
PPStartPaymentResponseModel #
startPayment, cancelPayment, startEftPayment ve cancelEftPayment metodları tarafından döndürülür.
| Alan | Tip | Açıklama |
|---|---|---|
id |
String |
İşlem ID |
orderCode |
String |
Sipariş kodu |
paymentType |
PPPaymentType |
Kullanılan ödeme tipi |
paymentMethod |
PPPaymentMethod |
Kullanılan ödeme yöntemi |
totalAmount |
double |
Toplam tutar |
totalPaid |
double? |
Ödenen tutar |
amountDue |
double? |
Kalan tutar |
isPartial |
bool |
Parçalı ödeme olup olmadığı |
partialType |
PPPartialPaymentType? |
Parçalı ödeme tipi |
source |
String? |
Kaynak bilgisi |
status |
String? |
Durum metni |
actionStatus |
bool? |
İşlem başarı durumu |
invoice |
PPInvoiceModel? |
Fatura detayları |
payment |
PPPaymentModel? |
Ödeme detayları (RRN, maskelenmiş kart, slip) |
delivery |
PPDeliveryModel? |
Teslimat detayları |
PPOrderPaymentResponseModel #
startOrderPayment metodu tarafından döndürülür.
| Alan | Tip | Açıklama |
|---|---|---|
grandTotal |
double |
Genel toplam |
status |
PPOrderStatusEnum |
Sipariş durumu |
orderCode |
String |
Sipariş kodu |
totalAmount |
double |
Toplam tutar |
totalPaid |
double |
Ödenen tutar |
amountDue |
double |
Kalan tutar |
results |
List<PPOrderTransactionResult> |
İşlem sonuçları |
PPEodResponseModel #
triggerEod metodu tarafından döndürülür.
| Alan | Tip | Açıklama |
|---|---|---|
results |
List<PPEodResponseItem> |
Tip bazında gün sonu sonuçları |
Her PPEodResponseItem; eodType (PPEodType), success (bool) ve opsiyonel errorMessage alanlarını içerir.
PPParametersResponseModel #
triggerParameters metodu tarafından döndürülür.
| Alan | Tip | Açıklama |
|---|---|---|
results |
List<PPParameterResultModel> |
Parametre güncelleme sonuçları |
Her PPParameterResultModel; type (PPParameterTypes), completed (bool) ve opsiyonel errorMessage alanlarını içerir.
PPAvailablePaymentMethodsResponseModel #
getAvailablePaymentMethods metodu tarafından döndürülür. Liste, oturumun profil/cihaz filtrelerinden geçmiş hâliyle döner — yani "şu an gerçekten yapılabilecek" ödeme yöntemleridir.
| Alan | Tip | Açıklama |
|---|---|---|
paymentTypes |
List<PPPaymentTypeMethodsModel> |
Aktif ödeme tipleri |
Her PPPaymentTypeMethodsModel:
| Alan | Tip | Açıklama |
|---|---|---|
code |
PPPaymentType |
Ödeme tipi |
methods |
List<PPPaymentMethod> |
O tip için kullanılabilir yöntemler |
title |
String? |
Görünen ad (opsiyonel) |
final res = await pluspay.getAvailablePaymentMethods(
PPAvailablePaymentMethodsRequestModel.toRequest(),
);
for (final type in res.paymentTypes) {
print('${type.code} -> ${type.methods}');
}
PPMultiPaymentResponseModel #
startMultiPayment metodu tarafından döndürülür.
| Alan | Tip | Açıklama |
|---|---|---|
id |
String |
İşlem ID |
orderCode |
String |
Sipariş kodu |
products |
List<PPMultiPaymentProduct> |
Ürün detayları |
transactions |
List<PPMultiPaymentTransaction> |
İşlem detayları |
paymentType |
PPPaymentType |
Ödeme tipi |
paymentMethod |
PPPaymentMethod |
Ödeme yöntemi |
status |
PPOrderStatusEnum |
Sipariş durumu |
totalAmount |
double |
Toplam tutar |
discountAmount |
double |
İndirim tutarı |
subTotal |
double |
Ara toplam |
taxAmount |
double |
Vergi tutarı |
grandTotal |
double |
Genel toplam |
totalPaid |
double |
Ödenen tutar |
amountDue |
double |
Kalan tutar |
preTotal |
PPMultiPaymentPreTotal |
Ön toplam bilgileri |
deliveryType |
PPDeliveryTypeEnum |
Teslimat tipi |
customer |
PPMultiPaymentCustomer? |
Müşteri bilgileri |
Enum'lar #
PPPaymentType #
POS+ tarafından desteklenen ödeme tipleri.
POS, PAYCELL, HEPSIPAY, ISTANBULCARD, CASH, ONLINE, BANK_TRANSFER, GASTROPAY, CIO_CARD, IWALLET, PAYE, MULTINET, METROPOL, FASTPAY, TICKET, EDENRED, SETCARD, SODEXO, GETIRPAY, TOKENFLEX, YEMEKMATIK, ON_CREDIT, VIRTUAL_POS, CUZDANPLUS
PPPaymentMethod #
POS+ tarafından desteklenen ödeme yöntemleri.
CC, CASH, QR, QR_R, NFC, QUICKCODE, MOBILE, SWIPE, NONE, ONLINE, TRENDYOL, GETIR, YEMEKSEPETI, MIGROSYEMEK
PPEodType #
Gün sonu rapor tipleri.
POS, CASH, BANK_TRANSFER, ONLINE, OTHER, MULTINET, SODEXO, SETCARD, TICKET, METROPOL, PAYE, TOKENFLEX, EDENRED, CUZDANPLUS, IWALLET
PPParameterTypes #
Parametre güncelleme tipleri.
bank, multinet, metropol, paye, iwallet
PPPartialPaymentType #
AMOUNT, PRODUCT
PPOrderStatusEnum #
CANCEL, NOT_RESPONSE, WAITING, SUCCESS
PPDeliveryStatusEnum #
WAITING, PREPREING, READY, ONWAY, COMPLETE, CANCEL
PPDeliveryTypeEnum #
CASH_ORDER, PACKAGE_ORDER, TABLE_ORDER, TAKE_AWAY, TAKE_CLOSE
PPCurrencyType #
TRY, USD, EUR, GBP
PPProductTypeEnum #
PHYSICALLY, VIRTUAL, INFO, MD, DSN, QP, KFO, COMMISSION, HGS
PPQtyEnums #
Miktar birimleri.
ADET, KG, GR, LT, MT, KOLI, PAKET, PORSIYON
PPDiscountTypeEnum #
PERCENTAGE, FIXED_AMOUNT
PPDocumentTypeEnum #
EFATURA, EARSIV, BILGIFISI
PPDocumentStatusEnum #
SUCCESS, CANCEL, FAIL, WAITING, NONE
PPTransactionStatusEnum #
SUCCESS, CANCEL, FAIL, NONE, WAITING, NOT_RESPONSE
PPTransactionTypeEnum #
START, SATIS, CANCEL, REFUND
PPOrderSourceEnum #
POS, WEB, KIOSK
Hata Yönetimi #
POS+ bir hata yanıtı döndürdüğünde (örn. yetersiz bakiye, kullanıcı iptali), istemci PPA2AException fırlatır:
try {
final result = await pluspay.startPayment(request);
} on PPA2AException catch (e) {
print(e.errorCode); // örn. "PP-A2A-006"
print(e.message); // örn. "İşlem kullanıcı veya sistem tarafından iptal edildi!"
}
İstemci tarafındaki hatalar için de aynı exception fırlatılır:
| Hata Kodu | Açıklama |
|---|---|
LAUNCH_INTENT_ERROR |
POS+ uygulaması başlatılamadı |
PP-A2A-PARSE |
Yanıt JSON'ı ayrıştırılamadı |
PP-A2A-* |
POS+ tarafından döndürülen hata kodları |
Yaşam Döngüsü #
class _MyPageState extends State<MyPage> {
final _pluspay = PPA2AClient();
@override
void initState() {
super.initState();
_pluspay.initialize();
}
@override
void dispose() {
_pluspay.dispose();
super.dispose();
}
}
initialize() diğer tüm metodlardan önce çağrılmalıdır. Uygulamanın paket bilgilerini alır ve POS+ sonuçları için bir broadcast receiver kaydeder. İstemciye artık ihtiyaç kalmadığında receiver'ı temizlemek için dispose() çağrılmalıdır.
Gereksinimler #
- Yalnızca Android
- Cihazda POS+ uygulaması yüklü olmalıdır
- Minimum SDK: 24