Skip to content

Commit

Permalink
Fix #1313 accept cash app payments
Browse files Browse the repository at this point in the history
  • Loading branch information
Remon committed Jul 17, 2023
1 parent 9361711 commit 79b23ed
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 4 deletions.
89 changes: 89 additions & 0 deletions example/lib/screens/regional_payment_methods/cash_app_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter_stripe/flutter_stripe.dart';
import 'package:http/http.dart' as http;
import 'package:stripe_example/widgets/example_scaffold.dart';
import 'package:stripe_example/widgets/loading_button.dart';

import '../../config.dart';

class CashAppScreen extends StatelessWidget {
const CashAppScreen({Key? key}) : super(key: key);

Future<Map<String, dynamic>> _createPaymentIntent() async {
final url = Uri.parse('$kApiUrl/create-payment-intent');
final response = await http.post(
url,
headers: {
'Content-Type': 'application/json',
},
body: json.encode({
'currency': 'usd',
'payment_method_types': ['cashapp'],
'amount': 6000
}),
);

return json.decode(response.body);
}

Future<void> _pay(BuildContext context) async {
// Precondition:
//Make sure to have set a custom URI scheme in your app and add it to Stripe SDK
// see file main.dart in this example app.
// 1. on the backend create a payment intent for payment method and save the
// client secret.
final result = await _createPaymentIntent();
final clientSecret = await result['clientSecret'];

// 2. use the client secret to confirm the payment and handle the result.
try {
await Stripe.instance.confirmPayment(
paymentIntentClientSecret: clientSecret,
data: PaymentMethodParams.cashAppPay(
paymentMethodData: PaymentMethodData(),
),
);

ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Payment succesfully completed'),

Check warning on line 51 in example/lib/screens/regional_payment_methods/cash_app_screen.dart

View workflow job for this annotation

GitHub Actions / Typo CI

succesfully

"succesfully" is a typo. Did you mean "successfully"?
),
);
} on Exception catch (e) {
if (e is StripeException) {
print('blaat $e');

Check warning on line 56 in example/lib/screens/regional_payment_methods/cash_app_screen.dart

View workflow job for this annotation

GitHub Actions / Typo CI

blaat

"blaat" is a typo. Did you mean "blast"?
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Error from Stripe: ${e.error.localizedMessage ?? e.error.code}'),
),
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Unforeseen error: ${e}'),
),
);
}
}
}

@override
Widget build(BuildContext context) {
return ExampleScaffold(
title: 'Cashapp',
tags: ['Payment method'],
padding: EdgeInsets.all(16),
children: [
LoadingButton(
onPressed: () async {
await _pay(context);
},
text: 'Pay',
),
],
);
}
}
6 changes: 6 additions & 0 deletions example/lib/screens/screens.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:stripe_example/screens/payment_sheet/payment_sheet_screen.dart';
import 'package:stripe_example/screens/payment_sheet/payment_sheet_screen_custom_flow.dart';
import 'package:stripe_example/screens/regional_payment_methods/ali_pay_screen.dart';
import 'package:stripe_example/screens/regional_payment_methods/aubecs_debit.dart';
import 'package:stripe_example/screens/regional_payment_methods/cash_app_screen.dart';
import 'package:stripe_example/screens/regional_payment_methods/fpx_screen.dart';
import 'package:stripe_example/screens/regional_payment_methods/ideal_screen.dart';
import 'package:stripe_example/screens/regional_payment_methods/klarna_screen.dart';
Expand Down Expand Up @@ -221,6 +222,11 @@ class Example extends StatelessWidget {
builder: (context) => AliPayScreen(),
platformsSupported: [DevicePlatform.android, DevicePlatform.ios],
),
Example(
title: 'Cash app Pay',
builder: (context) => CashAppScreen(),
platformsSupported: [DevicePlatform.android, DevicePlatform.ios],
),
Example(
title: 'Ideal',
leading: Image.asset(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -358,9 +358,9 @@ class PaymentMethodParams with _$PaymentMethodParams {
}) = _PaymentMethodParamsAlipay;

@JsonSerializable(explicitToJson: true)
@FreezedUnionValue('CashAppPay')
@FreezedUnionValue('CashApp')

Check warning on line 361 in packages/stripe_platform_interface/lib/src/models/payment_methods.dart

View workflow job for this annotation

GitHub Actions / Typo CI

FreezedUnionValue

"FreezedUnionValue" is a typo. Did you mean "FreezesUnionValue"?

/// Config parameters for Alipay card payment method.
/// Config parameters for cashapp payment method.
const factory PaymentMethodParams.cashAppPay({
/// Paymentmethod data for this paymentmethod.
required PaymentMethodData paymentMethodData,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2859,7 +2859,7 @@ PaymentMethodParams _$PaymentMethodParamsFromJson(Map<String, dynamic> json) {
return _PaymentMethodParamsCardWithMethodId.fromJson(json);
case 'Alipay':
return _PaymentMethodParamsAlipay.fromJson(json);
case 'CashAppPay':
case 'CashApp':
return _PaymentMethodParamsCashAppPay.fromJson(json);
case 'Ideal':
return _PaymentMethodParamsIdeal.fromJson(json);
Expand Down Expand Up @@ -4389,7 +4389,7 @@ class _$_PaymentMethodParamsCashAppPay
implements _PaymentMethodParamsCashAppPay {
const _$_PaymentMethodParamsCashAppPay(
{required this.paymentMethodData, final String? $type})
: $type = $type ?? 'CashAppPay';
: $type = $type ?? 'CashApp';

factory _$_PaymentMethodParamsCashAppPay.fromJson(
Map<String, dynamic> json) =>
Expand Down

0 comments on commit 79b23ed

Please sign in to comment.