我的WooCommerce插件回调函数在wc更新后停止工作

时间:2015-09-23 06:54:20

标签: php woocommerce wordpress

  

TL;运行具有相同名称的类的DR WooCommerce回调网址已损坏。就像我可以通过转到valitorcallback来访问我的http://mywebsite.com/wc-api/valitorcallback课程一样,是否可以启用该网址或以某种方式访问​​此课程?

我开发了一个WooCommerce支付网关插件,可以连接像Valitor公司这样的冰岛Paypal。

付款流程很简单:

  1. 客户将商品添加到购物车并前往结帐。
  2. 使用请求参数中的订单信息将网店的客户重定向到Valitor。
  3. 客户使用信用卡或借记卡付款。
  4. 客户被重定向到提供的感谢页面,Valitor调用另一个网址(回调)来通知付款已完成,并附有订单信息和验证码/方法。
  5. 插件唯一的作用是第2步和第4步。在第4步中,如果订单有效,则插件会降低库存并更改订单状态,表示付款已完成。

    问题出在2个月前WooCommerce更新后,回调网址破坏,可能是出于安全原因。我无法找到再次启用此URL或解决此问题的代码。它认为可以使用add_action方法或一些钩子来完成,但我无法让它工作。

    以下是我认为关键的指南,但我做错了:http://docs.woothemes.com/document/payment-gateway-api/#section-4

    Code插件结构如下:

    <?php
    
    function initWooCommerceValitorGatewayPlugin()
    {
        class WooCommerceValitorGateway extends WC_Payment_Gateway
        {
            public function __construct()
            {
                // ...Varible code...
    
                // Actions
                add_action('woocommerce_update_options_payment_gateways_'.$this->id, array($this, 'process_admin_options'));
            }
    
            public function init_form_fields()
            {
                // ...Define settings code...
            }
    
            public function process_payment($orderId)
            {
                // ...Magic code...
    
                // Redirect to Valitor with all necessary data 
                return array(
                    'result' => 'success',
                    'redirect' => add_query_arg($valitorData, $gatewayUrl)
                );
            }
    
            // ...Helper functions code (like sending an email)...
        }
    }
    
    class valitorcallback
    {
        public function __construct()
        {
            $this->verifyPayment();
        }
    
        public function verifyPayment()
        {
            // ...Verification code...
        }
    
        // ...Helper functions code (like sending an email)...
    
    }
    
    // Add plugin to wordpress/woocommerce
    add_action('plugins_loaded', 'initWooCommerceValitorGatewayPlugin');
    
    function addValitorGateway($methods)
    {
        $methods[] = 'WooCommerceValitorGateway'; 
        return $methods;
    }
    // Add gateway method to woocommerce
    add_filter('woocommerce_payment_gateways', 'addValitorGateway');
    
    ?>
    

    现在你看到了函数名称,也许可以告诉我add_action应放在哪里。

    我知道mywebsite.com/wc-api/v3 / ... REST API,但我希望我能再次启用该网址,所以我不必再对该部分进行编码而且我不是确定如何从另一个文件中获取该插件设置。

    谢谢,Sigurður

    编辑:添加TL; DR部分位于顶部,粗体表示问题。

1 个答案:

答案 0 :(得分:2)

我发现它,不知道为什么我没有找到它,除了我没有在谷歌上使用正确的搜索词。

但是就是这样:WooCommerce Custom Payment Gateway

我不知道为什么文档中没有提到这个,但这是你需要的动作钩子:

// Payment listener/API hook
add_action('woocommerce_api_wc_valitor_gateway', array($this, 'valitorcallback'));

我需要将sum函数从第二个类移动到第一个类,然后使用该行为的正确名称来使其工作。它仍然返回-1但正确的代码是使用url中的所有GET变量执行的。

此外,我将类名更改为WC_Valitor_Gateway,插件结构如下:

<?php

function initWooCommerceValitorGatewayPlugin()
{
    class WC_Valitor_Gateway extends WC_Payment_Gateway
    {
        public function __construct()
        {
            // ...Varible code...

            // Actions
            add_action('woocommerce_update_options_payment_gateways_'.$this->id, array($this, 'process_admin_options'));

            // Payment listener/API hook
            add_action('woocommerce_api_wc_valitor_gateway', array($this, 'valitorcallback'));
        }

        public function init_form_fields()
        {
            // ...Define settings code...
        }

        public function process_payment($orderId)
        {
            // ...Magic code...
        }

        public function valitorcallback()
        {
            // ...Verification code...
        }

        // ...Helper functions code (like sending an email)...
    }
}

// Add plugin to wordpress/woocommerce
add_action('plugins_loaded', 'initWooCommerceValitorGatewayPlugin', 0);

function addValitorGateway($methods)
{
    $methods[] = 'WC_Valitor_Gateway'; 
    return $methods;
}
// Add gateway method to woocommerce
add_filter('woocommerce_payment_gateways', 'addValitorGateway');

?>