Wordpress 无法将VendHQ(POS)连接到WooCommerce(WP)

Wordpress 无法将VendHQ(POS)连接到WooCommerce(WP),wordpress,apache,woocommerce,woocommerce-rest-api,Wordpress,Apache,Woocommerce,Woocommerce Rest Api,我已经花了很多天试图弄明白这一点,这似乎是一个共同的问题。我读过很多关于同一问题的帖子。我已经尝试了所有我能找到的解决方案,但我仍然得到同样的结果——无法成功地将我客户的VendHQ(POS)连接到我的WoodCommerce商店(WordPress 5.2.4,PHP 7.2)。我已联系VendHQ寻求帮助,但他们的解决方案与其他解决方案一样,没有起作用 我试过什么: 按照VendHQ的说明创建我的WooCommerce REST API密钥,并将它们放入VendHQ连接设置中。这导致初始错误

我已经花了很多天试图弄明白这一点,这似乎是一个共同的问题。我读过很多关于同一问题的帖子。我已经尝试了所有我能找到的解决方案,但我仍然得到同样的结果——无法成功地将我客户的VendHQ(POS)连接到我的WoodCommerce商店(WordPress 5.2.4,PHP 7.2)。我已联系VendHQ寻求帮助,但他们的解决方案与其他解决方案一样,没有起作用

我试过什么:

  • 按照VendHQ的说明创建我的WooCommerce REST API密钥,并将它们放入VendHQ连接设置中。这导致初始错误“woocommerce\u rest\u cannot\u view,抱歉,您不能列出资源,401”

  • 我在.htaccess文件中添加了以下代码,这是我几次建议的,但遗憾的是没有解决这个问题:

  • 我修改了apache httpd.conf文件,正如几次建议的那样,将AllowOverride All改为默认值None,同样没有成功。我在apache文件中添加了以下代码: “/etc/apache2/conf.d/includes/pre_main_global.conf”
  • 所有这些就绪后,我仍然无法连接两个系统,但现在我遇到了一个新错误:

    "We are unable to connect your WooCommerce store. Your website does not allow connections with Authorization Headers in the Vend API."
    
    我以为最后一次改变会解决这个问题。有人看到授权头错误的问题吗

    我在Chrome浏览器中测试了WC API键:

    https://my_client_shop.com/wp-json/wc/v2/system_status?consumer_key=ck_389f08cda9f8a802b366b1de8cb562cba95e462c&consumer_secret=cs_65fcd907905f9d8c64b38a7dd60de4f034526ff2 
    
    它显示了json文件的详细信息。如果没有这些键,我会再次出现“无法列出401”错误。因此,我假设从这一点来看,密钥实际上是有效的

    看来我们离得越来越近了,但我没有主意了

    最后,我的客户的商店网站是在一个多站点上,如果这有区别的话


    所以我希望其他人经历了这一切,能够真正找到一个有效的解决方案,并与大家分享:)或者指出我可能遗漏了什么或有什么错误。非常感谢您提出的所有建议。

    一位与我合作的开发人员最终使用以下代码操作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核心文件中,因此更新WC会将它吹走。我正在等待开发人员找到将其移动到子主题的方法。

    我使用的一个开发人员最终使用以下代码操作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核心文件中,因此更新WC会将它吹走。我正在等待开发人员找到一种方法将其移动到儿童主题。

    这对我来说很有效

    我将其添加到.htaccess文件中。此文件可以通过FTP访问Wordpress服务器

    CGIPassAuth on
    
    我从这里得到了这个:

    这对我很有用

    我将其添加到.htaccess文件中。此文件可以通过FTP访问Wordpress服务器

    CGIPassAuth on
    

    我从这里得到了这个结论:

    我也有同样的问题,在这个问题上似乎没有太多东西。不过,我可以使用您的htaccess编辑使其正常工作(谢谢!)。我唯一改变的是删除了这一行:标题添加严格的传输安全性“max age=300”。。。我很高兴它对你有用。我也有同样的问题,而且在这个问题上似乎没有太多的东西。不过,我可以使用您的htaccess编辑使其正常工作(谢谢!)。我唯一改变的是删除了这一行:标题添加严格的传输安全性“max age=300”。。。我很高兴它对您起到了作用。虽然这样做有效,但我强烈建议您不要这样做,因为它本质上是为访问Rest API的任何人禁用身份验证。虽然这样做有效,但我强烈建议您不要这样做,因为它本质上是为访问Rest API的任何人禁用身份验证。
    CGIPassAuth on