Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

#43365
David CHC escreveu:Vivian, o teste que fiz também foi com opencart dessa versão. Vi o código, a única coisa que pode dá uma diferença, é se você adicionou na configuração do boleto um desconto (Desconto em %:), fora isso , não vi nada que poderia mexer no valor.

Sobre a segunda questão, você pode adicionar os produtos comprados, exemplo:

Em : boletos/boletobradesco/dados.php

Na última linha, antes de fechar a tag do PHP, você adiciona:
Código: Selecionar todos
$pedidosProdutos = $db->query("SELECT `name`, `quantity`, `price`, `total` FROM " . DB_PREFIX . "`order_product` WHERE order_id = '".$itemId."'");
$resultados = array();
    foreach($pedidosProdutos->rows as $pedidoProduto){
         $resultados[] = sprintf('%s  - R$ %s ', $pedidoProduto['name'], number_format($pedidoProduto['price'], 2, ',', '.'));
    }
$produtosFormatados = '<br /><br />Produtos : <br />'.implode('<br />', $resultados);
Ele vai coloca nome do produto, e o valor total desse produto.

E no arquivo - boletos/boletobradesco/boleto_bradesco.php

Na linha 61, você irá encontrar:
Código: Selecionar todos
$dadosboleto["demonstrativo3"] = $BoletoDemoT;
Vc irá substituir por:
Código: Selecionar todos
$dadosboleto["demonstrativo3"] =  $produtosFormatados ;

Muito bom isso, mas precisa remover as 'aspas', obtive erro no meu boleto até descobrir o erro.

Em : boletos/boletobradesco/dados.php

Na última linha, antes de fechar a tag do PHP, você adiciona:

$resultados = array();
foreach($pedidosProdutos->rows as $pedidoProduto){
$resultados[] = sprintf('%s - R$ %s ', $pedidoProduto['name'], number_format($pedidoProduto['price'], 2, ',', '.'));
}
$produtosFormatados = '<br /><br />Produtos : <br />'.implode('<br />', $resultados);
#44256
Primeiramente agradeço a todos que contribuem para um opencart melhor. Estou tendo um problema nesse boleto Bradesco, fiz exatamente como manda o figurino(pelo menos é o que eu acho, rs). Na finalização da compra eu escolho a opção "boleto" e quando clico em imprimir boleto aparece uma mensagem de erro na loja com o dizer "Warning: sprintf() [function.sprintf]: Too few arguments in C:\loja2\www\catalog\controller\checkout\success.php on line 53" o que tem na linha 53 da success é: $this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));. E depois de clicar abre outra tela com uma mensagem de erro creio que de banco de dados.

erro:
( ! ) Notice: Error: Table 'novaloja2.oc_' doesn't exist
Error No: 1146
SELECT * FROM oc_`order` WHERE order_id = '4' in C:\loja2\www\system\database\mysql.php on line 50
Call Stack
# Time Memory Function Location
1 0.0018 402056 {main}( ) ..\boleto_bradesco.php:0
2 0.0029 421256 include( 'C:\loja2\www\boleto\boletobradesco\dados.php' ) ..\boleto_bradesco.php:7
3 0.1908 1859704 DB->query( ) ..\dados.php:43
4 0.1908 1859704 MySQL->query( ) ..\db.php:16
5 0.2096 1859928 trigger_error ( ) ..\mysql.php:50

Segue link das imagens: http://www.4shared.com/photo/TFGwj0Sh/ERRO-BOLETO.html?

Alguem pode me ajudar com isso? Uso opencart 1.5.5.1.
#44361
A linha 53
Código: Selecionar todos
$this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));
é uma captura da variável $_['text_message'] que está num dos arquivo de tradução (provavelmente checkout/success.php), com 4 substuições de string:

1: $this->url->link('account/account', '', 'SSL') (link para "Minha Conta")
2: $this->url->link('account/order', '', 'SSL') (link para "Meus Pedidos")
3: $this->url->link('account/download', '', 'SSL') (link para "Meus Downloads")
4: $this->url->link('information/contact') (link para o formulário "Contato")

Ou seja, o texto da variável $_['text_sucess'] deve ter 4 vezes a ocorrência de %s, que serão substituídos por estes 4 links.

Confirme no seu arquivo de tradução se existem 4 vezes o %s. Imagino que tenham 5 ou mais, a me basear pelo erro "too few arguments", que significa, "muito poucos argumentos" (o que diz respeito aos 4 argumentos passados na função, em relação aos %s existentes na string para serem substituídos). Uma vez corrigida a string, o erro desaparece e o módulo funcionará.

Nota: se você tem outros módulos que levam à página de sucesso, o número de %s deve corresponder em todos, então observe nas páginas de controle dos outros módulos se são passados 4 argumentos também, ou eles é que apresentarão erros quando você corrigir a string.
#44363
Renato,

