Ir para conteúdo
  • 0
Entre para seguir isso  
MarcosPacheco

Website PagSeguro ZnoteAAc

Pergunta

MarcosPacheco    2
MarcosPacheco

Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo:

https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/

https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/

Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.).

 

Base:

Znote AAC ultima versão do git

 

Qual é a sua pergunta?

Estou tentando utilizar o retorno automático do pagseguro, porém fazendo testes no sandbox.

do inicio até o final da compra, funciona certinho, porém o retorno não.
recebo o seguinte log no pagseguro:

Spoiler

~~pagseguro_ipn.php
Os seguintes parâmetros foram enviados via POST:
notificationType=transaction
notificationCode=0814B529484A484A8BDEE4D7AF957DFC02B4


{
  "timestamp": "2020-02-01T22:00:00.540+0000",
  "status": "500",
  "error": "Internal Server Error",
  "message": "failed to execute action",
  "path": "/notification/log"
}

 

Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo:

pagseguro_retorno.php

Spoiler

 <?php
	/*
		Instalação
			- Configurando Pagseguro (Acessar https://pagseguro.uol.com.br/preferencias/integracoes.jhtml)
				- Notificação de Transação:
					- http://you-site/pagseguro_ipn.php
				- Página de redirecionamento:
					- A. Página fixa de redirecionamento
						- http://you-site/znote/pagseguro_retorno.php
					- B. Redirecionamento com o código da transação
						- transaction
				- Gerar o Token e copiar para a próxima etapa

			- Configurando ZnoteACC
				- config.php
					- $config['pagseguro']['email']
						- Seu email da conta do pagseguro que irá receber o pagamento
					- $config['pagseguro']['token']
						- Preencher com o Token que pedi pra copiar na primeira etapa
					- $config['pagseguro']['product_name']
						- Nome do Produto

			- Instalando Tabelas
				CREATE TABLE IF NOT EXISTS `znote_pagseguro` (
				  `id` int(11) NOT NULL AUTO_INCREMENT,
				  `transaction` varchar(36) NOT NULL,
				  `account` int(11) NOT NULL,
				  `price` decimal(11,2) NOT NULL,
				  `points` int(11) NOT NULL,
				  `payment_status` tinyint(1) NOT NULL,
				  `completed` tinyint(4) NOT NULL,
				  PRIMARY KEY (`id`),
				  FOREIGN KEY (account) REFERENCES accounts(id)
				) ENGINE=MyISAM DEFAULT CHARSET=utf8;

				CREATE TABLE IF NOT EXISTS `znote_pagseguro_notifications` (
				  `id` int(11) NOT NULL AUTO_INCREMENT,
				  `notification_code` varchar(40) NOT NULL,
				  `details` text NOT NULL,
				  `receive_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
				  PRIMARY KEY (`id`)
				) ENGINE=MyISAM DEFAULT CHARSET=utf8;
	*/

	// Require the functions to fetch config values
	require 'config.php';

	// Require the functions to connect to database
	require 'engine/database/connect.php';

	$pagseguro = $config['pagseguro'];

	// Fetch and sanitize POST and GET values
	function getValue($value) {
		return (!empty($value)) ? sanitize($value) : false;
	}
	function sanitize($data) {
		return htmlentities(strip_tags(mysql_znote_escape_string($data)));
	}

	// Util function to insert log
	function report($code, $details = '') {
		$connectedIp = $_SERVER['REMOTE_ADDR'];
		$details = getValue($details);
		$details .= '\nConnection from IP: '. $connectedIp;
		mysql_insert('INSERT INTO `znote_pagseguro_notifications` VALUES (null, \'' . getValue($code) . '\', \'' . $details . '\', CURRENT_TIMESTAMP)');
	}

	function VerifyPagseguroIPN($code) {
		global $pagseguro;
		$url = $pagseguro['urls']['ws'];

		$cURL = curl_init();
		curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($cURL, CURLOPT_URL, 'https://' . $url . '/v3/transactions/' . $code . '?email=' . $pagseguro['email'] . '&token=' . $pagseguro['token']);
		curl_setopt($cURL, CURLOPT_HEADER, false);
		curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($cURL, CURLOPT_FORBID_REUSE, true);
		curl_setopt($cURL, CURLOPT_FRESH_CONNECT, true);
		curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 30);
		curl_setopt($cURL, CURLOPT_TIMEOUT, 60);
		curl_setopt($cURL, CURLINFO_HEADER_OUT, true);
		curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
			'Connection: close',
			'Expect: ',
		));
		$Response = curl_exec($cURL);
		$Status = (int)curl_getinfo($cURL, CURLINFO_HTTP_CODE);
		curl_close($cURL);

		return trim($Response);
	}

	$transactionCode = getValue($_GET['transaction']);
	$rawTransaction = VerifyPagseguroIPN($transactionCode);
	$transaction = simplexml_load_string($rawTransaction);

	$transactionStatus = (int) $transaction->status;
	$completed = ($transactionStatus != 7) ? 0 : 1;

	$custom = (int) $transaction->reference;
	$item = $transaction->items->item[0];
	$points = $item->quantity;
	$price = $points * ($pagseguro['price'] / 100);
	mysql_insert('INSERT INTO `znote_pagseguro` VALUES (null, \'' . sanitize($transaction->code) . '\', ' . $custom . ', \'' . $price . '\', \'' . $points . '\', ' . $transactionStatus . ', ' . $completed . ')');

	header('Location: shop.php?callback=processing');

 

