Невозможно подключить VendHQ (POS) к WooCommerce (WP) - PullRequest
1 голос
/ 07 ноября 2019

Я потратил много дней, пытаясь выяснить это, и кажется ли это общей проблемой. Я прочитал много других сообщений на ту же тему. Я перепробовал все решения, которые смог найти, и все же получаю те же результаты - не могу успешно подключить VendHQ (POS) моего клиента к моему магазину WooCommerce (WordPress 5.2.4, PHP 7.2). Я связался с VendHQ за помощью, но их решение, как и другие, не сработало.

Что я пробовал:

  1. Следовал инструкциям VendHQ, создал мои ключи REST API WooCommerce и поместил их в настройку соединения VendHQ. Это дало первоначальную ошибку «woocommerce_rest_cannot_view, извините, вы не можете перечислить ресурсы, 401»

  2. Я добавил следующий код в мой файл .htaccess, как было предложено несколько раз, но, к сожалению, не исправилвыпуск:

    # BEGIN WordPress
    SetEnvIf Authorization "(.)" HTTP_AUTHORIZATION=$1
    RewriteEngine On
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    # END WordPress
Я изменяю файл apache httpd.conf, как было предложено пару раз, на AllowOverride All вместо значения по умолчанию None, и снова безуспешно. Я добавил приведенный ниже код в свой файл apache: "/etc/apache2/conf.d/includes/pre_main_global.conf"
    <Directory "/var/www/">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

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

Наконец, я добавил больше кода в мой файл .htaccess:
    Header always set Access-Control-Max-Age 1728000
    Header always set Access-Control-Allow-Origin: "*"
    Header always set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
    Header always set Access-Control-Allow-Headers: "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,C$"
    Header always set Access-Control-Allow-Credentials true
    Header always set Access-Control-Allow-Origin: "https://my_client_shop.com/"

Несмотря на все это, я все еще не могу соединить две системы, НО теперь я получил новую ошибку:

"We are unable to connect your WooCommerce store. Your website does not allow connections with Authorization Headers in the Vend API."

Я думал, что последнее изменение исправило бы это. Кто-нибудь видел эту проблему с ошибкой «Заголовки авторизации»?

Я тестировал ключи API WC в своем браузере Chrome:

https://my_client_shop.com/wp-json/wc/v2/system_status?consumer_key=ck_389f08cda9f8a802b366b1de8cb562cba95e462c&consumer_secret=cs_65fcd907905f9d8c64b38a7dd60de4f034526ff2 

И он отображал детали файла json. Без ключей я снова получаю ошибку «Список не может быть 401». Таким образом, я предполагаю, что ключи на самом деле действительны.

Так что, кажется, мы приближаемся, но у меня нет идей.

Наконец, сайт магазина моего клиента находится на мультисайте, еслиэто имеет значение.

Так что я надеюсь, что кто-то еще прошел через все это и смог найти решение, которое работает, и может поделиться им :) Или указать, что я, возможно, пропустил или по ошибке,Большое спасибо за любые предложения.

1 Ответ

0 голосов
/ 13 ноября 2019

хорошо разработчик, с которым я работал, закончил тем, что манипулировал файлом WooCommerce с этим кодом:

private function perform_basic_authentication() {

$this->auth_method = 'basic_auth';
$consumer_key = 'ck_PUT_YOUR_WC_REST_API_KEY';
$consumer_secret = 'cs_PUT_YOUR_WC_REST_API_KEY';

// If the $_GET parameters are present, use those first.
if ( ! empty( $_GET['consumer_key'] ) && ! empty( $_GET['consumer_secret'] ) ) { // WPCS: CSRF ok.
$consumer_key = $_GET['consumer_key']; // WPCS: CSRF ok, sanitization ok.
$consumer_secret = $_GET['consumer_secret']; // WPCS: CSRF ok, sanitization ok.
}

// If the above is not present, we will do full basic auth.
if ( ! $consumer_key && ! empty( $_SERVER['PHP_AUTH_USER'] ) && ! empty( $_SERVER['PHP_AUTH_PW'] ) ) {
$consumer_key = $_SERVER['PHP_AUTH_USER']; // WPCS: CSRF ok, sanitization ok.
$consumer_secret = $_SERVER['PHP_AUTH_PW']; // WPCS: CSRF ok, sanitization ok.
}

// Stop if don't have any key.
if ( ! $consumer_key || ! $consumer_secret ) {
return false;
}

// Get user data.
$this->user = $this->get_user_data_by_consumer_key( $consumer_key );
if ( empty( $this->user ) ) {
return false;
}

// Validate user secret.
if ( ! hash_equals( $this->user->consumer_secret, $consumer_secret ) ) { // @codingStandardsIgnoreLine
$this->set_error( new WP_Error( 'woocommerce_rest_authentication_error', __( 'Consumer secret is invalid.', 'woocommerce' ), array( 'status' => 401 ) ) );

return false;
}

return $this->user->user_id;

}

Это работало, но он много занимался копанием. К сожалению, он находится в файле WC Core, поэтому обновление WC снесет его. Я жду от разработчика, чтобы найти способ перенести его на дочернюю тему.

...