YapayPagamentos / woo-yapay

Plugin Yapay Intermediador para WooCommerce.
5 stars 10 forks source link

Melhorias para integração entre yapay - woo - erp! #34

Open RichardKBR opened 1 year ago

RichardKBR commented 1 year ago

Olá. Trabalho em uma empresa de software que tem integração com o Woo. Outros plugins de pagamento (pelo menos os que usei até agora), gravam dados extras sobre o pagamento no Order.Meta_Data. Para quem trabalha com integração, como eu, dificulta bastante ter que "fazer" chamadas extras para um outro ws para obter os dados do pagamento.

Para facilitar o trabalho de outros integradores, como eu. Sugiro que vocês adotem essa "prática" de gravar os dados extras no meta_data.

Fiz alguns testes. A primeira solução que pensei foi gravar todo o retorno em um campo do meta_data. arquivo "wc_yapay_intermediador.php" linha 223 após ( $comment = $codeStatus . ' - ' . $tcResponse->data_response->transaction->status_name;) imadiatamente antes do switch adicionar

$order->update_meta_data('_yapay_transaction_response_object', $tcResponse );
$order->set_transaction_id((string)$tcResponse->data_response->transaction->token_transaction);
$order->save();

Porem está falhando na gravação do $tcResponse (objeto) (não sou conhecedor de php e talvez vcs possam ajustar isso) e adicionar ao fonte original.

Fiz uma segunda versão baseada no plugin do pagar.me (criando um array,dentro de outro array).

$payment_data = array_map(
    'sanitize_text_field',
    array(
        'order_number'          => $tcResponse->data_response->transaction->order_number,
        'transaction_id'        => $tcResponse->data_response->transaction->transaction_id,
        'status_name'           => $tcResponse->data_response->transaction->status_name,
        'status_id'             => $tcResponse->data_response->transaction->status_id,
        'token_transaction'     => $tcResponse->data_response->transaction->token_transaction,
        'price_original'        => $tcResponse->data_response->transaction->payment->price_original,
        'price_payment'         => $tcResponse->data_response->transaction->payment->price_payment,
        'payment_response'      => $tcResponse->data_response->transaction->payment->payment_response,
        'payment_response_code' => $tcResponse->data_response->transaction->payment->payment_response_code,
        'tid'                   => $tcResponse->data_response->transaction->payment->tid,
        'split'                 => $tcResponse->data_response->transaction->payment->split,
        'payment_method_id'     => $tcResponse->data_response->transaction->payment->payment_method_id,
        'payment_method_name'   => $tcResponse->data_response->transaction->payment->payment_method_name,
    )
);

$master_meta_data = array(
    '_yapay_transaction_response_object' => $payment_data,
);

// WooCommerce 3.0 or later.
if ( ! method_exists( $order, 'update_meta_data' ) ) {
    foreach ( $master_meta_data as $key => $value ) {
        update_post_meta( $id, $key, $value );
    }
} else {
    foreach ( $master_meta_data as $key => $value ) {
        $order->update_meta_data( $key, $value );
    }

    $order->save();
}

$order->set_transaction_id((string)$tcResponse->data_response->transaction->token_transaction);
// Save the order data and meta data
$order->save();

Mas não consegui obter sucesso, não sou programado php, tudo que fiz foi baseado na lógica em plugins de terceiros. Mesmo assim sei que a atualização do plugin depende de vocês. Então não adiantaria eu alterar apenas no meu woo.

Ideal seria a primeira versão funcionar! Menos código e mais clean. Ideal é vocês gravarem o retorno completo (como paypal, pagar.me e outros), em forma de objeto. Para que terceiros possam efetuar suas consultas, sem precisar acessar um ws externo (como o suporte da vindi orienta).

Aguardo algum retorno! Obrigado! Tenho um cliente que está precisando muito disso!