Plugin Buycourses no Brasil

Moderators: kefurlani, joelffreire

Plugin Buycourses no Brasil

Postby fabiowoj » 04 Aug 2014, 16:36

Prezados, alguém já está trabalhando com este plugin por aqui?

Eu estou trabalhando em cima dele e já consegui fazer a integração com o pagseguro e também fazer funcionar a tranferência bancária. Caso alguém precise de ajuda estou a disposição.
Fabio Wojcikiewicz Almeida
Diretor de sistema - WEB Ctrl
http://www.webctrl.com.br
fabiowoj
New user
 
Posts: 13
Joined: 02 Aug 2012, 15:21
Location: Rio de Janeiro - RJ

Re: Plugin Buycourses no Brasil

Postby kefurlani » 04 Aug 2014, 20:23

Olá Fábio,
Você poderia descrever o processo para a integração com o pagseguro?
Isso seria muito útil para todos.
Grande abraço,
Kleber Furlani
http://furlani.eng.br
ICQ Number: 651353848
kleber@furlani.eng.br
User avatar
kefurlani
New user
 
Posts: 10
Joined: 08 Jun 2014, 17:06
Location: Brasil, São Paulo

Re: Plugin Buycourses no Brasil

Postby fabiowoj » 04 Aug 2014, 23:00

Então,
baixei a library do Pagseguro no site deles e coloquei a pasta PagSeguroLibrary dentro da pasta do plugin buycourses.