Primeiramente só tenho a lhe agradecer pela ajuda, esse erro foi corrigido na mudança dessas strings, só não consegui corrigir a questão do boleto que na tela que deveria aparecer o boleto, aparece uma tela conforme imagem: http://www.4shared.com/photo/TFGwj0Sh/ERRO-BOLETO.html

Tenha uma ótima noite.
#44458
Ninguém para dar uma luz?

Se ajudar a alguém entender melhor segue os dados dos arquivos que estão em evidência no erro.

boleto/boletobradesco/boleto_bradesco.php
Código: Selecionar todos
<?php
global $itemId;
if(isset($_POST['item_id'])) $itemId = $_POST['item_id'];
if($itemId=="" || $itemId==NULL || !isset($itemId)){
$itemId = $_GET['boleto'];
}
include "dados.php";

//Variaveis do modulo
$BoletodiasVencimento = $config->get('boletobradesco_vencimento');
$BoletoCedenteDocumento = $config->get('boletobradesco_cpf');
$BoletoEspecie = 'R$';
$BoletoEspecieDoc = $config->get('boletobradesco_especie');
$BoletoAceite = $config->get('boletobradesco_aceite');
$BoletoInstrucaoU = $config->get('boletobradesco_instrucao1');
$BoletoInstrucaoD = $config->get('boletobradesco_instrucao2');
$BoletoInstrucaoT = $config->get('boletobradesco_instrucao3');
$BoletoInstrucaoQ = $config->get('boletobradesco_instrucao4');
$BoletoDemoU = $config->get('boletobradesco_demo1');
$BoletoDemoD = $config->get('boletobradesco_demo2');
$BoletoDemoT = $config->get('boletobradesco_demo3');
$BoletoCedente = $config->get('boletobradesco_cedente');
$BoletoCarteira = $config->get('boletobradesco_carteira');
$BoletoAgencia = $config->get('boletobradesco_agencia');
$BoletoConta = $config->get('boletobradesco_conta');

$BoletoDVC = $config->get('boletobradesco_contadv');
$BoletoDVA = $config->get('boletobradesco_agenciadv');

$desconto = $config->get('boletobradesco_desconto');
//Variaveis da compra.

$valorBoleto = $pedido->row['total'];
if((!empty($desconto)) AND ($desconto>0)){
$valorBoleto = $valorBoleto-(($valorBoleto/100)*$desconto);
}

$sacadoBoleto = $pedido->row['firstname']." ".$pedido->row['lastname'];
$enderecoBoleto = $pedido->row['shipping_address_1']." - ".$pedido->row['shipping_address_2']." - ".$pedido->row['shipping_city']."<br>Cidade: ".$pedido->row['shipping_city']." CEP: ".$pedido->row['shipping_postcode'];

$prazo = $BoletodiasVencimento;

$data_venc = date("d/m/Y", time() + ($prazo * 86400)); 
$valor_cobrado = $valorBoleto;
$valor_cobrado = str_replace(",", ".",$valor_cobrado);
$valor_boleto=number_format($valor_cobrado, 2, ',', '');

$dadosboleto["nosso_numero"] = $itemId;
$dadosboleto["numero_documento"] = 'SI'.str_pad((int) $itemId, 9, "0", STR_PAD_LEFT);
$dadosboleto["data_vencimento"] = $data_venc;

$dadosboleto["data_documento"] = date("d/m/Y");
$dadosboleto["data_processamento"] = date("d/m/Y");
$dadosboleto["valor_boleto"] = $valor_boleto;

// DADOS DO SEU CLIENTE
$dadosboleto["sacado"] = $sacadoBoleto;
$dadosboleto["endereco1"] = $enderecoBoleto;
$dadosboleto["endereco2"] = '';
// INFORMACOES PARA O CLIENTE
$dadosboleto["demonstrativo1"] = $BoletoDemoU;
$dadosboleto["demonstrativo2"] = $BoletoDemoD;
$dadosboleto["demonstrativo3"] = $BoletoDemoT;
$dadosboleto["instrucoes1"] = $BoletoInstrucaoU;
$dadosboleto["instrucoes2"] = $BoletoInstrucaoD;
$dadosboleto["instrucoes3"] = $BoletoInstrucaoT;
$dadosboleto["instrucoes4"] = $BoletoInstrucaoQ;

// DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
$dadosboleto["quantidade"] = 1;
$dadosboleto["valor_unitario"] = $valor_boleto;
$dadosboleto["aceite"] = $BoletoAceite;		
$dadosboleto["especie"] = $BoletoEspecie;

$dadosboleto["uso_banco"] = ""; 	
$dadosboleto["especie_doc"] = $BoletoEspecieDoc;




// ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //


