enqueue and respect merchant option for disabling stripe express pay (https://github.com/woocommerce/woocommerce-blocks/pull/2920)

* enqueue and respect merchant option for disabling stripe express pay

* don't even register express payment method if merchant has disabled it

* add StripeServerData.allowPaymentRequest to typedef
This commit is contained in:
Rua Haszard 2020-07-30 10:29:58 +12:00 committed by GitHub
parent de65c2ff8e
commit e2b82561bd
3 changed files with 49 additions and 29 deletions

View File

@ -11,8 +11,15 @@ import {
*/ */
import stripeCcPaymentMethod from './credit-card'; import stripeCcPaymentMethod from './credit-card';
import PaymentRequestPaymentMethod from './payment-request'; import PaymentRequestPaymentMethod from './payment-request';
import { getStripeServerData } from './stripe-utils';
// Register Stripe Credit Card.
registerPaymentMethod( ( Config ) => new Config( stripeCcPaymentMethod ) ); registerPaymentMethod( ( Config ) => new Config( stripeCcPaymentMethod ) );
registerExpressPaymentMethod(
( Config ) => new Config( PaymentRequestPaymentMethod ) // Register Stripe Payment Request (Apple/Chrome Pay) if enabled.
); if ( getStripeServerData().allowPaymentRequest ) {
registerExpressPaymentMethod(
( Config ) => new Config( PaymentRequestPaymentMethod )
);
}

View File

@ -277,25 +277,27 @@
/** /**
* @typedef {Object} StripeServerData * @typedef {Object} StripeServerData
* *
* @property {string} stripeTotalLabel The string used for payment * @property {string} stripeTotalLabel The string used for payment
* descriptor. * descriptor.
* @property {string} publicKey The public api key for stripe * @property {string} publicKey The public api key for stripe
* requests. * requests.
* @property {boolean} allowPrepaidCard True means that prepaid cards * @property {boolean} allowPrepaidCard True means that prepaid cards
* can be used for payment. * can be used for payment.
* @property {Object} button Contains button styles * @property {Object} button Contains button styles
* @property {string} button.type The type of button. * @property {string} button.type The type of button.
* @property {string} button.theme The theme for the button. * @property {string} button.theme The theme for the button.
* @property {string} button.height The height (in pixels) for * @property {string} button.height The height (in pixels) for
* the button. * the button.
* @property {string} button.locale The locale to use for stripe * @property {string} button.locale The locale to use for stripe
* elements. * elements.
* @property {boolean} inline_cc_form Whether stripe cc should use * @property {boolean} inline_cc_form Whether stripe cc should use
* inline cc * inline cc
* form or separate inputs. * form or separate inputs.
* @property {{[k:string]:CreditCardIcon}} icons Contains supported cc icons. * @property {{[k:string]:CreditCardIcon}} icons Contains supported cc icons.
* @property {boolean} allowSavedCards Used to indicate whether saved cards * @property {boolean} allowSavedCards Used to indicate whether saved cards
* can be used. * can be used.
* @property {boolean} allowPaymentRequest True if merchant has enabled payment
* request (Chrome/Apple Pay).
*/ */
/** /**

View File

@ -86,18 +86,19 @@ final class Stripe extends AbstractPaymentMethodType {
*/ */
public function get_payment_method_data() { public function get_payment_method_data() {
return [ return [
'stripeTotalLabel' => $this->get_total_label(), 'stripeTotalLabel' => $this->get_total_label(),
'publicKey' => $this->get_publishable_key(), 'publicKey' => $this->get_publishable_key(),
'allowPrepaidCard' => $this->get_allow_prepaid_card(), 'allowPrepaidCard' => $this->get_allow_prepaid_card(),
'button' => [ 'button' => [
'type' => $this->get_button_type(), 'type' => $this->get_button_type(),
'theme' => $this->get_button_theme(), 'theme' => $this->get_button_theme(),
'height' => $this->get_button_height(), 'height' => $this->get_button_height(),
'locale' => $this->get_button_locale(), 'locale' => $this->get_button_locale(),
], ],
'inline_cc_form' => $this->get_inline_cc_form(), 'inline_cc_form' => $this->get_inline_cc_form(),
'icons' => $this->get_icons(), 'icons' => $this->get_icons(),
'allowSavedCards' => $this->get_allow_saved_cards(), 'allowSavedCards' => $this->get_allow_saved_cards(),
'allowPaymentRequest' => $this->get_allow_payment_request(),
]; ];
} }
@ -144,6 +145,16 @@ final class Stripe extends AbstractPaymentMethodType {
return apply_filters( 'wc_stripe_allow_prepaid_card', true ); return apply_filters( 'wc_stripe_allow_prepaid_card', true );
} }
/**
* Determine if store allows Payment Request buttons - e.g. Apple Pay / Chrome Pay.
*
* @return bool True if merchant has opted into payment request.
*/
private function get_allow_payment_request() {
$option = isset( $this->settings['payment_request'] ) ? $this->settings['payment_request'] : false;
return filter_var( $option, FILTER_VALIDATE_BOOLEAN );
}
/** /**
* Return the button type for the payment button. * Return the button type for the payment button.
* *