Em seguida coloquei o código abaixo na src/process_confirm.php
Code: Select all
if ($_POST['payment_type'] == "Pagseguro") {
require_once '../PagSeguroLibrary/PagSeguroLibrary.php';
    // Save the user, course and reference in a tmp table
    $user_id = $_SESSION['bc_user_id'];
    $course_code = $_SESSION['bc_course_codetext'];
    $reference = calculateReference();

    reset($_POST);
    while (list ($param, $val) = each($_POST)) {
        $asignacion = "\$" . $param . "=mysql_real_escape_string(\$_POST['" . $param . "']);";
        eval($asignacion);
    }



    if (!isset($_SESSION['_user'])) {
        $name = $_SESSION['bc_user']['firstName'] . ' ' . $_SESSION['bc_user']['lastName'];
        $email = $_SESSION['bc_user']['mail'];
    } else {
        $name = $_SESSION['bc_user']['firstname'] . ' ' . $_SESSION['bc_user']['lastname'];
        $email = $_SESSION['bc_user']['email'];
    }

    $courseInfo = courseInfo($_SESSION['bc_course_code']);
    $courseTitle = $courseInfo['title'];
    $codecourse = $_SESSION['bc_course_codetext'];
    $paymentAmount = $_SESSION["Payment_Amount"];
    $paymenttype = $_POST['payment_type'];
    date_default_timezone_set('America/Sao_Paulo');
$today = date("Y-m-d H:i:s");
     $todayref = date("YmdHis");
     $servidor = $_SERVER['SERVER_NAME'];
    //$reference = $servidor . '-' . $codecourse . '-' . $user_id . '-' . $todayref;
 
        $sql = "INSERT INTO $tableBuyCourseTemporal (user_id, name, course_code, title, reference, price)
        VALUES ('" . $user_id . "', '" . $name . "','" . $course_code . "','" . $courseTitle . "','" . $reference . "','" . $paymentAmount . "');";
    $res = Database::query($sql);
/**
 * Class with a main method to illustrate the usage of the domain class PagSeguroPaymentRequest
 */

 
class CreatePaymentRequest
{

    public static function main()
    {
   
       global $user_id, $codecourse, $name, $email, $courseTitle, $paymentAmount, $paymenttype, $today, $code, $reference, $url;
   
        // Instantiate a new payment request
        $paymentRequest = new PagSeguroPaymentRequest();

        // Set the currency
        $paymentRequest->setCurrency("BRL");

        // Add an item for this payment request
        $paymentRequest->addItem('0001',$courseTitle, 1, $paymentAmount);

        // Set a reference code for this payment request, it is useful to identify this payment
        // in future notifications.
        $paymentRequest->setReference($reference);

        // Set shipping information for this payment request
        $sedexCode = PagSeguroShippingType::getCodeByType('SEDEX');
        $paymentRequest->setShippingType($sedexCode);
        $paymentRequest->setShippingAddress(
            '01452002',
            'Av. Brig. Faria Lima',
            '1384',
            'apto. 114',
            'Jardim Paulistano',
            'São Paulo',
            'SP',
            'BRA'
        );

        // Set your customer information.
        $paymentRequest->setSender(
            $name,
            $email,
            '11',
            '56273440',
            'CPF',
            '156.009.442-76'
        );

        $endereco = api_get_path(WEB_PATH);
        // Set the url used by PagSeguro to redirect user after checkout process ends
        $paymentRequest->setRedirectUrl($endereco . "plugin/buycourses/src/success_ps.php");



        // Another way to set checkout parameters
        $paymentRequest->addParameter('notificationURL', $endereco . 'plugin/buycourses/src/retorno.php');


        try {

            /*
             * #### Credentials #####
             * Replace the parameters below with your credentials (e-mail and token)
             * You can also get your credentials from a config file. See an example:
             * $credentials = PagSeguroConfig::getAccountCredentials();
             */
            $credentials = PagSeguroConfig::getAccountCredentials();
            // Register this payment request in PagSeguro to obtain the checkout code
            //$onlyCheckoutCode = true;
            //$code = $paymentRequest->register($credentials, $onlyCheckoutCode);
            $url = $paymentRequest->register($credentials);
           
            self::printPaymentUrl($url);
           }    
           catch (PagSeguroServiceException $e) {
            die($e->getMessage());
           }
    } // end public static function main()

    public static function printPaymentUrl($url)
      {
          header('Location:'. $url . '');

       } // end printPaymentUrl($url)
} //end class CreatePaymentRequest

      CreatePaymentRequest::main();


            $sqlcons = "SELECT * FROM $tableBuyCourseSale WHERE course_code = '" . $codecourse . "' AND user_id = '" . $user_id . "' AND status != '3'";
            $rescons = Database::query($sqlcons);

          if (Database::num_rows($rescons) > 0) {

            $sqlup = "UPDATE $tableBuyCourseSale SET price='" . $paymentAmount . "', payment_type='" . $paymenttype . "', date='" . $today . "', reference='" . $reference . "' WHERE user_id='" . $user_id . "' AND course_code='" . $codecourse . "'";
            $resup = Database::query($sqlup);

           } else {
             $sql = "INSERT INTO $tableBuyCourseSale (cod, user_id, course_code, price, payment_type, status, date, reference)
        VALUES ('','" . $user_id . "','" . $codecourse . "','" . $paymentAmount . "','" . $paymenttype . "','1','" . $today . "','" . $reference . "')";
             $res = Database::query($sql);
          }
}


Criei um arquivo para retorno de notificação do pagseguro com o nome de retorno.php
Code: Select all
header("access-control-allow-origin: https://sandbox.pagseguro.uol.com.br");

