Hoy vamos a ver como obligar a pagar el saldo negativo en Wallet System for WooCommerce a un usuario de nuestra web antes de hacer una compra en WooCommerce, sumando este saldo a su carrito quiera o no quiera, de forma que se efectué una recarga por el importe de la deuda para que el saldo sea cero más su compra.
Como primer paso has de tener instalado Wallet System for WooCommerce si es que no lo tienes actualmente y habilitar la función de saldo en negativo que puedes verla en Wp Swings -> Sistema del monedero -> General -> Habilitar saldo negativo de Wallet
Cabe destacar que la generación de este código es empleando su API oficial, con lo que no se modifica nada extraño en su funcionamiento y también destaco que este código funciona sin problemas con el plugin FOX, un plugin gratuito de wordpress.org para cambios de divisa.
Yo quiero comprar una camiseta que vale 10 euros, pero debo -5 euros en mi wallet, pues en el carrito cuando quiero pagar saldrá 15 euros.
Una vez se pague, automáticamente se restaura el saldo de la wallet a 0 euros, ya que hizo una recarga que pone otra en positivo dicho saldo.
Para añadir el código que se mostrara a continuación
Datos a modificar obligatoriamente en el código que se muestra a continuación, recuerda que sale el dos sitios diferentes:
$consumer_key = 'AÑADE TU CLAVE';
$consumer_secret = 'AÑADE TU CLAVE SECRETA';
Esta clave la puedes ver desde el apartado Wp Swings -> Sistema del monedero -> API REST -> Generate API KEY
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
<?php add_action('woocommerce_cart_calculate_fees', 'add_wallet_negative_balance_to_cart', 10, 1); function add_wallet_negative_balance_to_cart($cart) { if (is_admin() && !defined('DOING_AJAX')) { return; } $consumer_key = 'AÑADE TU CLAVE'; $consumer_secret = 'AÑADE TU CLAVE SECRETA'; $user_id = get_current_user_id(); if (!$user_id) { return; } $api_url = home_url("/wp-json/wsfw-route/v1/wallet/{$user_id}?consumer_key={$consumer_key}&consumer_secret={$consumer_secret}"); $response = wp_remote_get($api_url); if (is_wp_error($response)) { error_log('Error al obtener el saldo de la billetera: ' . $response->get_error_message()); return; } $wallet_balance = json_decode(wp_remote_retrieve_body($response), true); if ($wallet_balance !== null && is_numeric($wallet_balance) && $wallet_balance < 0) { $negative_balance = abs($wallet_balance); $cart->add_fee(__('Saldo Negativo Monedero', 'staging.foro.today'), $negative_balance, true); } } add_action('woocommerce_order_status_completed', 'reset_wallet_negative_balance', 10, 1); function reset_wallet_negative_balance($order_id) { if (!$order_id) { return; } $order = wc_get_order($order_id); $user_id = $order->get_user_id(); if (!$user_id) { return; } $consumer_key = 'AÑADE TU CLAVE'; $consumer_secret = 'AÑADE TU CLAVE SECRETA'; $api_url = home_url("/wp-json/wsfw-route/v1/wallet/{$user_id}?consumer_key={$consumer_key}&consumer_secret={$consumer_secret}"); $response = wp_remote_get($api_url); if (is_wp_error($response)) { error_log('Error al obtener el saldo de la billetera: ' . $response->get_error_message()); return; } $wallet_balance = json_decode(wp_remote_retrieve_body($response), true); if ($wallet_balance !== null && is_numeric($wallet_balance) && $wallet_balance < 0) { $amount_to_credit = abs($wallet_balance); $body = json_encode([ 'amount' => $amount_to_credit, 'action' => 'credit', 'consumer_key' => $consumer_key, 'consumer_secret' => $consumer_secret, 'transaction_detail' => 'Restablecer saldo negativo después de completar el pedido', ]); $put_response = wp_remote_request($api_url, [ 'method' => 'PUT', 'headers' => [ 'Content-Type' => 'application/json', ], 'body' => $body, ]); if (is_wp_error($put_response)) { error_log('Error al restablecer el saldo de la billetera: ' . $put_response->get_error_message()); } else { $status_code = wp_remote_retrieve_response_code($put_response); $response_body = wp_remote_retrieve_body($put_response); if ($status_code !== 200) { error_log('Error en la API, código de estado: ' . $status_code); error_log('Cuerpo de la respuesta: ' . $response_body); } else { error_log('Saldo del monedero actualizado correctamente: ' . $response_body); } } } else { error_log('El saldo del monedero no requiere ajuste.'); } } |
Con todo esto ya podrás ir a Wp Swings -> Sistema del monedero -> Cartera-> Usuario de billetera y descontar saldo a ciertos usuarios con la obligación de que restauren ese saldo a 0 siempre que quieran interactuar con la tienda de tu web.