import 'dart:convert'; import 'package:SEFER/constant/api_key.dart'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/main.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import '../../../constant/links.dart'; import '../../functions/crud.dart'; import 'captain_wallet_controller.dart'; class PaymobPayout extends GetxController { bool isLoading = false; String dropdownValue = 'etisalat'; Future getToken() async { var headers = { 'Content-Type': 'application/x-www-form-urlencoded', // 'Cookie': // 'csrftoken=74iZJ8XYyuTm5WRq2W4tpWX5eqoJLZVK5QhuDrChWpDtzpgGA269bbCWuEcW85t4' }; var body = { 'grant_type': 'password', 'username': AK.payMobOutUserName, 'password': AK.payMobOutPassword, 'client_id': AK.payMobOutClient_id, 'client_secret': AK.payMobOutClientSecrret }; var res = await http.post( Uri.parse('https://payouts.paymobsolutions.com/api/secure/o/token/'), headers: headers, body: body, ); String token = ''; if (res.statusCode == 200) { var decode = jsonDecode(res.body); token = decode['access_token']; } return token; } int payOutFee = 5; payToDriverWallet( String token, String amount, String issuer, String msisdn) async { var headers = { 'Authorization': 'Bearer $token', 'Content-Type': 'application/json', }; var body = json.encode({ "amount": amount, //"10.00", "issuer": issuer, //"vodafone", "msisdn": msisdn, // "01023456789" }); var res = await http.post( Uri.parse('https://paymobsolutions.com/api/secure/disburse/'), headers: headers, body: body, ); var dec = jsonDecode(res.body); if (dec['disbursement_status'] == 'successful') { var paymentToken = await Get.find() .generateToken(((-1) * (double.parse(dec['amount'])) - payOutFee) .toStringAsFixed(0)); await CRUD().post(link: AppLink.addDrivePayment, payload: { 'rideId': DateTime.now().toIso8601String(), 'amount': ((-1) * (double.parse(dec['amount'])) - payOutFee) .toStringAsFixed(0), 'payment_method': 'payout', 'passengerID': 'myself', 'token': paymentToken, 'driverID': box.read(BoxName.driverID).toString(), }); await Get.find() .addSeferWallet('payout fee myself', payOutFee.toString()); await updatePaymentToPaid(box.read(BoxName.driverID).toString()); await sendEmail( box.read(BoxName.driverID).toString(), amount, box.read(BoxName.phoneDriver).toString(), box.read(BoxName.nameDriver).toString(), 'Wallet', box.read(BoxName.emailDriver).toString()); Get.snackbar('Transaction successful'.tr, '${'Transaction successful'.tr} ${dec['amount']}', backgroundColor: AppColor.greenColor); Get.find().getCaptainWalletFromRide(); } else if (dec['disbursement_status'] == 'failed') { Get.snackbar('Transaction failed'.tr, 'Transaction failed'.tr, backgroundColor: AppColor.redColor); } } Future updatePaymentToPaid(String driverID) async { await CRUD().post(link: AppLink.updatePaymetToPaid, payload: { 'driverID': driverID.toString(), }); } Future sendEmail( String driverId, amount, phone, name, bankCardNumber, email) async { await CRUD().sendEmail(AppLink.sendEmailToDrivertransaction, { "driverID": driverId, "total_amount": amount, "phone": phone, "name_arabic": name, "accountBank": bankCardNumber, "email": email }); } payToDriverBankAccount(String token, String amount, String bankCardNumber, String bankCode) async { var headers = { 'Authorization': 'Bearer $token', 'Content-Type': 'application/json', }; var body = { "issuer": "bank_card", "amount": amount, //9.0, "full_name": '${box.read(BoxName.nameDriver)} ${box.read(BoxName.lastNameDriver)}', "bank_card_number": bankCardNumber, //"1111-2222-3333-4444", "bank_code": bankCode, //"CIB", "bank_transaction_type": "cash_transfer" }; var res = await http .post( Uri.parse('https://paymobsolutions.com/api/secure/disburse/'), headers: headers, body: body, ) .then((value) {}); } Future payToWalletDriverAll( String amount, String issuer, String msisdn) async { String token = await getToken(); await payToDriverWallet(token, amount, issuer, msisdn); } Future payToBankDriverAll( String amount, String bankCardNumber, String bankCode) async { String token = await getToken(); await payToDriverBankAccount(token, amount, bankCardNumber, bankCode); } }