//Verifica se foi enviado um método post
if($_SERVER['REQUEST_METHOD'] == 'POST'){

   //Recebe o post como o Tipo de Notificação
   $tipoNotificacao   = $_POST['notificationType'];

   //Recebe o código da Notificação
   $codigoNotificacao = $_POST['notificationCode'];

   //Verificamos se tipo da notificação é transaction
   if($tipoNotificacao == 'transaction'){

      //Chama a classe para utilizar a biblioteca do pagseguro
      require_once "../PagSeguroLibrary/PagSeguroLibrary.php";

      //Informa as credenciais : Email, e TOKEN
      $credencial = PagSeguroConfig::getAccountCredentials();

      //Verifica as informações da transação, e retorna
                //o objeto Transaction com todas as informações
      $transacao = PagSeguroNotificationService::checkTransaction($credencial, $codigoNotificacao);

      //Retorna o objeto TransactionStatus, que vamos resgatar o valor do status
      // Obtenção do objeto TransactionStatus   
$transactionStatus = $transacao->getStatus(); 
 
// imprime um valor numérico p.e. 1 
$status = $transactionStatus->getValue();

      /**
       * Verificamos se realizado o pagamento para mudar no banco de dados
       * O valor 3 se referente o tipo de status, no caso informando
       * que cliente realizou o pagamento.
       * https://pagseguro.uol.com.br/v2/guia-de-integracao/documentacao-da-biblioteca-pagseguro-em-php.html#TransactionStatus
       */
      
         /**
          * Pegamos o código que passamos por referência para o pagseguro
          * Que no nosso exemplo é id da tabela pedido
          */
         $idPedido = $transacao->getReference();

         
         /**
          * Irei colocar o SQL diretamente apenas para fins didático
          * Esse SQL será para mudança de status do pedido ( 2 => liberado pra envio ), e informar a hora
          * da última modificação do pedido
          */
                  /**
          * Irei colocar o SQL diretamente apenas para fins didático
          * Esse SQL será para mudança de status do pedido ( 2 => liberado pra envio ), e informar a hora
          * da última modificação do pedido
          */
          global $idPedido, $status, $sql1, $res1, $linha, $nlinha;
         
            
         /**
          * você pode depois realizar a mudança de status disparar um e-mail
          * tanto para o cliente, quanto para você informando que
          * já pode enviar o produto
          *
          */
if($status == 3){


require_once '../config.php';
require_once '../../../main/inc/lib/mail.lib.inc.php';
require_once dirname(__FILE__) . '/buy_course.lib.php';
$tableBuyCourseTemporal = Database::get_main_table(TABLE_BUY_COURSE_TEMPORAL);
$tableBuyCourseSale = Database::get_main_table(TABLE_BUY_COURSE_SALE);

         $sql1 = "SELECT * FROM $tableBuyCourseTemporal WHERE reference = '$idPedido'";
         $res1 = Database::query($sql1);   
         $row1 = Database::fetch_assoc($res1);
      if ($row1['cod'] > 0) {
         $idtemp = "order" . $row1['cod'];

      }
$plugin = BuyCoursesPlugin::create();
    $asunto = $plugin->get_lang('bc_subject');


    if (!isset($_SESSION['_user'])) {
        $name = $_SESSION['bc_user']['firstName'] . ' ' . $_SESSION['bc_user']['lastName'];
        $email = $_SESSION['bc_user']['mail'];
    } else {
        $name = $_SESSION['bc_user']['firstname'] . ' ' . $_SESSION['bc_user']['lastname'];
        $email = $_SESSION['bc_user']['email'];
    }

    $courseInfo = courseInfo($_SESSION['bc_course_code']);
    $title_course = $courseInfo['title'];

    $message = 'Obrigado pela compra';
    $message = str_replace("{{name}}", $name, $message);
    $message = str_replace("{{course}}", $title_course, $message);
    $message = str_replace("{{reference}}", $reference, $message);
    $message .= $text;

    api_mail($name, 'fabiowoj@gmail.com', $asunto, $message);


echo $row1['course_code'];
echo "</br>";
echo $row1['user_id'];
echo "</br>";
echo $idPedido;
echo "</br>";
echo $idtemp;


$sql = "SELECT * FROM $tableBuyCourseTemporal WHERE cod='" . $row1['cod'] . "';";
    $res = Database::query($sql);
    $row = Database::fetch_assoc($res);

    $isAllowed = false;
    $user_id = $row['user_id'];
    $course_code = $row['course_code'];
    $price = $row['price'];
    $date = $row['date'];
    $status = $row['reference'];
    $all_course_information = CourseManager::get_course_information($course_code);

    if (CourseManager::subscribe_user($user_id, $course_code)) {
        $isAllowed = true;
    } else {
        $isAllowed = false;
    }
    //Activate user account
    if ($isAllowed) {
        // 1. set account inactive
        $sql = "UPDATE $tableUser SET active = '1' WHERE user_id = " . $user_id . "";
        Database::query($sql);
       
        $sql = "INSERT INTO $tableBuyCourseSale (user_id, course_code, price, payment_type, status, date)
        VALUES ('" . $user_id . "','" . $course_code . "', '" . $price . "', 'Pagseguro', '" . $status . "', '" . $date . "');";
        Database::query($sql);

        $sql = "DELETE FROM $tableBuyCourseTemporal WHERE cod='" . $row1['cod'] . "';";
        $res = Database::query($sql);

        $content = $plugin->get_lang('TheSubscriptionAndActivationWereDoneSuccessfully');
        echo json_encode(array("status" => "true", "content" => $content));
    } else {
        $content = $plugin->get_lang('ProblemToSubscribeTheUser');
        echo json_encode(array("status" => "false", "content" => $content));
    }



      }
   }

}
Fabio Wojcikiewicz Almeida
Diretor de sistema - WEB Ctrl
http://www.webctrl.com.br
fabiowoj
New user
 
