Skip to content

Commit

Permalink
Add update PaymentIntent method
Browse files Browse the repository at this point in the history
  • Loading branch information
solid-maksymtielnyi committed Aug 23, 2024
1 parent 8a76a3f commit 1fa302a
Show file tree
Hide file tree
Showing 4 changed files with 203 additions and 45 deletions.
4 changes: 2 additions & 2 deletions lib/messages.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:stripe/src/messages/converters.dart';
import 'package:stripe/src/messages/enums.dart';
import 'package:stripe/src/messages/enums/pause_collection_behavior.dart';

export 'package:stripe/src/messages/enums.dart';

Expand All @@ -19,8 +18,8 @@ part 'src/messages/data_list.dart';
part 'src/messages/discount.dart';
part 'src/messages/event.dart';
part 'src/messages/invoice.dart';
part 'src/messages/payment_intent.dart';
part 'src/messages/pause_collection.dart';
part 'src/messages/payment_intent.dart';
part 'src/messages/payment_method.dart';
part 'src/messages/portal_session.dart';
part 'src/messages/price.dart';
Expand Down Expand Up @@ -48,6 +47,7 @@ part 'src/messages/requests/list_subscription_schedules.dart';
part 'src/messages/requests/list_subscriptions.dart';
part 'src/messages/requests/subscription_payment_settings.dart';
part 'src/messages/requests/update_customer.dart';
part 'src/messages/requests/update_payment_intent.dart';
part 'src/messages/requests/update_subscription.dart';
part 'src/messages/requests/update_subscription_item.dart';
part 'src/messages/requests/update_subscription_schedule.dart';
Expand Down
130 changes: 87 additions & 43 deletions lib/messages.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

99 changes: 99 additions & 0 deletions lib/src/messages/requests/update_payment_intent.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
part of '../../../messages.dart';

@JsonSerializable()
class UpdatePaymentIntentRequest {
/// Amount intended to be collected by this PaymentIntent. A positive integer representing how much to charge in the smallest currency unit (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or equivalent in charge currency. The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
final int? amount;

/// Three-letter ISO currency code, in lowercase. Must be a supported currency.
final String? currency;

/// ID of the Customer this PaymentIntent belongs to, if one exists.
/// Payment methods attached to other Customers cannot be used with this
/// PaymentIntent.
///
/// If setup_future_usage is set and this PaymentIntent’s payment method is
/// not card_present, then the payment method attaches to the Customer after
/// the PaymentIntent has been confirmed and any required actions from the
/// user are complete. If the payment method is card_present and isn’t a
/// digital wallet, then a generated_card payment method representing the
/// card is created and attached to the Customer instead.
final String? customer;

/// An arbitrary string attached to the object. Often useful for displaying
/// to users.
final String? description;

/// Set of key-value pairs that you can attach to an object. This can be
/// useful for storing additional information about the object in a
/// structured format. Individual keys can be unset by posting an empty value
/// to them. All keys can be unset by posting an empty value to metadata.
final Map<String, dynamic>? metadata;

/// ID of the payment method (a PaymentMethod, Card, or compatible Source
/// object) to attach to this PaymentIntent. To unset this field to null, pass
/// in an empty string.
final String? paymentMethod;

/// Email address that the receipt for the resulting payment will be sent to.
/// If receipt_email is specified for a payment in live mode, a receipt will
/// be sent regardless of your email settings.
final String? receiptEmail;

/// Indicates that you intend to make future payments with this
/// PaymentIntent’s payment method.
///
/// If you provide a Customer with the PaymentIntent, you can use this
/// parameter to attach the payment method to the Customer after the
/// PaymentIntent is confirmed and the customer completes any required
/// actions. If you don’t provide a Customer, you can still attach the
/// payment method to a Customer after the transaction completes.
///
/// If the payment method is card_present and isn’t a digital wallet, Stripe
/// creates and attaches a generated_card payment method representing the
/// card to the Customer instead.
///
/// When processing card payments, Stripe uses setup_future_usage to help you
/// comply with regional legislation and network rules, such as SCA.
///
/// If you’ve already set setup_future_usage and you’re performing a request
/// using a publishable key, you can only update the value from on_session to
/// off_session.
final SetupFutureUsage? setupFutureUsage;

/// Text that appears on the customer’s statement as the statement descriptor
/// for a non-card charge. This value overrides the account’s default
/// statement descriptor. For information about requirements, including the
/// 22-character limit, see the Statement Descriptor docs.
///
/// Setting this value for a card charge returns an error. For card charges,
/// set the statement_descriptor_suffix instead.
final String? statementDescriptor;

/// Provides information about a card charge. Concatenated to the account’s
/// statement descriptor prefix to form the complete statement descriptor that
/// appears on the customer’s statement.
final String? statementDescriptorSuffix;

/// The ID of the payment method configuration to use with this PaymentIntent.
final String? paymentMethodConfiguration;

const UpdatePaymentIntentRequest(
this.amount,
this.currency,
this.customer,
this.description,
this.metadata,
this.paymentMethod,
this.receiptEmail,
this.setupFutureUsage,
this.statementDescriptor,
this.statementDescriptorSuffix,
this.paymentMethodConfiguration,
);

factory UpdatePaymentIntentRequest.fromJson(Map<String, dynamic> json) =>
_$UpdatePaymentIntentRequestFromJson(json);

Map<String, dynamic> toJson() => _$UpdatePaymentIntentRequestToJson(this);
}
15 changes: 15 additions & 0 deletions lib/src/resources/payment_intent.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import '_resource.dart';
final log = Logger('Stripe PaymentIntentResource');

class PaymentIntentResource extends Resource<PaymentIntent> {
static const _resourceName = 'payment_intents';

PaymentIntentResource(Client client) : super(client);

Future<PaymentIntent> create(CreatePaymentIntentRequest request) async {
Expand Down Expand Up @@ -49,4 +51,17 @@ class PaymentIntentResource extends Resource<PaymentIntent> {

return intents;
}

/// https://docs.stripe.com/api/payment_intents/update
Future<PaymentIntent> update(
String id, {
required UpdatePaymentIntentRequest request,
}) async {
final response = await post(
'$_resourceName/$id',
data: request.toJson(),
);

return PaymentIntent.fromJson(response);
}
}

0 comments on commit 1fa302a

Please sign in to comment.