Пользовательский метод оплаты WooCommerce - PullRequest
0 голосов
/ 28 июня 2019

Я должен добавить собственный способ оплаты в woocommerce.этот метод оплаты имеет хорошо документированные JSON API.как добавить собственный способ оплаты и подключить его к API?

Ответы [ 3 ]

1 голос
/ 28 июня 2019

Фильтр woocommerce_payment_gateways позволяет добавлять пользовательские платежные шлюзы в woocommerce.

add_filter( 'woocommerce_payment_gateways', 'add_your_gateway_class' );

function add_your_gateway_class( $methods ) {
    $methods[] = 'WC_Custom_PG'; 
    return $methods;
}

Затем вы создаете класс, который расширяет класс WC_Payment_Gateway . В его конструкторе вам нужно установить уникальный идентификатор, заголовок и описание для вашего платежного шлюза. Вам также нужно инициализировать поля формы и настройки платежного шлюза.

Класс платежного шлюза должен быть определен в функции, которая вызывается plugins_loaded hook


add_action( 'plugins_loaded', 'init_wc_custom_payment_gateway' );

function init_wc_custom_payment_gateway(){
    class WC_Custom_PG extends WC_Payment_Gateway {
        function __construct(){
            $this->id = 'wc_custom_pg';
            $this->method_title = 'Custom Payment Gateway';
            $this->title = 'Custom Payment Gateway';
            $this->has_fields = true;
            $this->method_description = 'Your description of the payment gateway';

            //load the settings
            $this->init_form_fields();
            $this->init_settings();
            $this->enabled = $this->get_option('enabled');
            $this->title = $this->get_option( 'title' );
            $this->description = $this->get_option('description');

            //process settings with parent method
            add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );

        }
        public function init_form_fields(){
            $this->form_fields = array(
                'enabled' => array(
                    'title'         => 'Enable/Disable',
                    'type'          => 'checkbox',
                    'label'         => 'Enable Custom Payment Gateway',
                    'default'       => 'yes'
                ),
                'title' => array(
                    'title'         => 'Method Title',
                    'type'          => 'text',
                    'description'   => 'This controls the payment method title',
                    'default'       => 'Custom Payment Gatway',
                    'desc_tip'      => true,
                ),
                'description' => array(
                    'title'         => 'Customer Message',
                    'type'          => 'textarea',
                    'css'           => 'width:500px;',
                    'default'       => 'Your Payment Gateway Description',
                    'description'   => 'The message which you want it to appear to the customer in the checkout page.',
                )
            );
        }

        function process_payment( $order_id ) {
            global $woocommerce;

            $order = new WC_Order( $order_id );

            /****

                Here is where you need to call your payment gateway API to process the payment
                You can use cURL or wp_remote_get()/wp_remote_post() to send data and receive response from your API.

            ****/

            //Based on the response from your payment gateway, you can set the the order status to processing or completed if successful:
            $order->update_status('processing','Additional data like transaction id or reference number');

            //once the order is updated clear the cart and reduce the stock
            $woocommerce->cart->empty_cart();
            $order->reduce_order_stock();

            //if the payment processing was successful, return an array with result as success and redirect to the order-received/thank you page.
            return array(
                'result' => 'success',
                'redirect' => $this->get_return_url( $order )
            );
        }

        //this function lets you add fields that can collect payment information in the checkout page like card details and pass it on to your payment gateway API through the process_payment function defined above.

        public function payment_fields(){
            ?>
            <fieldset>
                <p class="form-row form-row-wide">
                    <?php echo esc_attr($this->description); ?>
                </p>                        
                <div class="clear"></div>
            </fieldset>
            <?php
        }

    }
}

После активации подключаемого модуля платежного шлюза этот метод можно включить на странице WooCommerce> Настройки> Платежи .

Для получения дополнительной информации о настройке платежного шлюза, вы можете посетить: https://docs.woocommerce.com/document/payment-gateway-api/

Вы можете создать его как плагин или добавить весь код в файл function.php вашей темы.

0 голосов
/ 28 июня 2019

спасибо вам обоим!

Я также добавил эти строки, иначе я не смог бы его активировать:

add_filter('woocommerce_payment_gateways', 'weldpay_add_gateway_class');
function weldpay_add_gateway_class($gateways) {
    $gateways[] = 'WC_Weldpay';
    return $gateways;
}

есть возможность получить информацию из кассы, такую ​​как предметы, имя, фамилия, адрес и т. Д.?

0 голосов
/ 28 июня 2019

Вам необходимо написать плагин, который встраивает ваш шлюз API.

Дополнительная информация по документации Woocomerce: Payment Gateway API

Вы можете увидеть дополнительную информацию о коде./ class / etc в Woocomerce API Doc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...