Initial commit
diff --git a/includes/payment-methods/class-wc-stripe-upe-payment-method-cc.php b/includes/payment-methods/class-wc-stripe-upe-payment-method-cc.php
new file mode 100644
index 0000000..31bbb48
--- /dev/null
+++ b/includes/payment-methods/class-wc-stripe-upe-payment-method-cc.php
@@ -0,0 +1,112 @@
+<?php
+if ( ! defined( 'ABSPATH' ) ) {
+ exit;
+}
+
+/**
+ * Class WC_Stripe_UPE_Payment_Method_CC
+ */
+
+/**
+ * Credit card Payment Method class extending UPE base class
+ */
+class WC_Stripe_UPE_Payment_Method_CC extends WC_Stripe_UPE_Payment_Method {
+
+ const STRIPE_ID = 'card';
+
+ const LPM_GATEWAY_CLASS = WC_Gateway_Stripe::class;
+
+ /**
+ * Constructor for card payment method
+ */
+ public function __construct() {
+ parent::__construct();
+ $this->stripe_id = self::STRIPE_ID;
+ $this->title = __( 'Pay with credit card / debit card', 'woocommerce-gateway-stripe' );
+ $this->is_reusable = true;
+ $this->label = __( 'Credit card / debit card', 'woocommerce-gateway-stripe' );
+ $this->description = __(
+ 'Let your customers pay with major credit and debit cards without leaving your store.',
+ 'woocommerce-gateway-stripe'
+ );
+ }
+
+ /**
+ * Returns payment method title
+ *
+ * @param array|bool $payment_details Optional payment details from charge object.
+ *
+ * @return string
+ */
+ public function get_title( $payment_details = false ) {
+ if ( ! $payment_details ) {
+ return $this->title;
+ }
+
+ $details = $payment_details[ $this->stripe_id ];
+ $funding_types = [
+ 'credit' => __( 'credit', 'woocommerce-gateway-stripe' ),
+ 'debit' => __( 'debit', 'woocommerce-gateway-stripe' ),
+ 'prepaid' => __( 'prepaid', 'woocommerce-gateway-stripe' ),
+ 'unknown' => __( 'unknown', 'woocommerce-gateway-stripe' ),
+ ];
+
+ return sprintf(
+ // Translators: %1$s card brand, %2$s card funding (prepaid, credit, etc.).
+ __( '%1$s %2$s card', 'woocommerce-gateway-stripe' ),
+ ucfirst( $details->network ),
+ $funding_types[ $details->funding ]
+ );
+ }
+
+ /**
+ * Returns string representing payment method type
+ * to query to retrieve saved payment methods from Stripe.
+ */
+ public function get_retrievable_type() {
+ return $this->get_id();
+ }
+
+ /**
+ * Create and return WC payment token for user.
+ *
+ * This will be used from the WC_Stripe_Payment_Tokens service
+ * as opposed to WC_Stripe_UPE_Payment_Gateway.
+ *
+ * @param string $user_id WP_User ID
+ * @param object $payment_method Stripe payment method object
+ *
+ * @return WC_Payment_Token_CC
+ */
+ public function create_payment_token_for_user( $user_id, $payment_method ) {
+ $token = new WC_Payment_Token_CC();
+ $token->set_expiry_month( $payment_method->card->exp_month );
+ $token->set_expiry_year( $payment_method->card->exp_year );
+ $token->set_card_type( strtolower( $payment_method->card->brand ) );
+ $token->set_last4( $payment_method->card->last4 );
+ $token->set_gateway_id( WC_Stripe_UPE_Payment_Gateway::ID );
+ $token->set_token( $payment_method->id );
+ $token->set_user_id( $user_id );
+ $token->save();
+ return $token;
+ }
+
+ /**
+ * Returns boolean dependent on whether capability
+ * for site account is enabled for payment method.
+ *
+ * @return bool
+ */
+ public function is_capability_active() {
+ return true;
+ }
+
+ /**
+ * The Credit Card method allows automatic capture.
+ *
+ * @return bool
+ */
+ public function requires_automatic_capture() {
+ return false;
+ }
+}