pagseguro_ipn.php

Spoiler

<?php
    // Require the functions to fetch config values
    require 'config.php';

    $pagseguro = $config['pagseguro'];
    $notificationCode = $_POST['notificationCode'];
    $notificationType = $_POST['notificationType'];

    // Require the functions to connect to database
    require 'engine/database/connect.php';

    // Fetch and sanitize POST and GET values
    function getValue($value) {
        return (!empty($value)) ? sanitize($value) : false;
    }
    function sanitize($data) {
        return htmlentities(strip_tags(mysql_znote_escape_string($data)));
    }

    // Util function to insert log
    function report($code, $details = '') {
        $connectedIp = $_SERVER['REMOTE_ADDR'];
        $details = getValue($details);
        $details .= '\nConnection from IP: '. $connectedIp;
        mysql_insert('INSERT INTO `znote_pagseguro_notifications` VALUES (null, \'' . getValue($code) . '\', \'' . $details . '\', CURRENT_TIMESTAMP)');
    }

    function VerifyPagseguroIPN($code) {
        global $pagseguro;
        $url = $pagseguro['urls']['ws'];

        $cURL = curl_init();
        curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($cURL, CURLOPT_URL, 'https://' . $url . '/v3/transactions/notifications/' . $code . '?email=' . $pagseguro['email'] . '&token=' . $pagseguro['token']);
        curl_setopt($cURL, CURLOPT_HEADER, false);
        curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($cURL, CURLOPT_FORBID_REUSE, true);
        curl_setopt($cURL, CURLOPT_FRESH_CONNECT, true);
        curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($cURL, CURLOPT_TIMEOUT, 60);
        curl_setopt($cURL, CURLINFO_HEADER_OUT, true);
        curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
            'Connection: close',
            'Expect: ',
        ));
        $Response = curl_exec($cURL);
        $Status = (int)curl_getinfo($cURL, CURLINFO_HTTP_CODE);
        curl_close($cURL);

        $output = print_r($Response, true);
        if(empty($Response) OR !$Status){
            return null;
        }
        if(intval($Status / 100) != 2){
            return false;
        }
        return trim($Response);
    }

    // Send an empty HTTP 200 OK response to acknowledge receipt of the notification
    header('HTTP/1.1 200 OK');

    if(empty($notificationCode) || empty($notificationType)){
        report($notificationCode, 'notificationCode or notificationType is empty. Type: ' . $notificationType . ', Code: ' . $notificationCode);
        exit();
    }

    if ($notificationType !== 'transaction') {
        report($notificationCode, 'Unknown ' . $notificationType . ' notificationType');
        exit();
    }

    $rawPayment = VerifyPagseguroIPN($notificationCode);
    $payment = simplexml_load_string($rawPayment);
    $paymentStatus = (int) $payment->status;
    $paymentCode = sanitize($payment->code);

    report($notificationCode, $rawPayment);

    // Updating Payment Status
    mysql_update('UPDATE `znote_pagseguro` SET `payment_status` = ' . $paymentStatus . ' WHERE `transaction` = \'' . $paymentCode . '\' ');

    // Check that the payment_status is Completed
    if ($paymentStatus == 3) {

        // Check that transaction has not been previously processed
        $transaction = mysql_select_single('SELECT `transaction`, `completed` FROM `znote_pagseguro` WHERE `transaction`= \'' . $paymentCode .'\'');
        $status = true;
        $custom = (int) $payment->reference;

        if ($transaction['completed'] == '1') {
            $status = false;
        }

        if ($payment->grossAmount == 0.0) $status = false; // Wrong ammount of money
        $item = $payment->items->item[0];
        if ($item->amount != ($pagseguro['price'] / 100)) $status = false;

        if ($status) {
            // transaction log
            mysql_update('UPDATE `znote_pagseguro` SET `completed` = 1 WHERE `transaction` = \'' . $paymentCode . '\'');

            // Process payment
            $data = mysql_select_single("SELECT `points` AS `old_points` FROM `znote_accounts` WHERE `account_id`='$custom';");

            // Give points to user
            $new_points = $data['old_points'] + $item->quantity;
            mysql_update("UPDATE `znote_accounts` SET `points`='$new_points' WHERE `account_id`='$custom'");
        }
    } else if ($paymentStatus == 7) {
        mysql_update('UPDATE `znote_pagseguro` SET `completed` = 1 WHERE `transaction` = \'' . $paymentCode . '\' ');
    }
?>
 

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:

Spoiler

pagseguro.png

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 resposta a esta questão

Recommended Posts

  • 1
MarcosPacheco    2
MarcosPacheco

[ Resolvido]
Necessário a instalação do PHP-Curl:

verificar versão do PHP utilizando php -v.

depois faça a instalação correta:
 

  • PHP 7.2: sudo apt-get install php7.2-curl
  • PHP 7.1: sudo apt-get install php7.1-curl
  • PHP 7.0: sudo apt-get install php7.0-curl
  • PHP 5.6: sudo apt-get install php5.6-curl
  • PHP 5.5: sudo apt-get install php5.5-curl

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×