✏️ 编辑:Payment_Gateway_Payment_Form.php
路径:
/home/forge/woocommerce-square/includes/Framework/PaymentGateway/Payment_Gateway_Payment_Form.php
大小:27.4 KB · 修改:2025-12-23 20:26:26 · 权限:0644 · 可写
← 返回目录
👁 查看
⬇ 下载
<?php /** * WooCommerce Payment Gateway Framework * * This source file is subject to the GNU General Public License v3.0 * that is bundled with this package in the file license.txt. * It is also available through the world-wide-web at this URL: * http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@skyverge.com so we can send you a copy immediately. * * @since 3.0.0 * @author WooCommerce / SkyVerge * @copyright Copyright (c) 2013-2019, SkyVerge, Inc. * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later * * Modified by WooCommerce on 15 December 2021. */ namespace WooCommerce\Square\Framework\PaymentGateway; defined( 'ABSPATH' ) || exit; /** * Payment Form Class * * Handles rendering the payment form for both credit card and eCheck gateways * * @since 3.0.0 */ class Payment_Gateway_Payment_Form { /** @var \WC_Payment_Gateway gateway for this payment form */ protected $gateway; /** @var array of WC_Payment_Gateway_Payment_Tokens, keyed by token ID */ protected $tokens; /** @var bool default to show new payment method form */ protected $default_new_payment_method = true; /** * Sets up class. * * @since 3.0.0 * * @param Payment_Gateway|Payment_Gateway_Direct $gateway gateway for form */ public function __construct( $gateway ) { $this->gateway = $gateway; // hook up rendering $this->add_hooks(); // maybe load tokens $this->get_tokens(); } /** * Adds hooks for rendering the payment form. * * @see Payment_Gateway_Payment_Form::render() * * @since 3.0.0 */ protected function add_hooks() { $gateway_id = $this->get_gateway()->get_id(); // payment form description add_action( "wc_{$gateway_id}_payment_form_start", array( $this, 'render_payment_form_description' ), 15 ); // saved payment methods add_action( "wc_{$gateway_id}_payment_form_start", array( $this, 'render_saved_payment_methods' ), 20 ); // fieldset start add_action( "wc_{$gateway_id}_payment_form_start", array( $this, 'render_fieldset_start' ), 30 ); // payment fields add_action( "wc_{$gateway_id}_payment_form", array( $this, 'render_payment_fields' ), 0 ); // fieldset end add_action( "wc_{$gateway_id}_payment_form_end", array( $this, 'render_fieldset_end' ), 5 ); // payment form JS add_action( "wc_{$gateway_id}_payment_form_end", array( $this, 'render_js' ), 5 ); } /** * Returns the active tokens for the current user/gateway * * @since 3.0.0 * @return array of Payment_Gateway_Payment_Tokens, keyed by token ID */ protected function get_tokens() { if ( ! empty( $this->tokens ) ) { return $this->tokens; } $tokens = array(); if ( $this->tokenization_allowed() && is_user_logged_in() ) { foreach ( $this->get_gateway()->get_payment_tokens_handler()->get_tokens( get_current_user_id() ) as $token ) { // set token $tokens[ $token->get_id() ] = $token; // don't force new payment method if an existing token is default if ( $token->is_default() ) { $this->default_new_payment_method = false; } } } return $this->tokens = $tokens; } /** * Returns the gateway for this form. * * @since 3.0.0 * * @return Payment_Gateway|Payment_Gateway_Direct */ public function get_gateway() { return $this->gateway; } /** * Return true if the current user has active tokens to display * * @since 3.0.0 * @return bool */ public function has_tokens() { return ! empty( $this->tokens ); } /** * Returns true if tokenization is allowed for the payment form. This is true * if both the gateway supports tokenization and it is enabled. * * Note that tokenization is not allowed on the pay page for guest customers, * as there is no way to create an account there. * * @since 3.0.0 * @return bool true if tokenization is allowed */ public function tokenization_allowed() { // tokenization is allowed if tokenization is enabled on the gateway $tokenization_allowed = $this->get_gateway()->supports_tokenization() && $this->get_gateway()->tokenization_enabled(); // on the pay page there is no way of creating an account, so disallow tokenization for guest customers if ( $tokenization_allowed && is_checkout_pay_page() && ! is_user_logged_in() ) { $tokenization_allowed = false; } /** * Payment Gateway Payment Form Tokenization Allowed. * * Filters whether tokenization is allowed for the payment form. * * @since 3.0.0 * * @param bool $tokenization_allowed * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_tokenization_allowed', $tokenization_allowed, $this ); } /** * Returns true if tokenization is forced for the payment form. This is generally * true when a subscription or pre-order is in the cart and the payment * method must be tokenized. * * Note that only direct gateways support forced tokenization * * @since 3.0.0 * @return bool true if tokenization is forced */ public function tokenization_forced() { $tokenization_forced = $this->get_gateway()->is_direct_gateway() && $this->get_gateway()->supports_tokenization() && $this->get_gateway()->get_payment_tokens_handler()->tokenization_forced(); // tokenization always "forced" on the add new payment method page if ( $this->get_gateway()->is_direct_gateway() && $this->get_gateway()->supports_add_payment_method() && is_add_payment_method_page() ) { $tokenization_forced = true; } /** * Payment Gateway Payment Form Tokenization Forced. * * Filters whether tokenization is forced for the payment form. * * @since 3.0.0 * * @param bool $tokenization_forced * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_tokenization_forced', $tokenization_forced, $this ); } /** * Return true if the payment form should default to showing the new payment * method form * * @since 3.0.0 * @return bool */ public function default_new_payment_method() { return $this->default_new_payment_method; } /** * Get the payment form fields * * @since 3.0.0 * @return array payment fields in format suitable for woocommerce_form_field() */ protected function get_payment_fields() { switch ( $this->get_gateway()->get_payment_type() ) { case 'credit-card': $fields = $this->get_credit_card_fields(); break; default: $fields = array(); break; } /** * Payment Gateway Payment Form Default Payment Fields. * * Filters the default field data for a gateway, for credit cards/eCheck * gateways the get_credit_card_fields() methods * will be used. This filter can be used to return payment fields * for a non-standard payment type (like PayPal Express) * * @since 3.0.0 * * @param array $fields in the format supported by woocommerce_form_fields() * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_default_payment_form_fields', $fields, $this ); } /** * Get default credit card form fields, note this pulls default values * from the associated gateway * * for an explanation of autocomplete attribute values, see: * @link https://html.spec.whatwg.org/multipage/forms.html#autofill * * @since 3.0.0 * @return array credit card form fields */ protected function get_credit_card_fields() { $defaults = $this->get_gateway()->get_payment_method_defaults(); $fields = array( 'card-number' => array( 'type' => 'tel', 'label' => esc_html__( 'Card Number', 'woocommerce-square' ), 'id' => 'wc-' . $this->get_gateway()->get_id_dasherized() . '-account-number', 'name' => 'wc-' . $this->get_gateway()->get_id_dasherized() . '-account-number', 'placeholder' => '•••• •••• •••• ••••', 'required' => true, 'class' => array( 'form-row-wide' ), 'input_class' => array( 'js-sv-wc-payment-gateway-credit-card-form-input js-sv-wc-payment-gateway-credit-card-form-account-number' ), 'maxlength' => 20, 'custom_attributes' => array( 'autocomplete' => 'cc-number', 'autocorrect' => 'no', 'autocapitalize' => 'no', 'spellcheck' => 'no', ), 'value' => $defaults['account-number'], ), 'card-expiry' => array( 'type' => 'text', 'label' => esc_html__( 'Expiration (MM/YY)', 'woocommerce-square' ), 'id' => 'wc-' . $this->get_gateway()->get_id_dasherized() . '-expiry', 'name' => 'wc-' . $this->get_gateway()->get_id_dasherized() . '-expiry', 'placeholder' => esc_html__( 'MM / YY', 'woocommerce-square' ), 'required' => true, 'class' => array( 'form-row-first' ), 'input_class' => array( 'js-sv-wc-payment-gateway-credit-card-form-input js-sv-wc-payment-gateway-credit-card-form-expiry' ), 'custom_attributes' => array( 'autocomplete' => 'cc-exp', 'autocorrect' => 'no', 'autocapitalize' => 'no', 'spellcheck' => 'no', ), 'value' => $defaults['expiry'], ), ); if ( $this->get_gateway()->csc_enabled() ) { $fields['card-csc'] = array( 'type' => 'tel', 'label' => esc_html__( 'Card Security Code', 'woocommerce-square' ), 'id' => 'wc-' . $this->get_gateway()->get_id_dasherized() . '-csc', 'name' => 'wc-' . $this->get_gateway()->get_id_dasherized() . '-csc', 'placeholder' => esc_html__( 'CSC', 'woocommerce-square' ), 'required' => true, 'class' => array( 'form-row-last' ), 'input_class' => array( 'js-sv-wc-payment-gateway-credit-card-form-input js-sv-wc-payment-gateway-credit-card-form-csc' ), 'maxlength' => 4, 'custom_attributes' => array( 'autocomplete' => 'off', 'autocorrect' => 'no', 'autocapitalize' => 'no', 'spellcheck' => 'no', ), 'value' => $defaults['csc'], ); } /** * Payment Gateway Payment Form Default Credit Card Fields. * * Filters the default field data for credit card gateways. * * @since 3.0.0 * * @param array $fields in the format supported by woocommerce_form_fields() * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_default_credit_card_fields', $fields, $this ); } /** * Get the payment form description HTML, generally set by the admin in * the gateway settings * * @since 3.0.0 * @return string payment form description HTML */ public function get_payment_form_description_html() { $description = ''; if ( $this->get_gateway()->get_description() ) { $description .= '<p>' . wp_kses_post( $this->get_gateway()->get_description() ) . '</p>'; } if ( $this->get_gateway()->is_test_environment() ) { /* translators: Test mode refers to the current software environment */ echo '<p>' . esc_html__( 'TEST MODE ENABLED', 'woocommerce-square' ) . '</p>'; } /** * Payment Gateway Payment Form Description. * * Filters the HTML rendered for payment form description. * * @since 3.0.0 * * @param string $html * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_description', $description, $this ); } /** * Get the saved payment methods HTML, this section includes the * "Manage Payment Method" button, the radio inputs for selecting an existing saved * payment method, and the radio input for using a new saved payment method * * @since 3.0.0 * @return string saved payment methods HTML */ protected function get_saved_payment_methods_html() { $html = '<p class="form-row form-row-wide">'; $html .= $this->get_manage_payment_methods_button_html(); $tokens = \WC_Payment_Tokens::get_customer_tokens( get_current_user_id(), $this->get_gateway()->get_id() ); foreach ( $tokens as $token ) { $html .= $this->get_saved_payment_method_html( $token ); if ( $token->is_default() ) { $this->default_new_payment_method = false; } } $html .= $this->get_use_new_payment_method_input_html(); $html .= '</p><div class="clear"></div>'; /** * Payment Gateway Payment Form Saved Payment Methods HTML. * * Filters the HTML rendered for the entire saved payment methods section. * * @since 3.0.0 * * @param string $html * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_saved_payment_methods_html', $html, $this ); } /** * Get the "Manage Payment Methods" button HTML * * @since 3.0.0 * @return string manage payment methods button html */ protected function get_manage_payment_methods_button_html() { $url = wc_get_account_endpoint_url( 'payment-methods' ); $html = sprintf( '<a class="button sv-wc-payment-gateway-payment-form-manage-payment-methods" href="%s">%s</a>', esc_url( $url ), /** * Payment Form Manage Payment Methods Button Text Filter. * * Allow actors to modify the "manage payment methods" button text rendered * on the checkout page. * * @since 3.0.0 * @param string $button_text button text */ wp_kses_post( apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_manage_payment_methods_text', esc_html__( 'Manage Payment Methods', 'woocommerce-square' ) ) ) ); /** * Payment Gateway Payment Form Manage Payment Methods Button HTML. * * Filters the HTML rendered for the "Manage Payment Methods" button. * * @since 3.0.0 * * @param string $html * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_manage_payment_methods_button_html', $html, $this ); } /** * Get the saved payment method HTML for an given token, renders an input + label like: * * o <Amex logo> American Express ending in 6666 (expires 10/20) * * @since 3.0.0 * @param \WC_Payment_Token_CC $token payment token * @return string saved payment method HTML */ protected function get_saved_payment_method_html( $token ) { // input $html = sprintf( '<input type="radio" id="wc-%1$s-payment-token-%2$s" name="wc-%1$s-payment-token" class="js-sv-wc-payment-gateway-payment-token js-wc-%1$s-payment-token" style="width:auto; margin-right:.5em;" value="%2$s" %3$s/>', esc_attr( $this->get_gateway()->get_id_dasherized() ), esc_attr( $token->get_id() ), checked( $token->is_default(), true, false ) ); // label $html .= sprintf( '<label class="sv-wc-payment-gateway-payment-form-saved-payment-method" for="wc-%s-payment-token-%s">', esc_attr( $this->get_gateway()->get_id_dasherized() ), esc_attr( $token->get_id() ) ); // title $html .= $this->get_saved_payment_method_title( $token ); $html .= '</label><br />'; /** * Payment Gateway Payment Form Payment Method Title HTML. * * Filters the HTML rendered for a saved payment method, like "Amex ending in 6666". * * @since 3.0.0 * * @param string $html * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_payment_method_html', $html, $token, $this ); } /** * Get the title for a saved payment method, like * * <Amex logo> American Express ending in 6666 (expires 10/20) * * @since 3.0.0 * @param \WC_Payment_Token_CC $token payment token * @return string saved payment method title */ protected function get_saved_payment_method_title( $token ) { $type = $token->get_card_type(); $image_url = wc_square()->get_gateway()->get_payment_method_image_url( $type ); $last_four = $token->get_last4(); $title = '<span class="title">'; if ( $image_url ) { // format like "<Amex logo image> American Express" $title .= sprintf( '<img src="%1$s" alt="%2$s" title="%2$s" width="30" height="20" style="width: 30px; height: 20px;" />', esc_url( $image_url ), esc_attr( $type ) ); // phpcs:ignore PluginCheck.CodeAnalysis.ImageFunctions.NonEnqueuedImage } else { // missing payment method image, format like "American Express" $title .= esc_html( $type ); } // add "ending in XXXX" if available if ( $last_four ) { $title .= '• • • ' . esc_html( $last_four ); } $expiry_month = $token->get_expiry_month(); $expiry_year = $token->get_expiry_year(); // add "(expires MM/YY)" if available if ( $expiry_month && $expiry_year ) { $expiry_date = $expiry_month . '/' . substr( $expiry_year, -2 ); /* translators: Placeholders: %s - expiry date */ $title .= ' ' . sprintf( esc_html__( '(expires %s)', 'woocommerce-square' ), $expiry_date ); } $title .= '</span>'; /** * Payment Gateway Payment Form Payment Method Title. * * Filters the text/HTML rendered for a saved payment method, like "Amex ending in 6666". * * @since 3.0.0 * * @param string $title * @param Payment_Gateway_Payment_Token $token * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_payment_method_title', $title, $token, $this ); } /** * Get the "Use new payment method" radio input HTML, like * * o Use new <card>|<bank account> * * @since 3.0.0 * @return string saved payment method title */ protected function get_use_new_payment_method_input_html() { // input $html = sprintf( '<input type="radio" id="wc-%1$s-use-new-payment-method" name="wc-%1$s-payment-token" class="js-sv-wc-payment-token js-wc-%1$s-payment-token" style="width:auto; margin-right: .5em;" value="" %2$s />', esc_attr( $this->get_gateway()->get_id_dasherized() ), checked( $this->default_new_payment_method(), true, false ) ); // label $html .= sprintf( '<label style="display:inline;" for="wc-%s-use-new-payment-method">%s</label>', esc_attr( $this->get_gateway()->get_id_dasherized() ), $this->get_gateway()->is_credit_card_gateway() ? esc_html__( 'Use a new card', 'woocommerce-square' ) : esc_html__( 'Use a new bank account', 'woocommerce-square' ) ); /** * Payment Gateway Payment Form New Payment Method Input HTML. * * Filters the HTML rendered for the "Use a new card" radio button. * * @since 3.0.0 * @param string $html * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_new_payment_method_input_html', $html, $this ); } /** * Get saved payment method checkbox HTML, like: * * [] Securely Save to Account * * @since 3.0.0 * @return string save payment method checkbox HTML */ protected function get_save_payment_method_checkbox_html() { $html = ''; if ( $this->tokenization_allowed() || $this->tokenization_forced() ) { if ( $this->tokenization_forced() ) { $html .= sprintf( '<input name="wc-%1$s-tokenize-payment-method" id="wc-%1$s-tokenize-payment-method" type="hidden" value="true" />', $this->get_gateway()->get_id_dasherized() ); } else { $html .= '<p class="form-row">'; /** * Payment Form Default Tokenize Payment Method Checkbox to Checked Filter. * * Allow actors to default the tokenize payment method checkbox state to checked. * * @since 3.0.0 * * @param bool $checked default false, set to true to change the checkbox state to checked * @param Payment_Gateway_Payment_Form $this payment form instance */ $checked = apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_default_tokenize_payment_method_checkbox_to_checked', false, $this ); $html .= sprintf( '<input name="wc-%1$s-tokenize-payment-method" id="wc-%1$s-tokenize-payment-method" class="js-sv-wc-tokenize-payment method js-wc-%1$s-tokenize-payment-method" type="checkbox" value="true" style="width:auto;" %2$s/>', $this->get_gateway()->get_id_dasherized(), $checked ? 'checked="checked" ' : '' ); $html .= sprintf( /* translators: account as in customer's account on the eCommerce site */ '<label for="wc-%s-tokenize-payment-method" style="display:inline;">%s</label>', $this->get_gateway()->get_id_dasherized(), /** * Payment Form Tokenize Payment Method Checkbox Text Filter. * * Allow actors to modify the "securely save to account" checkbox * text rendered on the payment form on the checkout page. * * @since 3.0.0 * * @param string $checkbox_text checkbox text */ apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_tokenize_payment_method_text', esc_html__( 'Securely Save to Account', 'woocommerce-square' ) ) ); $html .= '</p><div class="clear"></div>'; } } /** * Payment Gateway Payment Form Save Payment Method Checkbox HTML. * * Filters the HTML rendered for the "save payment method" checkbox. * * @since 3.0.0 * * @param string $html * @param Payment_Gateway_Payment_Form $this payment form instance */ return apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_save_payment_method_checkbox_html', $html, $this ); } /** Rendering methods *****************************************************/ /** * Renders the payment form * * @since 3.0.0 */ public function render() { /** * Payment Gateway Payment Form Start Action. * * Triggered before the payment fields are rendered. * * @hooked Payment_Gateway_Payment_Form::render_payment_form_description() - 15 (outputs payment form description HTML) * @hooked Payment_Gateway_Payment_Form::render_saved_payment_methods() - 20 (outputs saved payment method fields) * @hooked Payment_Gateway_Payment_Form::render_fieldset_start() - 30 (outputs opening fieldset tag and starting payment fields div) * * @since 3.0.0 * * @param Payment_Gateway_Payment_Form $this payment form instance */ do_action( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_start', $this ); /** * Payment Gateway Payment Form Action. * * Triggered for the payment fields. * * @hooked Payment_Gateway_Payment_Form::render_payment_fields() - 0 (outputs payment fields like account number, expiry, etc) * * @since 3.0.0 * * @param Payment_Gateway_Payment_Form $this payment form instance */ do_action( 'wc_' . $this->get_gateway()->get_id() . '_payment_form', $this ); /** * Payment Gateway Payment Form End Action. * * Triggered after the payment form fields are rendered. * * @hooked Payment_Gateway_Payment_Form::render_fieldset_end() - 5 (outputs clear div, save payment method checkbox, and closing fieldset tag) * @hooked Payment_Gateway_Payment_Form::render_js() - 5 (outputs JS for instantiating payment form JS class) * * @since 3.0.0 * * @param Payment_Gateway_Payment_Form $this payment form instance */ do_action( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_end', $this ); } /** * Render the payment form description * * @hooked wc_{gateway ID}_payment_form_start @ priority 15 * * @since 3.0.0 */ public function render_payment_form_description() { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo $this->get_payment_form_description_html(); } /** * Render the saved payment methods * * @hooked wc_{gateway ID}_payment_form_start @ priority 20 * * @since 3.0.0 */ public function render_saved_payment_methods() { $is_add_new_payment_method_page = $this->get_gateway()->supports_add_payment_method() && is_add_payment_method_page(); // tokenization forced check to prevent rendering this on the "add new payment method" screen if ( $this->has_tokens() && ! $is_add_new_payment_method_page ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo $this->get_saved_payment_methods_html(); } } /** * Render the payment form opening fieldset tag and div * * @hooked wc_{gateway ID}_payment_form_start @ priority 30 * * @since 3.0.0 */ public function render_fieldset_start() { printf( '<fieldset id="wc-%s-%s-form">', esc_attr( $this->get_gateway()->get_id_dasherized() ), esc_attr( $this->get_gateway()->get_payment_type() ) ); printf( '<div class="wc-%1$s-new-payment-method-form js-wc-%1$s-new-payment-method-form">', esc_attr( $this->get_gateway()->get_id_dasherized() ) ); } /** * Render the payment fields (e.g. account number, expiry, etc) * * @hooked wc_{gateway ID}_payment_form_start @ priority 0 * * @since 3.0.0 */ public function render_payment_fields() { foreach ( $this->get_payment_fields() as $field ) { $this->render_payment_field( $field ); } } /** * Render the payment, a simple wrapper around woocommerce_form_field() to * make it more convenient for concrete gateways to override form output * * @since 3.0.0 * @param array $field */ protected function render_payment_field( $field ) { woocommerce_form_field( $field['name'], $field, $field['value'] ); } /** * Render the payment form closing fieldset tag, clearing div, and "save * payment method" checkbox * * @hooked wc_{gateway ID}_payment_form_end @ priority 5 * * @since 3.0.0 */ public function render_fieldset_end() { // clear echo '<div class="clear"></div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo $this->get_save_payment_method_checkbox_html() . '</div><!-- ./new-payment-method-form-div -->'; echo '</fieldset>'; } /** * Renders the payment form JS * * @hooked wc_{gateway ID}_payment_form_end @ priority 5 * * @since 3.0.0 */ public function render_js() { $args = array( 'plugin_id' => $this->get_gateway()->get_plugin()->get_id(), 'id' => $this->get_gateway()->get_id(), 'id_dasherized' => $this->get_gateway()->get_id_dasherized(), 'type' => $this->get_gateway()->get_payment_type(), 'csc_required' => $this->get_gateway()->csc_enabled(), 'csc_required_for_tokens' => $this->get_gateway()->csc_enabled_for_tokens(), ); if ( $this->get_gateway()->supports_card_types() ) { $args['enabled_card_types'] = array_map( array( 'WooCommerce\Square\Framework\PaymentGateway\Payment_Gateway_Helper', 'normalize_card_type' ), $this->get_gateway()->get_card_types() ); } /** * Payment Gateway Payment Form JS Arguments Filter. * * Filter the arguments passed to the Payment Form handler JS class * * @since 3.0.0 * @param array $result { * @type string $plugin_id plugin ID * @type string $id gateway ID * @type string $id_dasherized gateway ID dasherized * @type string $type gateway payment type (e.g. 'credit-card') * @type bool $csc_required true if CSC field display is required * } * @param Payment_Gateway_Payment_Form $this payment form instance */ $args = apply_filters( 'wc_' . $this->get_gateway()->get_id() . '_payment_form_js_args', $args, $this ); wc_enqueue_js( sprintf( 'window.wc_%s_payment_form_handler = new WC_Square_Payment_Form_Handler( %s );', esc_js( $this->get_gateway()->get_id() ), wp_json_encode( $args ) ) ); } }
💾 保存
取消
保存为 UTF-8,换行统一为 LF