// DADOS DA SUA CONTA - ITAÚ
$dadosboleto["agencia"] = $BoletoAgencia;
$dadosboleto["conta"] = $BoletoConta;
$dadosboleto["agencia_dv"] = $BoletoDVA; // Digito do Num da agencia
$dadosboleto["conta_dv"] = $BoletoDVC; 	// Digito do Num da conta

// DADOS PERSONALIZADOS - ITAÚ
$dadosboleto["conta_cedente"] = $BoletoConta; // ContaCedente do Cliente, sem digito (Somente Números)
$dadosboleto["conta_cedente_dv"] = $BoletoDVC; // Digito da ContaCedente do Cliente

$dadosboleto["carteira"] = $BoletoCarteira;
//$dadosboleto["carteira"] = "175";  // Código da Carteira: pode ser 175 ou 109

// SEUS DADOS
$dadosboleto["identificacao"] = "Impressão de Boleto Online (BANCO BRADESCO)";

$dadosboleto["cpf_cnpj"] = $BoletoCedenteDocumento;
$dadosboleto["cedente"] = $BoletoCedente;

// NÃO ALTERAR!
include("include/funcoes_bradesco.php"); 
include("include/layout_bradesco.php");
?>
<script language="javascript">
//self.print();
</script>
boleto/boletobradesco/dados.php
Código: Selecionar todos
<?php
// Configuration
require_once('../../config.php');

// Startup
require_once(DIR_SYSTEM . 'startup.php');

// Application Classes
require_once(DIR_SYSTEM . 'library/customer.php');
require_once(DIR_SYSTEM . 'library/currency.php');
require_once(DIR_SYSTEM . 'library/tax.php');
require_once(DIR_SYSTEM . 'library/weight.php');
require_once(DIR_SYSTEM . 'library/length.php');
require_once(DIR_SYSTEM . 'library/cart.php');


// Registry
$registry = new Registry();

// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);

// Config
$config = new Config();
$registry->set('config', $config);

// Database 
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);

// Settings
$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting");

foreach ($query->rows as $setting) {
	$config->set($setting['key'], $setting['value']);
}

foreach ($query->row as $key => $value) {
	$config->set('config_' . $key, $value);
}

$pedido = $db->query("SELECT * FROM " . DB_PREFIX . "`order` WHERE order_id = '".$itemId."'");
$cliente = $db->query("SELECT * FROM " . DB_PREFIX . "`customer` WHERE customer_id = '".$pedido->row['customer_id']."'");

?>
#44637
Já tentei de todos os jeitos, desinstalei o modulo e instalei novamente, fiz teste sem alterar nada e continua o erro(acredito que se refere a banco de dados), fiz alterações conforme mensagens dos usuários uma por uma, sempre testando o modulo e continua dando o mesmo erro conforme imagem abaixo. Caso não consiga resolver essa semana vou partir para outro modulo.

Imagem

Valeu a atenção de todos.
#44667
@aguimarsp, basta ler o erro. Ele disse que a tabela novaloja2.oc_ .... não existe no banco. Cabe a você entrar no banco e criar a tabela, ou se a tabela existir ajustar o código, ou renomear a tabela. Fica a seu critério meu amigo.
É simples de arrumar. Tente ler o erro e procurar arrumá-lo no banco que conseguirá utilizar o módulo. Abraços.
#44674
Ele não está lendo provavelmente a variável DBPREFIX nas linhas
"$pedido = $db->query("SELECT * FROM " . DB_PREFIX . "`order` WHERE order_id = '".$itemId."'");
$cliente = $db->query("SELECT * FROM " . DB_PREFIX . "`customer` WHERE customer_id = '".$pedido->row['customer_id']."'");"

Substitua o DBPREFIX com o namespace que está usando no seu BD, ficando:
$pedido = $db->query("SELECT * FROM [prefixo]`order` WHERE order_id = '".$itemId."'");

Use alguma IDE para rodar o mysql remotamente, como o mysql workbench, e tente rodar a query.

Cuidado com essa extensão, tem que personalizá-la pois funcionando ela passa nos parâmetros na url o id do pedido e não verifica se é o usuário logado, isso dá margem para digitar qq pedido e ter informações dos clientes.

Além do que precisa de outros ajustes para aparecer o pedido depois de fechado (no 1.5.6). Fiz essas adaptações em um e-commerce e também implementei opção de reimpressão de boleto.

Esse módulo é bem interessante, funciona sim, mas precisa de algumas correções e intervenção em seu código.

Sinceramente se não tiver condições técnicas de alterá-la, aconselharia fortemente a buscar uma solução paga, ou colocar opção de boleto pelos intermediários, ou contratar alguém pra lhe auxiliar.

Abrass
  • 1
  • 3
  • 4
  • 5
  • 6
  • 7

Gente preciso de ajuda urgente. Na migraç&a[…]

Caro @reds , muito obrigado pela resposta.

PHP 8+ incompatibilidade

Toda tradução para a versão 3[…]

Ola @alex3257 Se você precisa apenas ver […]