Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
swedbank-pay-payments
/
includes
:
class-wc-gateway-swedbank-pay-trustly.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php defined( 'ABSPATH' ) || exit; use SwedbankPay\Payments\WooCommerce\WC_Swedbank_Pay_Transactions; use SwedbankPay\Core\Adapter\WC_Adapter; use SwedbankPay\Core\Core; class WC_Gateway_Swedbank_Pay_Trustly extends WC_Gateway_Swedbank_Pay_Cc { /** * Access Token * @var string */ public $access_token = ''; /** * Payee Id * @var string */ public $payee_id = ''; /** * Subsite * @var string */ public $subsite = ''; /** * Test Mode * @var string */ public $testmode = 'yes'; /** * Debug Mode * @var string */ public $debug = 'yes'; /** * IP Checking * @var string */ public $ip_check = 'yes'; /** * Locale * @var string */ public $culture = 'en-US'; /** * Checkout Method * @var string */ public $method = self::METHOD_REDIRECT; /** * Init */ public function __construct() { $this->transactions = WC_Swedbank_Pay_Transactions::instance(); $this->id = 'payex_psp_trustly'; $this->has_fields = true; $this->method_title = __( 'Trustly Payments', 'swedbank-pay-woocommerce-payments' ); $this->icon = apply_filters( 'wc_swedbank_pay_trustly_icon', plugins_url( '/assets/images/trustly.png', dirname( __FILE__ ) ) ); $this->supports = array( 'products', 'refunds', ); // Load the form fields. $this->init_form_fields(); // Load the settings. $this->init_settings(); // Update access_token if merchant_token is exists if ( empty( $this->settings['access_token'] ) && ! empty( $this->settings['merchant_token'] ) ) { $this->settings['access_token'] = $this->settings['merchant_token']; $this->update_option( 'access_token', $this->settings['access_token'] ); } // Define user set variables $this->enabled = isset( $this->settings['enabled'] ) ? $this->settings['enabled'] : 'no'; $this->title = isset( $this->settings['title'] ) ? $this->settings['title'] : ''; $this->description = isset( $this->settings['description'] ) ? $this->settings['description'] : ''; $this->access_token = isset( $this->settings['access_token'] ) ? $this->settings['access_token'] : $this->access_token; $this->payee_id = isset( $this->settings['payee_id'] ) ? $this->settings['payee_id'] : $this->payee_id; $this->subsite = isset( $this->settings['subsite'] ) ? $this->settings['subsite'] : $this->subsite; $this->testmode = isset( $this->settings['testmode'] ) ? $this->settings['testmode'] : $this->testmode; $this->debug = isset( $this->settings['debug'] ) ? $this->settings['debug'] : $this->debug; $this->ip_check = isset( $this->settings['ip_check'] ) ? $this->settings['ip_check'] : $this->ip_check; $this->culture = isset( $this->settings['culture'] ) ? $this->settings['culture'] : $this->culture; $this->method = isset( $this->settings['method'] ) ? $this->settings['method'] : $this->method; $this->terms_url = isset( $this->settings['terms_url'] ) ? $this->settings['terms_url'] : get_site_url(); $this->logo_url = isset( $this->settings['logo_url'] ) ? $this->settings['logo_url'] : $this->logo_url; // JS Scrips add_action( 'wp_enqueue_scripts', array( $this, 'payment_scripts' ) ); // Actions add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); add_filter( 'wc_get_template', array( $this, 'override_template' ), 5, 20 ); add_action( 'woocommerce_before_thankyou', array( $this, 'thankyou_page' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'thankyou_scripts' ) ); // Payment listener/API hook add_action( 'woocommerce_api_' . strtolower( __CLASS__ ), array( $this, 'return_handler' ) ); $this->adapter = new WC_Adapter( $this ); $this->core = new Core( $this->adapter ); } /** * Initialise Settings Form Fields * @return string|void */ public function init_form_fields() { $this->form_fields = array( 'enabled' => array( 'title' => __( 'Enable/Disable', 'swedbank-pay-woocommerce-payments' ), 'type' => 'checkbox', 'label' => __( 'Enable plugin', 'swedbank-pay-woocommerce-payments' ), 'default' => 'no', ), 'title' => array( 'title' => __( 'Title', 'swedbank-pay-woocommerce-payments' ), 'type' => 'text', 'description' => __( 'This controls the title which the user sees during checkout.', 'swedbank-pay-woocommerce-payments' ), 'default' => __( 'Trustly Payments', 'swedbank-pay-woocommerce-payments' ), ), 'description' => array( 'title' => __( 'Description', 'swedbank-pay-woocommerce-payments' ), 'type' => 'text', 'description' => __( 'This controls the description which the user sees during checkout.', 'swedbank-pay-woocommerce-payments' ), 'default' => __( 'Trustly Payments', 'swedbank-pay-woocommerce-payments' ), ), 'payee_id' => array( 'title' => __( 'Payee Id', 'swedbank-pay-woocommerce-payments' ), 'type' => 'text', 'description' => __( 'Payee Id', 'swedbank-pay-woocommerce-payments' ), 'default' => $this->payee_id, ), 'access_token' => array( 'title' => __( 'Access Token', 'swedbank-pay-woocommerce-payments' ), 'type' => 'text', 'description' => __( 'Access Token', 'swedbank-pay-woocommerce-payments' ), 'default' => $this->access_token, ), 'subsite' => array( 'title' => __( 'Subsite', 'woocommerce-gateway-payex-checkout' ), 'type' => 'text', 'description' => __( 'Subsite', 'woocommerce-gateway-payex-checkout' ), 'default' => $this->subsite, ), 'testmode' => array( 'title' => __( 'Test Mode', 'swedbank-pay-woocommerce-payments' ), 'type' => 'checkbox', 'label' => __( 'Enable Swedbank Pay Test Mode', 'swedbank-pay-woocommerce-payments' ), 'default' => $this->testmode, ), 'debug' => array( 'title' => __( 'Debug', 'swedbank-pay-woocommerce-payments' ), 'type' => 'checkbox', 'label' => __( 'Enable logging', 'swedbank-pay-woocommerce-payments' ), 'default' => $this->debug, ), 'ip_check' => array( 'title' => __( 'Enable IP checking of incoming callbacks', 'swedbank-pay-woocommerce-payments' ), 'type' => 'checkbox', 'label' => __( 'Enable IP checking of incoming callbacks', 'swedbank-pay-woocommerce-payments' ), 'default' => $this->ip_check, ), 'culture' => array( 'title' => __( 'Language', 'swedbank-pay-woocommerce-payments' ), 'type' => 'select', 'options' => array( 'en-US' => 'English', 'sv-SE' => 'Swedish', 'nb-NO' => 'Norway', 'fi-FI' => 'Finish', ), 'description' => __( 'Language of pages displayed by Swedbank Pay during payment.', 'swedbank-pay-woocommerce-payments' ), 'default' => $this->culture, ), 'method' => array( 'title' => __( 'Checkout Method', 'swedbank-pay-woocommerce-payments' ), 'type' => 'select', 'options' => array( self::METHOD_REDIRECT => __( 'Redirect', 'swedbank-pay-woocommerce-payments' ), self::METHOD_SEAMLESS => __( 'Seamless View', 'swedbank-pay-woocommerce-payments' ), ), 'description' => __( 'Checkout Method', 'swedbank-pay-woocommerce-payments' ), 'default' => $this->method, ), 'terms_url' => array( 'title' => __( 'Terms & Conditions Url', 'swedbank-pay-woocommerce-payments' ), 'type' => 'text', 'description' => __( 'Requires https.', 'swedbank-pay-woocommerce-payments' ), 'desc_tip' => true, 'default' => get_site_url(), 'sanitize_callback' => function( $value ) { if ( ! empty( $value ) ) { if ( ! filter_var( $value, FILTER_VALIDATE_URL ) ) { throw new Exception( __( 'Terms & Conditions Url is invalid.', 'swedbank-pay-woocommerce-payments' ) ); } elseif ( 'https' !== parse_url( $value, PHP_URL_SCHEME ) ) { throw new Exception( __( 'Terms & Conditions Url should use https scheme.', 'swedbank-pay-woocommerce-payments' ) ); } } return $value; }, ), 'logo_url' => array( 'title' => __( 'Logo Url', 'swedbank-pay-woocommerce-payments' ), 'type' => 'text', 'description' => __( 'The URL that will be used for showing the customer logo. Requires https.', 'swedbank-pay-woocommerce-payments' ), 'desc_tip' => true, 'default' => $this->get_custom_logo(), 'sanitize_callback' => function( $value ) { if ( ! empty( $value ) ) { if ( ! filter_var( $value, FILTER_VALIDATE_URL ) ) { throw new Exception( __( 'Logo Url is invalid.', 'swedbank-pay-woocommerce-payments' ) ); } elseif ( 'https' !== parse_url( $value, PHP_URL_SCHEME ) ) { throw new Exception( __( 'Logo Url should use https scheme.', 'swedbank-pay-woocommerce-payments' ) ); } } return $value; }, ), ); } /** * payment_scripts function. * * Outputs scripts used for payment * * @return void */ public function payment_scripts() { if ( ! is_checkout() || 'no' === $this->enabled || self::METHOD_SEAMLESS !== $this->method ) { return; } $this->enqueue_seamless(); $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_register_script( 'wc-sb-trustly', untrailingslashit( plugins_url( '/', __FILE__ ) ) . '/../assets/js/seamless-trustly' . $suffix . '.js', array( 'wc-sb-seamless', ), false, true ); // Localize the script with new data wp_localize_script( 'wc-sb-trustly', 'WC_Gateway_Swedbank_Pay_Trustly', array( 'culture' => $this->culture ) ); wp_enqueue_script( 'wc-sb-trustly' ); } /** * If There are no payment fields show the description if set. */ public function payment_fields() { parent::payment_fields(); } /** * Process Payment * * @param int $order_id * * @return array|false */ public function process_payment( $order_id ) { $order = wc_get_order( $order_id ); // Use `redirect` method for `order-pay` endpoints if ( is_wc_endpoint_url( 'order-pay' ) ) { $this->method = self::METHOD_REDIRECT; } // Process payment try { $result = $this->core->initiateTrustlyPayment( $order_id ); } catch ( Exception $e ) { wc_add_notice( $e->getMessage(), 'error' ); return false; } // Save payment ID $order->update_meta_data( '_payex_payment_id', $result['payment']['id'] ); $redirect_sale = $result->getOperationByRel( 'redirect-sale' ); if ( $redirect_sale ) { $order->update_meta_data( '_sb_redirect_sale', $redirect_sale ); } $view_sales = $result->getOperationByRel( 'view-sales' ); if ( $view_sales ) { $order->update_meta_data( '_sb_view_sales', $view_sales ); } $order->save_meta_data(); $order->save(); switch ( $this->method ) { case self::METHOD_REDIRECT: // Get Redirect return array( 'result' => 'success', 'redirect' => $redirect_sale, ); case self::METHOD_SEAMLESS: return array( 'result' => 'success', 'redirect' => '#!swedbank-pay-trustly', 'is_swedbank_pay_trustly' => true, 'js_url' => $view_sales, ); default: wc_add_notice( __( 'Wrong method', 'swedbank-pay-woocommerce-payments' ), 'error' ); return false; } } /** * Capture * * @param WC_Order|int $order * @param mixed $amount * @param mixed $vat_amount * * @return void * @throws \Exception */ public function capture_payment( $order, $amount = false, $vat_amount = 0 ) { if ( is_int( $order ) ) { $order = wc_get_order( $order ); } if ( is_int( $order ) ) { $order = wc_get_order( $order ); } try { $this->core->capture( $order->get_id(), $amount, $vat_amount ); } catch ( \SwedbankPay\Core\Exception $e ) { throw new Exception( $e->getMessage() ); } } /** * Cancel * * @param WC_Order|int $order * * @return void * @throws \Exception */ public function cancel_payment( $order ) { if ( is_int( $order ) ) { $order = wc_get_order( $order ); } try { $this->core->cancel( $order->get_id() ); } catch ( \SwedbankPay\Core\Exception $e ) { throw new Exception( $e->getMessage() ); } } }