Fórum OpenCart Brasil

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

Suporte para extensões de Formas de Pagamento
#4541
Olá amigos. Sou novo no fórum e gostaria de pedir ajuda a vocês

Instalei e segui os passos para instalar o pagseguro no opencart.

Antes disto estou utilizando o server de simulação do pagseguro, para testes.

Configurei certo os endereços.
Simulei uma compra e o sistema de teste registrou direitinho a compra. O retorno automático para o BD que foi criado na instalação também funcionou.

O problema é que quando altero no servidor de teste o status da transação ele atualiza o BD mas não atualiza o status na loja.

Gostaria de saber se alguém já passou por este contratempo e uma possível solução.


Obrigado. :D
#4914
Olá, amigo moisés, sou iniciante também, mas já passei e superei este problema.
Quanto ao status automático, funcionou apenas na versão 2.3 do módulo pagseguro.
Para que o retorno dos dados de status se atualizem automaticamente, voce tem que criar as tabelas
descritas nas intruções junto ao módulo, através de seu banco de dados.
Embora a versão que testei não seja igual à sua ( a minha foi 1.4.9.1) Acredito que vai funcionar
na sua também.
Procure no forum como criar as tabelas no seu banco de dados, vai ajudar.
#7466
moises_lavras escreveu:Olá amigos. Sou novo no fórum e gostaria de pedir ajuda a vocês

Instalei e segui os passos para instalar o pagseguro no opencart.

Antes disto estou utilizando o server de simulação do pagseguro, para testes.

Configurei certo os endereços.
Simulei uma compra e o sistema de teste registrou direitinho a compra. O retorno automático para o BD que foi criado na instalação também funcionou.

O problema é que quando altero no servidor de teste o status da transação ele atualiza o BD mas não atualiza o status na loja.

Gostaria de saber se alguém já passou por este contratempo e uma possível solução.


Obrigado. :D
Moises,

Tenho a mesma versão do Opencart instalada que a sua, 1.4.9.4.

Gostaria de saber qual versão do Pagseguro você usou porque tentei todos que estão para downloads e nada acontece.

Descompacto o arquivo na raiz, mais nada aparece para inslatar em modulo.

Desde Já Agradeço.

Tenca
#17424
Olá Amigos, estou trabalhando no mesmo problema por aqui.

Atualmente após configurado o retorno pelo paypal ao arquivo retorno.php. ele pagseguro a cada atualização de status atualiza a tabela PagSeguroTransacoes, essa tabela é atualiza porque o Pagseguro a cada mudança de status executa o arquivo retorno.php.

O que ocorre é que a tabela a ser alterada que seria referente a loja é a tabela op_order, porém com a informações que são recebidas pelo pagseguro não consegui uma forma de efetuar o update nessa também alterando o seu status.

Como poderíamos proceder galera, alguém se habilita ai?

Caso o Maxno que desenvolveu esse plugin V2.3 puder nos ajudar.

Abraços a todos
#17551
Olá Galera,
Decidi postar mais uma vez nesse tópico, pois apesar de nosso amigo ‘clm’ ter postado que já tinha resolvido o problema, o tópico ainda ficou sem uma resposta mais clara.
Antes de tudo instalem e sigam o post do Maxno no link abaixo.
https://forum.opencartbrasil.com.br/ ... =15&t=2098
Então vamos lá.
Aproveitando a iniciativa do nosso amigo ‘Maxno’ em disponibilizar a versão 2.3 do Pagseguro algumas coisas ainda não eram possíveis tais como o retorno automático do pagseguro a cada mudança de status do pedido, aguardando pagamento, em analise e etc.
O que ocorre é que a transação é apenas atualiza na tabela ‘PagSeguroTransacoes’ que é adicionada a se executar o script disponibilizado pelo ‘Maxno’.
Mas para que possamos ter o status atualizado automaticamente precisamos atualizar outra tabela com essas informações, a tabela padrão de pedidos do opencart, essa tabela se chama ‘prefix_order’.
Vamos a algumas mudanças para que isso realmente funcione.
Primeiro vamos subir novamente a tabela ‘prefix_order_status’ o script ta aqui em baixo, mas antes de fazer isso elimine a tabela já existente no seu banco de dados.
Antes de subir esse script no seu banco, altere o nome ‘prefix’ pelo prefixo que você escolheu para suas tabelas na instalação do OP, para isso verifique as outras tabelas, possivelmente já terá essa informação.

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for prefix_order_status
-- ----------------------------
DROP TABLE IF EXISTS `prefix_order_status`;
CREATE TABLE `prefix_order_status` (
`order_status_id` int(11) NOT NULL AUTO_INCREMENT,
`language_id` int(11) NOT NULL,
`name` varchar(32) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`order_status_id`,`language_id`)
) ENGINE=MyISAM AUTO_INCREMENT=10214 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `prefix_order_status` VALUES ('10212', '1', 'returned');
INSERT INTO `prefix_order_status` VALUES ('10212', '2', 'Devolvido');
INSERT INTO `prefix_order_status` VALUES ('10213', '1', 'begun');
INSERT INTO `prefix_order_status` VALUES ('10213', '2', 'Iniciada');
INSERT INTO `prefix_order_status` VALUES ('10211', '1', 'complete');
INSERT INTO `prefix_order_status` VALUES ('10211', '2', 'Completo');
INSERT INTO `prefix_order_status` VALUES ('10208', '2', 'Em Analise');
INSERT INTO `prefix_order_status` VALUES ('10209', '1', 'approved');
INSERT INTO `prefix_order_status` VALUES ('10209', '2', 'Aprovado');
INSERT INTO `prefix_order_status` VALUES ('10210', '1', 'canceled');
INSERT INTO `prefix_order_status` VALUES ('10210', '2', 'Cancelado');
INSERT INTO `prefix_order_status` VALUES ('10207', '2', 'Aguardando Pagto');
INSERT INTO `prefix_order_status` VALUES ('10207', '1', 'Awaiting Payment.');
INSERT INTO `prefix_order_status` VALUES ('10208', '1', 'in Review');

