Suporte » Plugins » WooCommerce: alterar o valor do pedido após o pagamento

  • Resolvido marcelo2605

    (@marcelo2605)


    Estou usando um filtro do plugin WooCommerce PagSeguro (woocommerce_pagseguro_payment_xml) para aplicar um desconto de 10% quando o cliente escolher fazer o pagamento com boleto. Isso está funcionando.

    Agora, preciso atualizar o valor do pedido para que ele apareça corretamente tanto no dashboard, quanto na listagem de pedidos do cliente.

    Pensei em usar as actions woocommerce_order_status_completed ou woocommerce_thankyou. Mas a grande dúvida é como atualizar o valor total do pedido já criado, ou até incluir o desconto no pedido.

    O que tentei até agora:

    add_action('woocommerce_order_status_completed', function($order_id){
        $order = wc_get_order( $order_id );
    
        $pagseguro_payment_type = $order->get_meta('Tipo de pagamento');
        if('Boleto' == $pagseguro_payment_type){
            $order->set_discount_total($new_value);
        }
    });
Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Olá @marcelo2605, tudo bem?

    Antes de tentar responder você, será que esse plugin não consegue fazer tudo o que você quer?
    https://br.wordpress.org/plugins/woocommerce-payment-discounts/

    Agora sobre as actions, woocommerce_thankyou não seria uma boa escolha por ser disparada num template.

    Acho que woocommerce_checkout_order_processed pode ser a melhor opção.

    Abraços

    Fala @mariovalney, tudo certo.

    Cara, até tentei usar esse plugin. Mas ele aplicaria o desconto em todas as modalidades do PagSeguro. E preciso aplicar o desconto só na modalidade boleto do PagSeguro.

    Obrigado pela dica sobre a melhor action. O problema agora é descobrir uma forma de alterar o valor do pedido.

    O ideal seria atualizar o pedido informando um desconto, mas nem isso estou conseguindo fazer.

    • Esta resposta foi modificada 3 anos, 2 meses atrás por marcelo2605.
    Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Bem… o plugin é open source: forka ele e coloca um IF lá… hahaha acho que resolve mais rápido e mais fácil.

    Ou melhor ainda… acho que dá pra usar o filtro disponibilizado lá: wc_payment_discounts_apply_discount

    Abraços

    Resolvido!

    Solução de @luizbills

    add_filter( 'woocommerce_pagseguro_payment_xml', function( $xml, $order ) {
    
    	$newxml = $xml;
    
    	if($newxml->method == 'boleto'){
    		$total = $order->total;
    		$discount_value = $total * 0.1;
    		$boleto_cost = 1;
    		$new_total = $discount_value;
    		$new_total = '-'.round($new_total, 2);
    		$new_total = number_format($new_total, 2);
    		$newxml->addChild( 'extraAmount', $new_total );
    		$fee = new \WC_Order_Item_Fee();
    		$fee->set_props( array(
    			'name'      => 'Desconto no Boleto',
    			'tax_class' => 0,
    			'total'     => -($discount_value - $boleto_cost),
    			'total_tax' => 0,
    			'taxes'     => array(
    				'total' => array( 0 ),
    			),
    			'order_id'  => $order->get_id(),
    		) );
    		$fee->save();
    		$order->add_item( $fee );
    		$order->update_taxes();
    		$order->calculate_totals();
    		$order->save();
    	}
    
    	return $newxml;
    }, 10, 2 );
Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • O tópico ‘WooCommerce: alterar o valor do pedido após o pagamento’ está fechado para novas respostas.