带有账户资金支付挂钩的 WooCommerce 订阅
WooCommerce Subscriptions with Account Funds payment hook
我是 运行 WooCommerce,有订阅和账户资金插件。
我需要在每次处理订阅付款时向用户的个人资料添加资金。
WooCommerce 订阅有 processed_subscription_payment
操作挂钩。
Account Funds 创建了一个名为 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/
我好像做错了什么?
$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 );
}
}
@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!
我是 运行 WooCommerce,有订阅和账户资金插件。
我需要在每次处理订阅付款时向用户的个人资料添加资金。
WooCommerce 订阅有 processed_subscription_payment
操作挂钩。
Account Funds 创建了一个名为 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/
我好像做错了什么?
$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 );
}
}
@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!