• Resolved wistanley

    (@wistanley)


    Olá,

    Todos os pedidos feitos pelo boleto usando o módulo do Itau Shopline são cancelados depois de um certo tempo (Aprox. 1 hora). Já verifiquei todas as configurações e não tem nada de errado, podem me ajudar por favor?

    • This topic was modified 8 years, 10 months ago by wistanley.
Viewing 3 replies - 1 through 3 (of 3 total)
  • Pessoal,

    O plugin do @claudiosanches é muito bacana, porém faltam algumas lógicas relacionadas a compensação bancária e o Claudio não tem só este projeto. Por conta disto, eu escrevi uma solução temporária da forma q eu consegui, por favor quem manja melhor de programação reescreve isto de forma mais sanitizada e posta la no GitHub (não sei usar direito :/ )

    O que eu alterei:
    – Estou forçando o horario de 23:59:59 na expiração do boleto que é gravada no banco pro caso do cara ter comprado as 10 da manha e pago as 10 da manha do dia do vencimento por exemplo e não dar cancelado.

    – Fiz umas condicionais que jogam o vencimento de boletos para segunda-feira no caso de cairem de Sabado ou Domingo de acordo com a data da compra e a config de dias para pagar.

    – Adicionei 1 dia de margem para o SOUNDER (cron q checa o pagamento) para checar casos em que o cara paga o boleto nas ultimas horas do dia de vencimento e o sounder não tem tempo habil de esperar a compensação.

    – Retiro esta margem na hora de mandar pro boleto fisico. Ou seja: O itau recebe o vencimento pro dia X, mas no banco de dados (que é o dado utilizado pelo SOUNDER) vai estar X+1

    Segue o código. Alteracoes no arquivo wc-class-itau-shopline-api.php
    Funcoes abaixo, somente troca-las por completo.
    Fazer um tente em sandbox para confirmar se tudo funciona. Aqui está ok.

    
    	/**
    	 * Save expiry time in the database.
    	 *
    	 * @param  int $order_id
    	 *
    	 * @return int
    	 */
    	public function save_expiry_time( $order_id ) {
    		$days   = absint( $this->days_to_pay );
    		$now    = strtotime( current_time( 'mysql' ) );
    
    		// Seta o horario para 23:59:59 para enganar o sounder. O horario limite do vencimento é as 21:00:00 do dia de vencimento.
    		$fixtime = strtotime(date( 'Y-m-d', $now ).' 23:59:59');
    		
    		$expiry = strtotime( '+' . $days . ' days', $fixtime );
    
    		// Descobre o dia da semana que cai o vencimento
    		$weekday = date('w', $expiry);
    
    		// Joga o vencimento para segunda-feira as 23:59:59 caso o expiry caia de sabado ou domingo e o sistema entenda o sistema bancario de dias úteis
    
    		if ($weekday == 6){
    		$expiry = strtotime( '+ 2 days', $expiry );
     		 // 'Caiu no Sabado - ' ; 
    		}
    
    		if ($weekday == 0){
    		$expiry = strtotime( '+ 1 days', $expiry );
     		 // 'Caiu no Domingo - ' ;   
    		}
    
    		// Insere um dia de margem pra burlar o sounder no caso do cliente pagar nas ultimas hora do dia de vencimento e só compensar no próximo dia.
    
    		$expiry = strtotime( '+ 1 days', $expiry );
    
    		update_post_meta( $order_id, '_wc_itau_shopline_expiry_time', $expiry );
    
    		return $expiry;
    	}
    
    	/**
    	 * Get expiry date.
    	 *
    	 * @param  int $order_id
    	 *
    	 * @return string
    	 */
    	protected function get_expiry_date( $order_id ) {
    		$time = get_post_meta( $order_id, '_wc_itau_shopline_expiry_time', true );
    
    		if ( '' == $time ) {
    			$time = $this->save_expiry_time( $order_id );
    		}
    
    		// Elimina a margem de um dia pra jogar no boleto propriamente dito, mantendo 1 dia a mais somente no banco de dados para enganar o sounder.
    
    		$time = strtotime( '- 1 days', $time );
    
    		return date( 'dmY', $time );
    	}    
    Plugin Author Claudio Sanches

    (@claudiosanches)

    Tem instruções sobre isso na FAQ do plugin. Lá ensina como configurar o CRON para evitar esse tipo de comportamento.

    @adborges se poder enviar um Pull Request no GitHub com esse código eu agradeço.

    pessoal, estou tendo problema com os pagamentos em boleto no itaushopline. Alguns funcionam normalmente, já outros pedidos são cancelados automaticamente algum tempo depois de feito (algo em torno de 30 a 60min). Segue o log do ultimo caso que deu falha :

    03-26-2018 @ 10:57:13 – Processing payment status for order 1766
    03-26-2018 @ 10:57:13 – Requesting payment details for order 1766
    03-26-2018 @ 10:57:14 – Request data of payment details for order 1766: <?xml version=”1.0″ encoding=”ISO-8859-1″?><!DOCTYPE consulta [<!ELEMENT consulta (PARAMETER)><!ELEMENT PARAMETER (PARAM)+><!ELEMENT PARAM EMPTY><!ATTLIST PARAM ID CDATA #REQUIRED VALUE CDATA #REQUIRED>]><consulta><PARAMETER><PARAM ID=”CodEmp” VALUE=”J0252731620001240000026069″/><PARAM ID=”Pedido” VALUE=”00001766″/><PARAM ID=”Valor” VALUE=””/><PARAM ID=”tipPag” VALUE=”00″/><PARAM ID=”sitPag” VALUE=”03″/><PARAM ID=”ValorPago” VALUE=””/><PARAM ID=”dtPag” VALUE=””/><PARAM ID=”codAut” VALUE=””/><PARAM ID=”numId” VALUE=””/><PARAM ID=”compVend” VALUE=””/><PARAM ID=”tipCart” VALUE=””/></PARAMETER>
    </consulta>
    03-26-2018 @ 10:57:14 – Payment details for order 1766 requested successfully: Array
    (
    [payment_type] => 00
    [status] => 03
    )

    olhem no painel oque aparece:
    >>>
    Itau Shopline: Aguardando pagamento. Status do pedido alterado de Pagamento pendente para Aguardando. adicionado em 26/03/2018 ás 10:35 am Apagar nota

    depois >>>
    Itaú Shopline: Pedido expirado por falta de pagamento. Status do pedido alterado de Aguardando para Cancelado.adicionado em 26/03/2018 ás 10:57 am Apagar nota

Viewing 3 replies - 1 through 3 (of 3 total)

The topic ‘Pedido cancela automaticamente’ is closed to new replies.