Posts: 13
Joined: 02 Aug 2012, 15:21
Location: Rio de Janeiro - RJ

Re: Plugin Buycourses no Brasil

Postby kefurlani » 04 Aug 2014, 23:45

Olá Fábio,
Sensacional, isso vai ajudar muito!
Obrigado pela contribuição!
Grande abraço,
Kleber Furlani
http://furlani.eng.br
ICQ Number: 651353848
kleber@furlani.eng.br
User avatar
kefurlani
New user
 
Posts: 10
Joined: 08 Jun 2014, 17:06
Location: Brasil, São Paulo

Re: Plugin Buycourses no Brasil

Postby joni93 » 10 Nov 2014, 18:12

Eu estou trabalhando em cima dele e já consegui fazer a integração com o pagseguro e também fazer funcionar a tranferência bancária. Caso alguém precise de ajuda estou a disposição.
joni93
Newbie
 
Posts: 1
Joined: 10 Nov 2014, 18:11

Re: Plugin Buycourses no Brasil

Postby asao28 » 02 Mar 2018, 17:19

Alguém poderia me ajudar?

Baixei a biblioteca do pagseguro aqui:
https://pagseguro.uol.com.br/v2/guia-de-integracao/documentacao-da-biblioteca-pagseguro-em-php.html#!rmcl

Coloquei a pasta PagSeguroLibrary no lugar certo
(plugin/buycourses/PagSeguroLibrary)
Coloquei os códigos php como citado acima, dentro da pasta src. Mas e ai, o que tem que fazer?!
asao28
Newbie
 
Posts: 1
Joined: 18 Sep 2017, 03:23

Re: Plugin Buycourses no Brasil

Postby danielsp » 22 Jun 2018, 02:23

Eu não entendo muito bem como funciona por dentro do Chamilo, já conheço por nome a vários anos, mas agora que decidi mudar do Moodle para o Chamilo, estou aprendendo, e quero implantar dois sistemas nele, um para proteção de vídeo contra downloads, e integrar o PagSeguro e futuramente o Mercado Pago também.

Se alguém souber de dicas sobre o processo de funcionamento das integrações com gateways de pagamentos em geral com o Chamilo, gostaria muito de saber mais.
No momento estou aprendendo ainda a parte do front-end, mas quero desenvolver. Essa é a minha intenção inicial, e depois colocar o meu LMS/EAD Chamilo online.

Não entendi muito sobre o o Buycourses, até porquê nem achei ainda.
Mas vamos evoluir isso no Brasil.
Tornar o sistema bem robusto e gigante no Brasil.
danielsp
Newbie
 
Posts: 1
Joined: 21 Jun 2018, 17:05


Return to Portuguese

Who is online

Users browsing this forum: No registered users and 1 guest