From 10c92520b88e1f1396ef7661cc42ad86d9a7c110 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Wed, 25 Oct 2023 18:00:11 +0300 Subject: [PATCH] 10/25/1 --- lib/constant/credential.dart | 10 +++++- lib/constant/info.dart | 2 +- lib/controller/functions/crud.dart | 19 +++++++++++ .../payment/payment_controller.dart | 33 ++++++++++++++++++- lib/controller/payment/stripe.dart | 0 lib/main.dart | 6 ++-- lib/views/Rate/ride_calculate_driver.dart | 2 +- lib/views/home/Captin/home_captin.dart | 9 +++++ .../home/my_wallet/passenger_wallet.dart | 8 ++--- 9 files changed, 79 insertions(+), 10 deletions(-) create mode 100644 lib/controller/payment/stripe.dart diff --git a/lib/constant/credential.dart b/lib/constant/credential.dart index e9c7249..5aeefb7 100644 --- a/lib/constant/credential.dart +++ b/lib/constant/credential.dart @@ -10,6 +10,7 @@ class AppCredintials { static const String twilloRecoveryCode = 'TQF13XUVU2NJ3VFU8JWBWYBS'; static const String accountSIDTwillo = 'ACb4ad857efe0903bfd6238a763a2ce4d1'; static const String authTokenTwillo = '14f39ef4628bb8a4f18469f462f8af75'; + static const String Publishablekey = '14f39ef4628bb8a4f18469f462f8af75'; String getBasicAuthCredentials() { return base64Encode(utf8.encode(basicAuthCredentials)); } @@ -18,6 +19,13 @@ class AppCredintials { 'Authorization:API_EMDJX6BHQ67DBGT6WV:DG2XPU7YEN02M0VJ2F'; } +class StripeKey { + static const String publishableKey = + 'pk_test_51O4WTODMEVrOCA5SN5e6b8pAvF5CPDC3c3Pif18q74NEQApU5AfmZZEN9X2WIayfIrUTjju1pUavmgoeLgb3FR5k00pn4oMHGO'; + static const String secretKey = + 'sk_test_51O4WTODMEVrOCA5SBgaoSS69nNFRyfZx2Tl5ODswYyjqLpc0RxBHW3hhcP38Tp78TZ1PQoZo7eHFllRiQd3rMHPN00Lr9WD3n2'; +} + class MyClass { static const String mapAPIKEY = 'AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0'; static const String twilloRecoveryCode = 'TQF13XUVU2NJ3VFU8JWBWYBS'; @@ -51,4 +59,4 @@ class MyClass { } } // Modified API Key: AIzaSyCyfwRXTwSTLOFc57cb9e210a21def772cad3cd9ef83247e70bed77da89a64c9a5e91e7f3348dbQSQgN5p7QZgGJVZnEKq0 -// I/flutter ( 5490): Final API Key: AIzaSyCyfwRXTwSTLOFc57cb9e210a21def772cad3cd9ef83247e70bed77da89a64c9a5e91e7f3348dbQSQgN5p7QZgGJVZnEKq0 \ No newline at end of file +// I/flutter ( 5490): Final API Key: AIzaSyCyfwRXTwSTLOFc57cb9e210a21def772cad3cd9ef83247e70bed77da89a64c9a5e91e7f3348dbQSQgN5p7QZgGJVZnEKq0 diff --git a/lib/constant/info.dart b/lib/constant/info.dart index 7305137..0352a42 100644 --- a/lib/constant/info.dart +++ b/lib/constant/info.dart @@ -1,4 +1,4 @@ -class AppInfo { +class AppInformation { static const String companyName = 'Mobile-App'; static const String appName = 'SEFER'; static const String phoneNumber = '962798583052'; diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index 0bade75..72b907a 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -33,6 +33,25 @@ class CRUD { } } + Future postStripe({ + required String link, + Map? payload, + }) async { + var url = Uri.parse( + link, + ); + var response = await http.post( + url, + body: payload, + headers: { + "Content-Type": "application/x-www-form-urlencoded", + 'Authorization': 'Bearer ${StripeKey.secretKey}', + }, + ); + + return response.body; + } + Future post({ required String link, Map? payload, diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart index a008424..2877912 100644 --- a/lib/controller/payment/payment_controller.dart +++ b/lib/controller/payment/payment_controller.dart @@ -1,7 +1,9 @@ import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:flutter_stripe/flutter_stripe.dart'; import 'package:get/get.dart'; +import 'package:ride/constant/credential.dart'; import 'package:ride/controller/home/map_passenger_controller.dart'; import '../../constant/box_name.dart'; @@ -58,7 +60,7 @@ class PaymentController extends GetxController { update(); } - void applyPromoCodetoPassenger() async { + void applyPromoCodeToPassenger() async { //TAWJIHI CRUD().get(link: AppLink.getPassengersPromo, payload: { 'promo_code': promo.text, @@ -77,6 +79,35 @@ class PaymentController extends GetxController { }); } + Future makePayment(int amount, String currency) async { + try { + String clientSecret = + await _getClientSecret((amount).toString(), currency); + await initializePaymentSheet(clientSecret); + await Stripe.instance.presentPaymentSheet(); + } catch (e) { + throw Exception(e.toString()); + } + } + + Future initializePaymentSheet(String clientSecret) async { + Stripe.instance.initPaymentSheet( + paymentSheetParameters: SetupPaymentSheetParameters( + paymentIntentClientSecret: clientSecret, + merchantDisplayName: 'Sefer', + ), + ); + } + + Future _getClientSecret(String amount, currency) async { + var res = await CRUD().postStripe( + link: 'https://api.stripe.com/v1/payment_intents', + payload: {'amount': amount, 'currency': currency}, + ); + final jsonResponse = jsonDecode(res); + return jsonResponse['client_secret']; + } + @override void onInit() { getPassengerWallet(); diff --git a/lib/controller/payment/stripe.dart b/lib/controller/payment/stripe.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/main.dart b/lib/main.dart index 3223abc..2b85b4d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,8 +3,10 @@ import 'dart:io'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_stripe/flutter_stripe.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; +import 'package:ride/constant/credential.dart'; import 'package:ride/constant/info.dart'; import 'package:ride/views/auth/captin/login_captin.dart'; import 'package:ride/views/auth/login_page.dart'; @@ -31,7 +33,7 @@ Future backgroundMessageHandler(RemoteMessage message) async { void main() async { WidgetsFlutterBinding.ensureInitialized(); await GetStorage.init(); - + Stripe.publishableKey = StripeKey.publishableKey; if (Platform.isAndroid || Platform.isIOS) { await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, @@ -64,7 +66,7 @@ class MyApp extends StatelessWidget { LocaleController controller = Get.put(LocaleController()); return GetMaterialApp( - title: AppInfo.appName, + title: AppInformation.appName, translations: MyTranslation(), debugShowCheckedModeBanner: false, locale: controller.language, diff --git a/lib/views/Rate/ride_calculate_driver.dart b/lib/views/Rate/ride_calculate_driver.dart index c3ab8d9..2034232 100644 --- a/lib/views/Rate/ride_calculate_driver.dart +++ b/lib/views/Rate/ride_calculate_driver.dart @@ -49,7 +49,7 @@ class BarChartWidget extends StatelessWidget { : Column( children: [ Text( - 'Average of Hours of ${AppInfo.appName} is ON for this month' + 'Average of Hours of ${AppInformation.appName} is ON for this month' .tr, style: AppStyle.title, ), diff --git a/lib/views/home/Captin/home_captin.dart b/lib/views/home/Captin/home_captin.dart index b85710d..14805e9 100644 --- a/lib/views/home/Captin/home_captin.dart +++ b/lib/views/home/Captin/home_captin.dart @@ -5,6 +5,7 @@ import 'package:ride/constant/style.dart'; import 'package:ride/constant/table_names.dart'; import 'package:ride/controller/home/captin/home_captain_controller.dart'; import 'package:ride/controller/home/captin/order_request_controller.dart'; +import 'package:ride/controller/payment/payment_controller.dart'; import 'package:ride/main.dart'; import 'package:ride/views/Rate/ride_calculate_driver.dart'; import 'package:ride/views/home/Captin/text_scanner.dart'; @@ -192,6 +193,14 @@ class HomeCaptain extends StatelessWidget { "Text FlutterMLGoogle", ), ), + TextButton( + onPressed: () { + PaymentController().makePayment(18, 'JOD'); + }, + child: const Text( + "Pay 18 dollar", + ), + ), ], ), ), diff --git a/lib/views/home/my_wallet/passenger_wallet.dart b/lib/views/home/my_wallet/passenger_wallet.dart index a05926c..95750eb 100644 --- a/lib/views/home/my_wallet/passenger_wallet.dart +++ b/lib/views/home/my_wallet/passenger_wallet.dart @@ -63,13 +63,13 @@ class PassengerWallet extends StatelessWidget { box.read(BoxName.passengerWalletTotal) == null ? Text( 'You Dont Have Any amount in'.tr + - ' ${AppInfo.appName}' + + ' ${AppInformation.appName}' + 'Wallet!'.tr, style: AppStyle.title, ) : Text( 'You Have'.tr + - ' ${box.read(BoxName.passengerWalletTotal).toString()} JD in ${AppInfo.appName} Wallet', + ' ${box.read(BoxName.passengerWalletTotal).toString()} JD in ${AppInformation.appName} Wallet', style: AppStyle.title, ), ), @@ -357,7 +357,7 @@ class PassengerWallet extends StatelessWidget { "items": [ { "name": - "${AppInfo.appName} Wallet ", + "${AppInformation.appName} Wallet ", "quantity": 1, "price": '${controller.selectedAmount}', @@ -368,7 +368,7 @@ class PassengerWallet extends StatelessWidget { // shipping address is not required though "shipping_address": const { "recipient_name": - "${AppInfo.appName} Wallet", + "${AppInformation.appName} Wallet", "line1": "Shafa Badran", "line2": "", "city": "Amman",