diff --git a/includes/payment-tokens/class-wc-stripe-ach-payment-token.php b/includes/payment-tokens/class-wc-stripe-ach-payment-token.php new file mode 100644 index 000000000..7b746b922 --- /dev/null +++ b/includes/payment-tokens/class-wc-stripe-ach-payment-token.php @@ -0,0 +1,196 @@ + '', + 'account_type' => '', + 'last4' => '', + 'payment_method_type' => WC_Stripe_Payment_Methods::ACH, + 'fingerprint' => '', + ]; + + /** + * Get type to display to user. + * + * @since 4.0.0 + * @version 4.0.0 + * @param string $deprecated Deprecated since WooCommerce 3.0 + * @return string + */ + public function get_display_name( $deprecated = '' ) { + $display = sprintf( + /* translators: last 4 digits of IBAN account */ + __( '%1$s %2$s account ending in %3$s', 'woocommerce-gateway-stripe' ), + $this->get_bank_name(), + $this->get_account_type(), + $this->get_last4() + ); + + return $display; + } + + /** + * Hook prefix + * + * @since 4.0.0 + * @version 4.0.0 + */ + protected function get_hook_prefix() { + return 'woocommerce_payment_token_ach_get_'; + } + + /** + * Validate ACH payment tokens. + * + * These fields are required by all ACH payment tokens: + * last4 - string Last 4 digits of the Account Number + * + * @since 4.0.0 + * @version 4.0.0 + * @return boolean True if the passed data is valid + */ + public function validate() { + if ( false === parent::validate() ) { + return false; + } + + if ( ! $this->get_last4( 'edit' ) ) { + return false; + } + + return true; + } + + /** + * Get the bank name. + * + * @since 4.0.0 + * @version 4.0.0 + * @param string $context What the value is for. Valid values are view and edit. + * @return string + */ + public function get_bank_name( $context = 'view' ) { + return $this->get_prop( 'bank_name', $context ); + } + + /** + * Set the bank name. + * + * @since 4.0.0 + * @version 4.0.0 + * @param string $bank_name + */ + public function set_bank_name( $bank_name ) { + $this->set_prop( 'bank_name', $bank_name ); + } + + /** + * Get the account type. + * + * @since 4.0.0 + * @version 4.0.0 + * @param string $context What the value is for. Valid values are view and edit. + * @return string + */ + public function get_account_type( $context = 'view' ) { + return $this->get_prop( 'account_type', $context ); + } + + /** + * Set the account type. + * + * @since 4.0.0 + * @version 4.0.0 + * @param string $account_type + */ + public function set_account_type( $account_type ) { + $this->set_prop( 'account_type', $account_type ); + } + + /** + * Returns the last four digits. + * + * @since 4.0.0 + * @version 4.0.0 + * @param string $context What the value is for. Valid values are view and edit. + * @return string Last 4 digits + */ + public function get_last4( $context = 'view' ) { + return $this->get_prop( 'last4', $context ); + } + + /** + * Set the last four digits. + * + * @since 4.0.0 + * @version 4.0.0 + * @param string $last4 + */ + public function set_last4( $last4 ) { + $this->set_prop( 'last4', $last4 ); + } + + /** + * Set Stripe payment method type. + * + * @param string $type Payment method type. + */ + public function set_payment_method_type( $type ) { + $this->set_prop( 'payment_method_type', $type ); + } + + /** + * Returns Stripe payment method type. + * + * @param string $context What the value is for. Valid values are view and edit. + * @return string $payment_method_type + */ + public function get_payment_method_type( $context = 'view' ) { + return $this->get_prop( 'payment_method_type', $context ); + } + + /** + * Checks if the payment method token is equal a provided payment method. + * + * @inheritDoc + */ + public function is_equal_payment_method( $payment_method ): bool { + if ( + WC_Stripe_Payment_Methods::ACH === $payment_method->type + && ( $payment_method->{WC_Stripe_Payment_Methods::ACH}->fingerprint ?? null ) === $this->get_fingerprint() ) { + return true; + } + + return false; + } +}