Após a execução desse script, possivelmente já terá a tabela de status de pedido atualiza ai no seu sistema, vamos a próximo passo.

Feito isso abra o script ‘pagseguro.php’ em catalog/controller/payment/pagseguro.php
Veja a linha 16 e altere conforme essa aqui .
$this->data['ref'] = $order_info['order_id'];
Isso fará com que o número de pedido atualizado no OP seja igual ao número informado ao pagseguro.
Vamos ao próximo passo.
Feito isso altere o script retorno.php que deve estar na raiz de seu site postado pelo nosso amigo ‘Maxno’ para o código abaixo.
Lembrando que a minhas tabelas estão com o prefixo op_, lembre de alterar para o seu prefixo.

<?php
require_once("config.php");

$db = mysql_connect(DB_HOSTNAME,DB_USERNAME,DB_PASSWORD);
mysql_select_db(DB_DATABASE, $db);

if(!isset($_POST['TransacaoID'])){
header("Location: index.php?route=checkout/success");
}


function tep_not_null($value) {
if (is_array($value)) {
if (sizeof($value) > 0) {
return true;
}else{
return false;
}

}else{
if (($value != '') && ($value != 'NULL') && (strlen(trim($value)) > 0)) {
return true;

}else{
return false;
}
}
}



$SQL = "SELECT `value` FROM `op_setting` WHERE `group` ='pagseguro' AND `key`='pagseguro_encryption'";
$Executa = mysql_query($SQL) or print(mysql_error());
$totalresultado = mysql_num_rows($Executa);

if($totalresultado!=0){
$resultaado = mysql_fetch_object($Executa);
$kkey = $resultaado->value;
}else{
$kkey="0000";
}

$PagSeguro = 'Comando=validar';
$PagSeguro .= '&Token='.$kkey;
$Cabecalho = "";

foreach ($_POST as $key => $value){
$value = urlencode(stripslashes($value));
$PagSeguro .= "&$key=$value";
}

if (function_exists('curl_exec')){
$curl = true;

}elseif ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen ('ssl://pagseguro.uol.com.br', 443, $errno, $errstr, 30)) ){
$fsocket = true;
}elseif ($fp = @fsockopen('pagseguro.uol.com.br', 80, $errno, $errstr, 30)){
$fsocket = true;
}

if ($curl == true){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/pagseguro- ... /NPI.jhtml');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $PagSeguro);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$resp = curl_exec($ch);

if (!tep_not_null($resp)){
curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/pagseguro- ... /NPI.jhtml');
$resp = curl_exec($ch);
}

curl_close($ch);
$confirma = (strcmp ($resp, "VERIFICADO") == 0);

}elseif ($fsocket == true){
$Cabecalho = "POST /pagseguro-ws/checkout/NPI.jhtml HTTP/1.0\r\n";
$Cabecalho .= "Content-Type: application/x-www-form-urlencoded\r\n";
$Cabecalho .= "Content-Length: " . strlen($PagSeguro) . "\r\n\r\n";

if ($fp || $errno>0){
fputs ($fp, $Cabecalho . $PagSeguro);
$confirma = false;
$resp = '';
while (!($fp)){
$res = @fgets ($fp, 1024);
$resp .= $res;
if (strcmp ($res, "VERIFICADO") == 0){
$confirma=true;
break;
}
}

fclose ($fp);
}else{
echo "$errstr ($errno)<br />\n";
}
}


