addPaymentMethodToCustomer method

Future<CardPayment?> addPaymentMethodToCustomer({
  1. required String customerId,
  2. required String type,
  3. required String number,
  4. required String expirationMonth,
  5. required String expirationYear,
  6. required String cvv,
  7. required String cardHoldersName,
})

Used for adding a new payment method to a customer object.

Implementation

Future<CardPayment?> addPaymentMethodToCustomer({
  required String customerId,
  required String type,
  required String number,
  required String expirationMonth,
  required String expirationYear,
  required String cvv,
  required String cardHoldersName,
}) async {
  CardPayment? cardDetails;

  var method = "post";
  var checkoutEndpoint = '/v1/customers/$customerId/payment_methods';

  final checkoutURL = Uri.parse(baseURL + checkoutEndpoint);

  var data = jsonEncode({
    "type": type,
    "fields": {
      "number": number,
      "expiration_month": expirationMonth,
      "expiration_year": expirationYear,
      "cvv": cvv,
      "name": cardHoldersName,
    },
    "metadata": {
      "merchant_defined": true,
    },
  });

  final headers = _generateHeader(
    method: method,
    endpoint: checkoutEndpoint,
    body: data,
  );

  try {
    var response = await http.post(
      checkoutURL,
      headers: headers,
      body: data,
    );

    if (response.statusCode == 200) {
      dev.log('PAYMENT METHOD SUCCESSFULLY ADDED');
      cardDetails = CardPayment.fromJson(jsonDecode(response.body));
    } else {
      dev.log(response.statusCode.toString());
    }
  } catch (e) {
    dev.log('Failed to create the payment method');
  }

  return cardDetails;
}