';
echo wp_kses_post( wpautop( $this->get_method_description() ) );
parent::admin_options();
}
/**
* Init settings for gateways.
*/
public function init_settings() {
parent::init_settings();
$this->enabled = ! empty( $this->settings['enabled'] ) && 'yes' === $this->settings['enabled'] ? 'yes' : 'no';
}
/**
* Return whether or not this gateway still requires setup to function.
*
* When this gateway is toggled on via AJAX, if this returns true a
* redirect will occur to the settings page instead.
*
* @since 3.4.0
* @return bool
*/
public function needs_setup() {
return false;
}
/**
* Get the return url (thank you page).
*
* @param WC_Order|null $order Order object.
* @return string
*/
public function get_return_url( $order = null ) {
if ( $order ) {
$return_url = $order->get_checkout_order_received_url();
} else {
$return_url = wc_get_endpoint_url( 'order-received', '', wc_get_checkout_url() );
}
/**
* Filter the return url.
*
* @since 2.4.0
* @param string $return_url Return URL.
* @param WC_Order|null $order Order object.
* @return string
*/
return apply_filters( 'woocommerce_get_return_url', $return_url, $order );
}
/**
* Get a link to the transaction on the 3rd party gateway site (if applicable).
*
* @param WC_Order $order the order object.
* @return string transaction URL, or empty string.
*/
public function get_transaction_url( $order ) {
$return_url = '';
$transaction_id = $order->get_transaction_id();
if ( ! empty( $this->view_transaction_url ) && ! empty( $transaction_id ) ) {
$return_url = sprintf( $this->view_transaction_url, $transaction_id );
}
/**
* Filter the transaction url.
*
* @since 2.2.0
* @param string $return_url Transaction URL.
* @param WC_Order|null $order Order object.
* @return string
*/
return apply_filters( 'woocommerce_get_transaction_url', $return_url, $order, $this );
}
/**
* Get the order total in checkout and pay_for_order.
*
* @return float
*/
protected function get_order_total() {
$total = 0;
$order_id = absint( get_query_var( 'order-pay' ) );
// Gets order total from "pay for order" page.
if ( 0 < $order_id ) {
$order = wc_get_order( $order_id );
if ( $order ) {
$total = (float) $order->get_total();
}
// Gets order total from cart/checkout.
} elseif ( 0 < WC()->cart->total ) {
$total = (float) WC()->cart->total;
}
return $total;
}
/**
* Check if the gateway is available for use.
*
* @return bool
*/
public function is_available() {
$is_available = ( 'yes' === $this->enabled );
if ( WC()->cart && 0 < $this->get_order_total() && 0 < $this->max_amount && $this->max_amount < $this->get_order_total() ) {
$is_available = false;
}
return $is_available;
}
/**
* Check if the gateway has fields on the checkout.
*
* @return bool
*/
public function has_fields() {
return (bool) $this->has_fields;
}
/**
* Return the gateway's title.
*
* @return string
*/
public function get_title() {
$title = wc_get_container()->get( HtmlSanitizer::class )->sanitize( (string) $this->title, HtmlSanitizer::LOW_HTML_BALANCED_TAGS_NO_LINKS );
/**
* Filter the gateway title.
*
* @since 1.5.8
* @param string $title Gateway title.
* @param string $id Gateway ID.
* @return string
*/
return apply_filters( 'woocommerce_gateway_title', $title, $this->id );
}
/**
* Return the gateway's description.
*
* @return string
*/
public function get_description() {
/**
* Filters the gateway description.
*
* Descriptions can be overridden by extending this method or through the use of `woocommerce_gateway_description`
* To avoid breaking custom HTML that may be returned we cannot enforce KSES at render time, so we run it here.
*
* @since 1.5.8
* @since 9.0.0 wp_kses_post() is used to sanitize the description before passing it to the filter.
* @param string $description Gateway description.
* @param string $id Gateway ID.
* @return string
*/
return apply_filters( 'woocommerce_gateway_description', wp_kses_post( $this->description ), $this->id );
}
/**
* Return the gateway's icon.
*
* @return string
*/
public function get_icon() {
$icon = $this->icon ? '' : '';
/**
* Filter the gateway icon.
*
* @since 1.5.8
* @param string $icon Gateway icon.
* @param string $id Gateway ID.
* @return string
*/
return apply_filters( 'woocommerce_gateway_icon', $icon, $this->id );
}
/**
* Return the gateway's pay button ID.
*
* @since 3.9.0
* @return string
*/
public function get_pay_button_id() {
return sanitize_html_class( $this->pay_button_id );
}
/**
* Set as current gateway.
*
* Set this as the current gateway.
*/
public function set_current() {
$this->chosen = true;
}
/**
* Process Payment.
*
* Process the payment. Override this in your gateway. When implemented, this should.
* return the success and redirect in an array. e.g:
*
* return array(
* 'result' => 'success',
* 'redirect' => $this->get_return_url( $order )
* );
*
* @param int $order_id Order ID.
* @return array
*/
public function process_payment( $order_id ) {
return array();
}
/**
* Process refund.
*
* If the gateway declares 'refunds' support, this will allow it to refund.
* a passed in amount.
*
* @param int $order_id Order ID.
* @param float|null $amount Refund amount.
* @param string $reason Refund reason.
* @return bool|\WP_Error True or false based on success, or a WP_Error object.
*/
public function process_refund( $order_id, $amount = null, $reason = '' ) {
return false;
}
/**
* Validate frontend fields.
*
* Validate payment fields on the frontend.
*
* @return bool
*/
public function validate_fields() {
return true;
}
/**
* Default payment fields display. Override this in your gateway to customize displayed fields.
*
* By default this renders the payment gateway description.
*
* @since 1.5.7
*/
public function payment_fields() {
$description = $this->get_description();
if ( $description ) {
// KSES is ran within get_description, but not here since there may be custom HTML returned by extensions.
echo wpautop( wptexturize( $description ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
if ( $this->supports( 'default_credit_card_form' ) ) {
$this->credit_card_form(); // Deprecated, will be removed in a future version.
}
}
/**
* Check if a gateway supports a given feature.
*
* Gateways should override this to declare support (or lack of support) for a feature.
* For backward compatibility, gateways support 'products' by default, but nothing else.
*
* @param string $feature string The name of a feature to test support for.
* @return bool True if the gateway supports the feature, false otherwise.
* @since 1.5.7
*/
public function supports( $feature ) {
/**
* Filter the gateway supported features.
*
* @since 1.5.7
* @param boolean $supports If the gateway supports the feature.
* @param string $feature Feature to check.
* @param WC_Payment_Gateway $this Payment gateway instance.
* @return string
*/
return apply_filters( 'woocommerce_payment_gateway_supports', in_array( $feature, $this->supports, true ), $feature, $this );
}
/**
* Can the order be refunded via this gateway?
*
* Should be extended by gateways to do their own checks.
*
* @param WC_Order $order Order object.
* @return bool If false, the automatic refund button is hidden in the UI.
*/
public function can_refund_order( $order ) {
return $order && $this->supports( 'refunds' );
}
/**
* Core credit card form which gateways can use if needed. Deprecated - inherit WC_Payment_Gateway_CC instead.
*
* @param array $args Arguments.
* @param array $fields Fields.
*/
public function credit_card_form( $args = array(), $fields = array() ) {
wc_deprecated_function( 'credit_card_form', '2.6', 'WC_Payment_Gateway_CC->form' );
$cc_form = new WC_Payment_Gateway_CC();
$cc_form->id = $this->id;
$cc_form->supports = $this->supports;
$cc_form->form();
}
/**
* Enqueues our tokenization script to handle some of the new form options.
*
* @since 2.6.0
*/
public function tokenization_script() {
wp_enqueue_script(
'woocommerce-tokenization-form',
plugins_url( '/assets/js/frontend/tokenization-form' . ( Constants::is_true( 'SCRIPT_DEBUG' ) ? '' : '.min' ) . '.js', WC_PLUGIN_FILE ),
array( 'jquery' ),
WC()->version,
false
);
wp_localize_script(
'woocommerce-tokenization-form',
'wc_tokenization_form_params',
array(
'is_registration_required' => WC()->checkout()->is_registration_required(),
'is_logged_in' => is_user_logged_in(),
)
);
}
/**
* Grab and display our saved payment methods.
*
* @since 2.6.0
*/
public function saved_payment_methods() {
$html = '