Плагин WooCommerce Eway не создает токен для нового клиента - PullRequest
0 голосов
/ 26 января 2019

Я установил новый док-контейнер с Wordpress 5.0.3 и последним плагином WC и WC Eway (WooCommerce eWAY Gateway).

Создал магазин с некоторыми продуктами, подключил свою среду песочницы Eway, включилСохраните карты (что позволит активировать токен) и создайте заказ.После проверки post_meta в моей БД для заказа я не увидел поле _eway_token_customer_id.Когда я вошел в систему как клиент, я попробовал еще раз, и с новым заказом я все еще не получил токен.

Причина этих тестов заключается в том, что я получил это странное поведение на моем реальном, новом веб-сайте, гдепервый заказ с НОВЫМ клиентом не приводит к получению токена.Однако, когда я создаю второй заказ во время входа в систему, я получаю _eway_token_customer_id значение в пределах order_meta.

. Мне необходимо получить этот токен с первым заказом, потому что после этогоЯ автоматически обновлю продукт, используя опцию tokenp ayment.

Отладка этой проблемы - ад, и меня это очень смущает, что при новой установке WP я вообще не получаю токен.

Isесть кто-нибудь, у кого есть блестящая идея?

** update После некоторого поиска в плагине Eway я обнаружил, что в первый раз, когда я делаю заказ, функция request_access_code() из класса WC_Gateway_EWAYпроверка наличия токена в базе данных для этого пользователя.

Тело функции:

protected function request_access_code( $order ) {

        $token_payment = $this->get_token_customer_id( $order );

        if ( $token_payment && 'new' === $token_payment ) {
            $result = json_decode( $this->get_api()->request_access_code( $order, 'TokenPayment', 'Recurring' ) );
        } elseif ( 0 === $order->get_total() && 'shop_subscription' === ( version_compare( WC_VERSION, '3.0', '<' ) ? $order->order_type : $order->get_type() ) ) {
            $result = json_decode( $this->get_api()->request_access_code( $order, 'CreateTokenCustomer', 'Recurring' ) );
        } else {
            $result = json_decode( $this->get_api()->request_access_code( $order ) );
        }

        if ( isset( $result->Errors ) && ! is_null( $result->Errors ) ) {
            throw new Exception( $this->response_message_lookup( $result->Errors ) );
        }

        return $result;

    }

Функция обрабатывает три возможных результата:

1) new customer: results in calling `$this->get_api()->request_access_code( $order, 'TokenPayment', 'Recurring' )` <-- this is the one we are after!

2) shop_subscription: calls `$this->get_api()->request_access_code( $order, 'CreateTokenCustomer', 'Recurring' )`

3) else..: calls `$this->get_api()->request_access_code( $order )`

То, что происходит во время отладки, заключается в том, что переменная $token_payment имеетзначение пустой строки для нового клиента вместо new.Поэтому я попытаюсь исправить это, либо через фильтр / ловушку действия, либо выяснить, почему это происходит.

Когда я принудительно использовал функцию, всегда использующую первый блок if, я получил свой токен.:)

** Обновление 2: я протестировал существующую учетную запись пользователя, создал новый заказ.Когда я смотрю в таблицу post_meta: enter image description here Вуаля, присутствует значение new.

Однако, когда я не вошел в систему и создал учетную запись,Значение new не добавляется, и именно здесь оно идет не так.

Временным исправлением было бы использование ловушки и добавление значения new к порядку, чтобы при вызове get_token_customer_id он получалnew значение, а не пустая строка.

Я думаю, что это ошибка, так как это значение должно быть добавлено.Это объясняет, почему вторые транзакции получают токен, а не первую.

Если бы только плагин Woocommerce Eway имел git-репо .... Я мог бы отметить проблему или разветвлять ее.

*** Решение без взлома Добавил это в мой плагин (или functions.php, если хотите):

add_action( 'woocommerce_checkout_order_processed', function( $order_id, $posted_data, $order ) {
            update_post_meta( $order_id, '_eway_token_customer_id', 'new' );
        }, 10, 3);

Это добавит новое значение, когда вы оформляете заказ с несуществующим пользователем.Токен был добавлен после добавления данных моей кредитной карты.

Дело в том, что в плагине все еще есть ошибка, которую вы можете обойти.

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