Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error con pagos parciales usando Openpay y plugin de depósitos en WooCommerce #171

Open
TheJobGG opened this issue Oct 11, 2024 · 1 comment

Comments

@TheJobGG
Copy link

TheJobGG commented Oct 11, 2024

¿Es posible hacer que el plugin de Openpay funcione en compañía con el plugin "Deposits & Partial Payments for WooCommerce"?

Estoy usando la pasarela de pago en modo sandbox, dejo un log de lo que sucede al realizar un pago con ambos plugins además de como replicarlo.


El plugin en cuestión es "Deposits & Partial Payments for WooCommerce", y dicho plugin al realizar un pago crea 2 "ordenes de pago" que es con lo que se realizan los pagos parciales del producto.
image

Cuando intento realizar el pago del producto me da el mensaje de error:
There was an error processing your order. Please check for any charges in your payment method and review your [order history](https://test-woo-deposits-openpay.local/my-account/orders/) before placing the order again.

En consola tengo esto
image

Y dentro del log en Openpay por lo que veo en otra transacciones de prueba (exitosas) que he hecho sin el plugin activado se hacen 3 peticiones:

  1. [POST] v1/some-id/tokens ---- 201 Created
  2. [POST] v1/some-id/customers ---- 201 Created
  3. [POST] v1/some-id/customers/some-id/charges ---- 200 OK

Pero las peticiones que se hacen con el plugin activo veo que solo se hacen 2

  1. [POST] v1/some-id/tokens ---- OK
  2. [POST] v1/some-id/customers ---- Fallo 400 Bad Request
  3. [POST] v1/some-id/customers/some-id/charges ---- No se realiza debido a que la anterior falló

image

Esto es lo que me muestra el panel de openpay en la petición al endpoint a customers que falló.
image

Por lo que veo, no están llegando los datos requeridos de name, last_name, email etc... y por ende no procede la transacción.

Con define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); activados en el archivo wp-config.php, este es el log en WordPress que me da en debug.log cuando dicha petición es realizada y falla:

[11-Oct-2024 00:01:54 UTC] PHP Warning: Attempt to read property "charges" on bool in C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\openpay-cards\openpay_cards_gateway.php on line 691 [11-Oct-2024 00:01:54 UTC] PHP Fatal error: Uncaught Error: Call to a member function create() on null in C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\openpay-cards\openpay_cards_gateway.php:691 Stack trace: 0 C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\openpay-cards\openpay_cards_gateway.php(661): Openpay_Cards->createOpenpayCharge(false, Array, 'https://test-wo...') 1 C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\openpay-cards\openpay_cards_gateway.php(561): Openpay_Cards->processOpenpayCharge('6M...', 'k0...', 0, 'false', 'new', false, NULL) 2 C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\woocommerce\includes\class-wc-checkout.php(1062): Openpay_Cards->process_payment(21) 3 C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\woocommerce\includes\class-wc-checkout.php(1293): WC_Checkout->process_order_payment(21, 'openpay_cards') 4 C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\woocommerce\includes\class-wc-ajax.php(520): WC_Checkout->process_checkout() 5 C:\laragon\www\test-woo-deposits-openpay\wp-includes\class-wp-hook.php(324): WC_AJAX::checkout('') 6 C:\laragon\www\test-woo-deposits-openpay\wp-includes\class-wp-hook.php(348): WP_Hook->apply_filters('', Array) 7 C:\laragon\www\test-woo-deposits-openpay\wp-includes\plugin.php(517): WP_Hook->do_action(Array) 8 C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\woocommerce\includes\class-wc-ajax.php(96): do_action('wc_ajax_checkou...') 9 C:\laragon\www\test-woo-deposits-openpay\wp-includes\class-wp-hook.php(324): WC_AJAX::do_wc_ajax('') 10 C:\laragon\www\test-woo-deposits-openpay\wp-includes\class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) 11 C:\laragon\www\test-woo-deposits-openpay\wp-includes\plugin.php(517): WP_Hook->do_action(Array) 12 C:\laragon\www\test-woo-deposits-openpay\wp-includes\template-loader.php(13): do_action('template_redire...') 13 C:\laragon\www\test-woo-deposits-openpay\wp-blog-header.php(19): require_once('C:\\laragon\\www\\...') 14 C:\laragon\www\test-woo-deposits-openpay\index.php(17): require('C:\\laragon\\www\\...') 15 {main} thrown in C:\laragon\www\test-woo-deposits-openpay\wp-content\plugins\openpay-cards\openpay_cards_gateway.php on line 691

¿Como replicar esto?

  1. Instalar WordPress en limpio (borrar plugins que vienen por defecto).
  2. Instalar y activar los plugins de WooCommerce", "Openpay cards" y "Deposits & Partial Payments for WooCommerce" versión free.
  3. Configurar Openpay en modo sandbox ingresando id y credenciales api.
  4. Activar los depósitos del plugin.
  5. Crear un producto en WooCommerce (en la sección donde están las pestañas de general, inventario, envío etc... el plugin de depósitos agrega una pestaña referente a ello, checar que este activo la opción de depósito).
  6. (Importante) cambiar el checkout de woo al clásico ya que al estar por defecto el checkout de bloques, este no carga la pasarela de Openpay ni los datos del producto que muestra el plugin. Para ello, ir a la pestaña de "páginas o pages" en el admin de WordPress, dar click en editar en la página designada como checkout page y hacer el cambio al checkout clásico.
  7. Realizar la compra del producto (agregar al carrito seleccionando la opción de pagar depósito, ir al checkout, llenar datos y pagar).

Imagen de referencia de selección de opción de depósito.
image

El tema que se usó para esto fue el tema por defecto de este año de WordPress: Twenty Twenty-Four.
Versión de PHP: 8.1.10.
Versión del plugin de depósitos: 1.1.24 la mas actual al día de hoy.
Versión del plugin Openpay cards: 2.9.7 la mas actual al día de hoy.
Versión de WooCommerce: 9.3.3 la mas actual al día de hoy.

Si tienen preguntas sobre el tema no duden en hacerlas, saludos.

@sanesh-acowebs
Copy link

Hi, We found a quick fix for this. The payment gateway team should add an extra check as below in their "openpay_cards_gateway.php" file. As in the screenshot:

        /* ---Acowebs edit--- */
        $order = wc_get_order( $this->order->get_id() );
        if ($order->get_type() == 'awcdp_payment'){
            $this->order = new WC_Order($this->order->get_parent_id());
        } 
        /* ---Acowebs edit--- */

This will add an additional check for deposit order item type.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants