From 7ce48e5ca9359335517852328e99798ff34817a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=A6=8C=EA=A6=AB=EA=A6=B6=EA=A6=8F=EA=A7=80=EA=A6=A6?= =?UTF-8?q?=EA=A6=BF=EA=A6=A7=EA=A6=AE=EA=A6=91=EA=A6=A9=EA=A6=AD=EA=A7=80?= Date: Sun, 9 Oct 2022 17:53:58 +0800 Subject: Midtrans as a Dart class --- midtrans.dart | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 10 deletions(-) diff --git a/midtrans.dart b/midtrans.dart index 1133d78..c70c55e 100644 --- a/midtrans.dart +++ b/midtrans.dart @@ -1,3 +1,9 @@ +import 'dart:ffi'; +import 'dart:io'; + +import 'package:ffi/ffi.dart'; +import 'package:path/path.dart' as path; + class MidtransTransaction extends Struct { external Pointer order_id; @@ -5,17 +11,71 @@ class MidtransTransaction extends Struct { external long gross_amount; } -typedef MidtransInitNative = Void Function(Pointer apiKey, - Pointer caInfo) -typedef MidtransInit = void Function(Pointer apiKey, Pointer caInfo) +class MidtransBanktransfer extends Struct { + external Pointer bank; + external Pointer va_number; + external Pointer bca; + external Pointer permata; +} + +class Midtrans { + final DynamicLibrary dylib; + + Midtrans(String apiKey, String caInfo) { + dylib = Platform.isAndroid + ? DynamicLibrary.open('libmidtrans.so') + : DynamicLibrary.process(); -typedef MidtransChargeNative = Void Function(Int32 type, Pointer, - Pointer, Array>) -typedef MidtransCharge = void Function(int type, Pointer, - Pointer, Array>) + final apiKeyUtf8 = apiKey.toNativeUtf8(); + final caInfoUtf8 = caInfo.toNativeUtf8(); + final midtrans_init = dylib.lookupFunction + , Pointer), + void Function(Pointer, Pointer)> + ('midtrans_init'); + midtrans_init(apiKeyUtf8, caInfoUtf8); + calloc.free(apiKeyUtf8); + calloc.free(caInfoUtf8); + } -typedef MidtransCleanupNative = Void Function() -typedef MidtransCleanup = void Function() + void charge(Pointer payment, + Pointer transaction, + Array> customFields) { + if (payment is MidtransBanktransfer) { + final midtrans_charge = dylib.lookupFunction + , + Pointer, + Array>), + void Function(Pointer, + Pointer, + Array>)> + ('midtrans_charge_banktransfer'); + midtrans_charge(payment, transaction, customFields); + calloc.free((payment as MidtransBanktransfer).bank); + if ((payment as MidtransBanktransfer).va_number + != null) { + calloc.free((payment as MidtransBanktransfer) + .va_number); + } + if ((payment as MidtransBanktransfer).bca != null) { + calloc.free((payment as MidtransBanktransfer) + .bca); + } + if ((payment as MidtransBanktransfer).permata != null) { + calloc.free((payment as MidtransBanktransfer) + .permata); + } + } + calloc.free(transaction.order_id); + for (var i = 0; i < 6; i++) { + if (customFields[i] != null) { + calloc.free(customFields[i]); + } + } + } -void main() { + void cleanup() { + final midtrans_cleanup = dylib.lookupFunction('midtrans_cleanup'); + midtrans_cleanup(); + } } -- cgit v1.2.3