if ($confirma){
$TransacaoID = $_POST['TransacaoID'];
$VendedorEmail = $_POST['VendedorEmail'];
$Referencia = $_POST['Referencia'];
$ValorFrete = $_POST['ValorFrete'];
$Anotacao = $_POST['Anotacao'];
$TipoPagamento = $_POST['TipoPagamento'];
$StatusTransacao = $_POST['StatusTransacao'];
$CliNome = $_POST['CliNome'];
$CliEmail = $_POST['CliEmail'];
$CliEndereco = $_POST['CliEndereco'];
$CliBairro = $_POST['CliBairro'];
$CliCidade = $_POST['CliCidade'];
$CliEstado = $_POST['CliEstado'];
$CliCEP = $_POST['CliCEP'];
$CliTelefone = $_POST['CliTelefone'];
$NumItens = $_POST['NumItens'];


$SQL = "SELECT * FROM PagSeguroTransacoes WHERE TransacaoID ='$TransacaoID'";
$Executa = mysql_query($SQL) or print(mysql_error());

$totalresultado = mysql_num_rows($Executa);

if($totalresultado!=0){

$SQL = "UPDATE PagSeguroTransacoes SET StatusTransacao='".$StatusTransacao."' WHERE TransacaoID='".$TransacaoID."'";
$Executa = mysql_query($SQL) or print(mysql_error());
}else{
$SQL = "INSERT INTO PagSeguroTransacoes (" .
"TransacaoID, " .
"VendedorEmail, ".
"Referencia, " .
"ValorFrete, ".
"Anotacao, ".
"TipoPagamento, ".
"StatusTransacao, " .
"CliNome, " .
"CliEmail, " .
"CliEndereco, " .
"CliBairro, " .
"CliCidade, " .
"CliEstado, " .
"CliCEP, " .
"CliTelefone, " .
"NumItens" .
") VALUES (" .
"" .
"'" . $TransacaoID . "', " .
"'" . $VendedorEmail . "', " .
"'" . $Referencia . "', " .
"'" . $ValorFrete . "', " .
"'" . $Anotacao . "', " .
"'" . $TipoPagamento . "', " .
"'" . $StatusTransacao . "', " .
"'" . $CliNome . "', " .
"'" . $CliEmail . "', " .
"'" . $CliEndereco . "', " .
"'" . $CliBairro . "', " .
"'" . $CliCidade . "', " .
"'" . $CliEstado . "', " .
"'" . $CliCEP . "', " .
"'" . $CliTelefone . "', " .
"'" . $NumItens . "'" .
")";
$Executa = mysql_query($SQL) or print(mysql_error());
}

/* Atualizando Status da Tabela de Pedidos por Leandro Santana */

switch($StatusTransacao){
case 'Aguardando Pagto' :
$order_status_id = 10207;
break;

case 'Em Analise' :
$order_status_id = 10208;
break;

case 'Aprovado' :
$order_status_id = 10209;
break;

case 'Cancelado' :
$order_status_id = 10210;
break;

case 'Completo' :
$order_status_id = 10211;
break;

case 'Devolvido' :
$order_status_id = 10212;
break;

default:
$order_status_id = 10213;
}

$SQL_ORDER = "UPDATE op_order SET order_status_id = '".$order_status_id."' WHERE order_id = '".$Referencia."'";
mysql_query($SQL_ORDER)or print(mysql_error());

/* FIM - termina aqui a bagaça */




$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, HTTP_SERVER.'index.php?route=payment/pagseguro/callback');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $PagSeguro);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$resp = curl_exec($ch);
curl_close($ch);

}else{
if (strcmp ($res, "FALSO") == 0){

}
}

mysql_close($db);

?>

Bom é isso ai galera com essa atualização a cada mudança de status no pagseguro automaticamente o arquivo retorno.php é atualizado e com isso o status do pedido no nosso OP também.
Sugestões? Estou disposição, vamos fazer dessa comunidade cada vez maior.

Abraços
Leandro Santana
http://www.infosi.com.br/
http://www.estudioinovare.com.br/
#18609
Boa tarde, cara esse script que você passo acima funciona para a versão 1.5.2.1 ?

Estou perguntando pois sou novo no opencart e baixei e fiz muita alteração na versão do opencart 1.5.2.1, se não funcionar por favor poderia me informar a versão do pagseguro que consiga realizar as atualizações automáticas do pagseguro?

Abraço,
Elio Sanguini