parsePaymentResponse method

  1. @override
PaymentResponse parsePaymentResponse(
  1. Map<String, dynamic> response
)
override

Parse provider-specific response into standardized PaymentResponse

Implementation

@override
PaymentResponse parsePaymentResponse(Map<String, dynamic> response) {
  final status = response['status']?.toString().toLowerCase();
  final transactionId = response['payment_intent_id'] ??
      response['transaction_id'] ??
      response['id'];
  final orderId = response['order_id'] ?? response['orderId'];

  switch (status) {
    case 'succeeded':
    case 'success':
    case 'completed':
      return PaymentResponse.success(
        transactionId: transactionId,
        message: 'Payment completed successfully',
        orderId: orderId,
        provider: PaymentProvider.stripe,
        amount: response['amount']?.toDouble(),
        currency: response['currency'],
        rawResponse: response,
      );

    case 'requires_action':
    case 'requires_source_action':
    case 'processing':
    case 'pending':
      return PaymentResponse.pending(
        transactionId: transactionId,
        message: 'Payment is being processed',
        orderId: orderId,
        provider: PaymentProvider.stripe,
        rawResponse: response,
      );

    case 'canceled':
    case 'cancelled':
      return PaymentResponse.cancelled(
        message: 'Payment was cancelled',
        orderId: orderId,
        provider: PaymentProvider.stripe,
        rawResponse: response,
      );

    case 'failed':
    case 'requires_payment_method':
    default:
      return PaymentResponse.failure(
        message: response['error_message'] ??
            response['failure_reason'] ??
            'Payment failed',
        errorCode: response['error_code'] ?? response['decline_code'],
        orderId: orderId,
        provider: PaymentProvider.stripe,
        rawResponse: response,
      );
  }
}