WooCommerce订阅与帐户资金支付挂钩

时间:2015-08-01 09:52:02

标签: wordpress woocommerce subscriptions

我正在使用订阅和帐户资金插件运行WooCommerce。

每次处理订阅付款时,我都需要为用户的个人资料添加资金。

WooCommerce订阅有processed_subscription_payment动作可以挂钩。

帐户资金会创建一个名为account_funds的用户元字段。

这是我到目前为止提出的代码,但它似乎并没有起作用。我使用PayPal Sandbox对其进行测试,但我认为他们现在遇到了问题。或者我的代码都不好。

add_action('processed_subscription_payment', 'custom_process_order', 10, 1);

function custom_process_order($order_id) {

    global $woocommerce;
    $order = new WC_Order( $order_id );

    $myuser_id = (int)$order->user_id;

    $amount = $order->get_order_total();
    $funds = get_user_meta( $myuser_id, 'account_funds', true );
    $funds = $funds ? $funds : 0;
    $funds += floatval( $amount );
    update_user_meta( $myuser_id, 'account_funds', $funds );

}

我试图从每个已处理的订阅付款中提取用户ID,然后将资金添加到他们的帐户中。

以下是我参考的帐户资金文件,以帮助创建我的功能:http://pastebin.com/Teq8AXz8

以下是我引用的订阅文档:http://docs.woothemes.com/document/subscriptions/develop/action-reference/

我似乎做错了什么?

2 个答案:

答案 0 :(得分:2)

@helgatheviking让我非常接近。唯一不起作用的是get_order_total()WC_Account_Funds::add_funds($customer_id, $amount)

以下是最终为我工作的内容:

add_action('processed_subscription_payment', 'custom_process_order', 10, 2);

function custom_process_order($user_id, $subscription_key) {

    // split subscription key into order and product IDs
    $pieces = explode( '_', $subscription_key);
    $order_id = $pieces[0];
    $product_id = $pieces[1];

    // get order total
    $order = wc_get_order( $order_id );
    $amount = $order->get_total();

    // get current user's funds
    $funds = get_user_meta( $user_id, 'account_funds', true );
    $funds = $funds ? $funds : 0;
    $funds += floatval( $amount );

    // add funds to user
    update_user_meta( $user_id, 'account_funds', $funds );

}

谢谢@helgatheviking!

答案 1 :(得分:1)

$subscription_key是一个唯一标识符,由订阅的产品ID和订阅订单的ID组成。因此,您可以将该字符串拆分为2个有用的变量。未经测试,但请尝试以下方法:

add_action( 'processed_subscription_payment', 'custom_process_order', 10, 2 );

function custom_process_order( $user_id, $subscription_key ) {

    if( class_exists( 'WC_Account_Funds' ) ){

        // split subscription key into order and product IDs
        $pieces = explode( '_', $subscription_key);
        $order_id = $pieces[0];
        $product_id = $pieces[1];

        // get order total
        $order = wc_get_order( $order_id );
        $amount = floatval( $order->get_total() );

        // alternatively get product price
        // $product = wc_get_product( $product_id );
        // $amount = $product->get_price();

        // add account funds
        WC_Account_Funds::add_funds( $user_id, $amount );
    }

}