tion' => esc_html__( 'A payment provider in the context of the main Payments Settings page list.', 'woocommerce' ),
'properties' => array(
'id' => array(
'type' => 'string',
'description' => esc_html__( 'The unique identifier for the provider.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'_order' => array(
'type' => 'integer',
'description' => esc_html__( 'The sort order of the provider.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'_type' => array(
'type' => 'string',
'description' => esc_html__( 'The type of payment provider. Use this to differentiate between the various items in the list and determine their intended use.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'title' => array(
'type' => 'string',
'description' => esc_html__( 'The title of the provider.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'description' => array(
'type' => 'string',
'description' => esc_html__( 'The description of the provider.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'supports' => array(
'description' => __( 'Supported features for this provider.', 'woocommerce' ),
'type' => 'array',
'context' => array( 'view', 'edit' ),
'readonly' => true,
'items' => array(
'type' => 'string',
),
),
'plugin' => array(
'type' => 'object',
'description' => esc_html__( 'The corresponding plugin details of the provider.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'_type' => array(
'type' => 'string',
'enum' => array( PaymentProviders::EXTENSION_TYPE_WPORG ),
'description' => esc_html__( 'The type of the plugin.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'slug' => array(
'type' => 'string',
'description' => esc_html__( 'The slug of the plugin.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'file' => array(
'type' => 'string',
'description' => esc_html__( 'The plugin main file. This is a relative path to the plugins directory.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'status' => array(
'type' => 'string',
'enum' => array(
PaymentProviders::EXTENSION_NOT_INSTALLED,
PaymentProviders::EXTENSION_INSTALLED,
PaymentProviders::EXTENSION_ACTIVE,
),
'description' => esc_html__( 'The status of the plugin.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
'image' => array(
'type' => 'string',
'description' => esc_html__( 'The URL of the provider image.', 'woocommerce' ),
'readonly' => true,
),
'icon' => array(
'type' => 'string',
'description' => esc_html__( 'The URL of the provider icon (square aspect ratio - 72px by 72px).', 'woocommerce' ),
'readonly' => true,
),
'links' => array(
'type' => 'array',
'description' => __( 'Links for the provider.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'items' => array(
'type' => 'object',
'properties' => array(
'_type' => array(
'type' => 'string',
'description' => esc_html__( 'The type of the link.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'url' => array(
'type' => 'string',
'description' => esc_html__( 'The URL of the link.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
),
'state' => array(
'type' => 'object',
'description' => esc_html__( 'The general state of the provider with regards to it\'s payments processing.', 'woocommerce' ),
'properties' => array(
'enabled' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the provider is enabled for use on checkout.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'account_connected' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the provider has a payments processing account connected.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'needs_setup' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the provider needs setup.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'test_mode' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the provider is in test mode for payments processing.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'dev_mode' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the provider is in dev mode. Having this true usually leads to forcing test payments. ', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
'management' => array(
'type' => 'object',
'description' => esc_html__( 'The management details of the provider.', 'woocommerce' ),
'properties' => array(
'_links' => array(
'type' => 'object',
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'settings' => array(
'type' => 'object',
'description' => esc_html__( 'The link to the settings page for the payment gateway.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'href' => array(
'type' => 'string',
'description' => esc_html__( 'The URL to the settings page for the payment gateway.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
),
),
),
),
'onboarding' => array(
'type' => 'object',
'description' => esc_html__( 'Onboarding-related details for the provider.', 'woocommerce' ),
'properties' => array(
'state' => array(
'type' => 'object',
'description' => esc_html__( 'The state of the onboarding process.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'properties' => array(
'started' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the onboarding process has been started.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'completed' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the onboarding process has been completed.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'test_mode' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the onboarding process happens in test mode (aka sandbox or test-drive).', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
'_links' => array(
'type' => 'object',
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'onboard' => array(
'type' => 'object',
'description' => esc_html__( 'The start/continue onboarding link for the payment gateway.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'href' => array(
'type' => 'string',
'description' => esc_html__( 'The URL to start/continue onboarding for the payment gateway.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
),
),
'recommended_payment_methods' => array(
'type' => 'array',
'description' => esc_html__( 'The list of recommended payment methods details for the payment gateway.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'items' => array(
'type' => 'object',
'description' => esc_html__( 'The details for a recommended payment method.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'id' => array(
'type' => 'string',
'description' => esc_html__( 'The unique identifier for the payment method.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'_order' => array(
'type' => 'integer',
'description' => esc_html__( 'The sort order of the payment method.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'enabled' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the payment method should be recommended as enabled or not.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'required' => array(
'type' => 'boolean',
'description' => esc_html__( 'Whether the payment method should be required (and force-enabled) or not.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'title' => array(
'type' => 'string',
'description' => esc_html__( 'The title of the payment method. Does not include HTML tags.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'description' => array(
'type' => 'string',
'description' => esc_html__( 'The description of the payment method. It can contain basic HTML.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'icon' => array(
'type' => 'string',
'description' => esc_html__( 'The URL of the payment method icon or a base64-encoded SVG image.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
),
),
),
'tags' => array(
'type' => 'array',
'description' => esc_html__( 'The tags associated with the provider.', 'woocommerce' ),
'uniqueItems' => true,
'context' => array( 'view', 'edit' ),
'readonly' => true,
'items' => array(
'type' => 'string',
'description' => esc_html__( 'Tag associated with the provider.', 'woocommerce' ),
'readonly' => true,
),
),
'_suggestion_id' => array(
'type' => 'string',
'description' => esc_html__( 'The suggestion ID matching this provider.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'_incentive' => array(
'type' => 'object',
'description' => esc_html__( 'The active incentive for the provider.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'id' => array(
'type' => 'string',
'description' => esc_html__( 'The incentive unique ID. This ID needs to be used for incentive dismissals.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'promo_id' => array(
'type' => 'string',
'description' => esc_html__( 'The incentive promo ID. This ID need to be fed into the onboarding flow.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'title' => array(
'type' => 'string',
'description' => esc_html__( 'The incentive title. It can contain stylistic HTML.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'description' => array(
'type' => 'string',
'description' => esc_html__( 'The incentive description. It can contain stylistic HTML.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'short_description' => array(
'type' => 'string',
'description' => esc_html__( 'The short description of the incentive. It can contain stylistic HTML.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'cta_label' => array(
'type' => 'string',
'description' => esc_html__( 'The call to action label for the incentive.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'tc_url' => array(
'type' => 'string',
'description' => esc_html__( 'The URL to the terms and conditions for the incentive.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'badge' => array(
'type' => 'string',
'description' => esc_html__( 'The badge label for the incentive.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'_dismissals' => array(
'type' => 'array',
'description' => esc_html__( 'The dismissals list for the incentive. The `all` entry means the incentive was dismissed for all contexts.', 'woocommerce' ),
'uniqueItems' => true,
'context' => array( 'view', 'edit' ),
'readonly' => true,
'items' => array(
'type' => 'string',
'description' => esc_html__( 'Context ID in which the incentive was dismissed.', 'woocommerce' ),
'readonly' => true,
),
),
'_links' => array(
'type' => 'object',
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'dismiss' => array(
'type' => 'object',
'description' => esc_html__( 'The link to dismiss the incentive.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'href' => array(
'type' => 'string',
'description' => esc_html__( 'The URL to dismiss the incentive.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
'onboard' => array(
'type' => 'object',
'description' => esc_html__( 'The start/continue onboarding link for the payment gateway.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'href' => array(
'type' => 'string',
'description' => esc_html__( 'The URL to start/continue onboarding for the payment gateway.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
),
),
),
),
'_links' => array(
'type' => 'object',
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'hide' => array(
'type' => 'object',
'description' => esc_html__( 'The link to hide the suggestion.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'href' => array(
'type' => 'string',
'description' => esc_html__( 'The URL to hide the suggestion.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
),
),
),
);
}
/**
* Get the schema for a suggestion.
*
* @return array The schema for a suggestion.
*/
private function get_schema_for_suggestion(): array {
return array(
'type' => 'object',
'description' => esc_html__( 'A suggestion with full details.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'id' => array(
'type' => 'string',
'description' => esc_html__( 'The unique identifier for the suggestion.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'_priority' => array(
'type' => 'integer',
'description' => esc_html__( 'The priority of the suggestion.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'_type' => array(
'type' => 'string',
'description' => esc_html__( 'The type of the suggestion.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'title' => array(
'type' => 'string',
'description' => esc_html__( 'The title of the suggestion.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'description' => array(
'type' => 'string',
'description' => esc_html__( 'The description of the suggestion.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'plugin' => array(
'type' => 'object',
'context' => array( 'view', 'edit' ),
'readonly' => true,
'properties' => array(
'_type' => array(
'type' => 'string',
'enum' => array( PaymentProviders::EXTENSION_TYPE_WPORG ),
'description' => esc_html__( 'The type of the plugin.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'slug' => array(
'type' => 'string',
'description' => esc_html__( 'The slug of the plugin.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'status' => array(
'type' => 'string',
'enum' => array(
PaymentProviders::EXTENSION_NOT_INSTALLED,
PaymentProviders::EXTENSION_INSTALLED,
PaymentProviders::EXTENSION_ACTIVE,
),
'description' => esc_html__( 'The status of the plugin.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
'image' => array(
'type' => 'string',
'description' => esc_html__( 'The URL of the image.', 'woocommerce' ),
'readonly' => true,
),
'icon' => array(
'type' => 'string',
'description' => esc_html__( 'The URL of the icon (square aspect ratio).', 'woocommerce' ),
'readonly' => true,
),
'links' => array(
'type' => 'array',
'context' => array( 'view', 'edit' ),
'readonly' => true,
'items' => array(
'type' => 'object',
'properties' => array(
'_type' => array(
'type' => 'string',
'description' => esc_html__( 'The type of the link.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'url' => array(
'type' => 'string',
'description' => esc_html__( 'The URL of the link.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
),
'tags' => array(
'description' => esc_html__( 'The tags associated with the suggestion.', 'woocommerce' ),
'type' => 'array',
'uniqueItems' => true,
'context' => array( 'view', 'edit' ),
'readonly' => true,
'items' => array(
'type' => 'string',
'description' => esc_html__( 'The tags associated with the suggestion.', 'woocommerce' ),
'readonly' => true,
),
),
'category' => array(
'type' => 'string',
'description' => esc_html__( 'The category of the suggestion.', 'woocommerce' ),
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
);
}
}