apskel-pos-flutter/lib/data/datasources/midtrans_remote_datasource.dart

74 lines
2.3 KiB
Dart
Raw Normal View History

2025-07-30 22:38:44 +07:00
import 'dart:convert';
import 'dart:developer';
import 'package:enaklo_pos/data/datasources/auth_local_datasource.dart';
import 'package:enaklo_pos/data/models/response/qris_response_model.dart';
import 'package:enaklo_pos/data/models/response/qris_status_response_model.dart';
import 'package:http/http.dart' as http;
class MidtransRemoteDatasource {
String generateBasicAuthHeader(String serverKey) {
final base64Credentials = base64Encode(utf8.encode('$serverKey:'));
final authHeader = 'Basic $base64Credentials';
return authHeader;
}
Future<QrisResponseModel> generateQRCode(
String orderId, int grossAmount) async {
final serverKey = await AuthLocalDataSource().getMitransServerKey();
final headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': generateBasicAuthHeader(serverKey),
};
final body = jsonEncode({
'payment_type': 'gopay',
'transaction_details': {
'gross_amount': grossAmount,
'order_id': orderId,
},
});
final response = await http.post(
Uri.parse('https://api.midtrans.com/v2/charge'),
// Uri.parse('https://api.sandbox.midtrans.com/v2/charge'),
headers: headers,
body: body,
);
log("StatusCode: ${response.statusCode}");
log("Body: ${response.body}");
if (response.statusCode == 200 || response.statusCode == 201) {
return QrisResponseModel.fromJson(response.body);
} else {
throw Exception('Failed to generate QR Code');
}
}
Future<QrisStatusResponseModel> checkPaymentStatus(String orderId) async {
final serverKey = await AuthLocalDataSource().getMitransServerKey();
final headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': generateBasicAuthHeader(serverKey),
};
final response = await http.get(
Uri.parse('https://api.midtrans.com/v2/$orderId/status'),
// Uri.parse('https://api.sandbox.midtrans.com/v2/$orderId/status'),
headers: headers,
);
log("StatusCode: ${response.statusCode}");
log("Body: ${response.body}");
if (response.statusCode == 200 || response.statusCode == 201) {
return QrisStatusResponseModel.fromJson(response.body);
} else {
throw Exception('Failed to check payment status');
}
}
}