jesusangel / wc-sermepa

Sermepa payment gateway plugin for WooCommerce
Other
28 stars 16 forks source link

Customizar el ID de pedido que se manda a la pasarela #16

Closed enbata closed 8 years ago

enbata commented 8 years ago

Hola Jesús Ángel,

por petición de algunos clientes necesitamos que en la pasarela aparezcan las IDs que utilizan en su aplicación de facturación (para temas de contabilidad).

Para conseguir esto hemos añadido dos filtros para que se pueda regenerar la ID que se manda a la pasarela:

Un ejemplo de implementación seria (extrapolada de una implementación real):

<?php

function uniqueOrderIdEncode( $unique_order_id, $order_id ){
    $order_id = MyCustomClass::createOrder( $order_id ); // Llamada a la aplicación de facturación para conseguir la ID que se guarda en el metadato '_my_order_id'
    if ( $order_id ):
        $my_order_id = get_post_meta( $order_id, "_my_order_id", TRUE );
        $unique_order_id = str_pad( $my_order_id . date( 'is' ), 12, '0', STR_PAD_LEFT );
    endif;

    return $unique_order_id;
}

function uniqueOrderIdDecode( $unique_order_id ){
    global $wpdb;

    $my_order_id = substr( $unique_order_id, 1, 7 );
    $results = $wpdb->get_results( "select post_id, meta_key from " . $wpdb->postmeta . " where meta_key = '_my_order_id' and meta_value = '" . $my_order_id . "'");
    if ( ! empty($results) ):
        $result = array_pop($results);
        $unique_order_id = $result->post_id;
    endif;

    return $unique_order_id;
}

// Generar la Ds_Order
add_filter("wc_myredsys_merchant_order_encode", 'uniqueOrderIdEncode', 1, 2);

// Conseguir la ID de compra de la Ds_Order
add_filter("wc_myredsys_merchant_order_decode", 'uniqueOrderIdDecode');

Un saludo,

Manex

jesusangel commented 8 years ago

Hola.

Disculpa. Intentaré echar un vistazo a este tema mañana.

Saludos cordiales.

enbata commented 8 years ago

Hola,

no te preocupes, cuando puedas ;)

Saludos

enbata commented 8 years ago

Hola de nuevo,

la implementación del segundo filtro _wc_myredsys_merchant_orderdecode lo he puesto más acorde a la lógica de los filtros de Wordpress. Primero se consigue el $order_id y después se aplica el filtro, si procede.

Ahora para implementar dicho filtro un ejemplo sería (siguiendo el ejemplo del primer comentario):

<?php

function uniqueOrderIdDecode( $order_id, $ds_order ){
    global $wpdb;

    $my_order_id = substr( $ds_order, 1, 7 );
    $results = $wpdb->get_results( "select post_id, meta_key from " . $wpdb->postmeta . " where meta_key = '_my_order_id' and meta_value = '" . $my_order_id . "'");
    if ( ! empty($results) ):
        $result = array_pop($results);
        $order_id = $result->post_id;
    endif;

    return $order_id;
}

// Conseguir la ID de compra de la Ds_Order
add_filter("wc_myredsys_merchant_order_decode", 'uniqueOrderIdDecode', 1, 2);

Espero no marearte.

Gracias,

Manex

jesusangel commented 8 years ago

Hola.

Acabo de hacer el merge. Los cambios aparerán en la versión 1.0.11 que estoy publicando en estos momentos en el repositorio de subversion.

enbata commented 8 years ago

Gracias!

Un saludo,

Manex