Skip to content

Commit

Permalink
Fix #1313 accept cash app payments (#1318)
Browse files Browse the repository at this point in the history
Co-authored-by: Remon <>
  • Loading branch information
remonh87 authored Jul 18, 2023
1 parent 0a6cf22 commit 090eb21
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 7 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'),
),
);
} on Exception catch (e) {
if (e is StripeException) {
print('blaat $e');
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
12 changes: 9 additions & 3 deletions packages/stripe/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,10 +156,16 @@ Future<void> onGooglePayResult(paymentResult) async {
- [Get your test Stripe API keys](https://stripe.com/docs/keys)
- `cp lib/.env.example.dart lib/.env.dart` and set your Stripe publishable key.
- `cp server/.env.example server/.env` and set the variable values in your newly created `.env` file.
- Install the server dependencies: `npm install` or `yarn --cwd "server"`
- Install the server dependencies in the `server` directory:
* `cd server`
* `npm install` or `yarn --cwd "server"`
- Start the example
- Terminal 1: `npm start` or `yarn --cwd "server" start`
- Terminal 2: `flutter run`
- Terminal 1:
* Move to the `server` directory: `cd server`
* Run npm or yarn: `npm start` or `yarn --cwd "server" start`
- Terminal 2:
* Move to the `lib` directory: `cd lib`
* Run flutter: `flutter run`

##### Additional steps for webhook forwarding

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')

/// 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 090eb21

Please sign in to comment.