A
<?php
// Conexão BD
include('../fncr-geral/coneccao-bd.php'); $bd = new Coneccao();
// Formatação de Valores
require_once('../fncr-geral/formatacao_valores.php');

$payment_id = $_GET['payment_id'];
if(!$payment_id) exit;

// PREPARAÇÃO PARA TESTES LOCAIS
include_once('../../../_defines/global.php');
pixReceived($payment_id);

// PAGAMENTO RECEBIDO
// *******************************************

// PIX, futuramente pode alterar para geral, não somente pix
function pixReceived($payment_id){

  // Verifica dados do pagamento
  $EXT_registro_id = $payment_id;
  // Retorna o pagamento já com validação de "pendente"
  $pgtoBD = paymentBD($EXT_registro_id);
  if(!$pgtoBD) exit;
var_dump("teste 1");
  $clube = subConta_dds($pgtoBD['FNCR_clube_id']);
  if(!$clube) exit;
var_dump("teste 2");
  include_once('../libraries/outros/Asaas.php');
  $asaas = new Asaas();
  $asaas->account_dds($clube);

  $payment = $asaas->paymentData($pgtoBD['EXT_registro_id']);
 var_dump($payment);
  if(!$payment) exit;

  // CONFIRMA O PAGAMENTO NO SANDBOX
  // FUNÇÃO APENAS LOCAL
  if($payment['status']!="RECEIVED"){
	  $response = $asaas->paymentConfirm($EXT_registro_id);
	  var_dump($response);
    if(!$response) exit;
  }
var_dump("teste 3");
  // Marca o registro do pagamento como concluído
  $dados_valores = paymentReceived($pgtoBD['id'], $pgtoBD, $payment, false);

  if($pgtoBD['ORIGEM']=="clube" && in_array($pgtoBD['ORIGEM_modulo'], ['cobranca', 'torneio', 'cash', 'bar'])){
    clubSystemRequest($clube['link_sistema'], 'payment/received/'.$pgtoBD['uuid']);
  }

}

// Registro do pagamento no BD
function paymentBD($EXT_registro_id){
  global $bd;
  $sql = $bd->getConexao()->prepare('
    SELECT
      p.*,
      CASE WHEN tx_clube.id is not null THEN tx_clube.valor_fixo ELSE tx_geral.valor_fixo END as taxa_valor_fixo,
      CASE WHEN tx_clube.id is not null THEN tx_clube.valor_percent ELSE tx_geral.valor_percent END as taxa_valor_percent
    FROM pgtos_ext_pagamentos p
      LEFT JOIN pwbank_taxas tx_geral ON tx_geral.id_pwbank_subconta = 0 AND tx_geral.ext_forma_pgto_id = p.FNCR_ext_forma_pgto
      LEFT JOIN pwbank_taxas tx_clube ON tx_clube.id_pwbank_subconta = p.FNCR_pw_subconta_id AND tx_clube.ext_forma_pgto_id = p.FNCR_ext_forma_pgto
    WHERE p.EXT_registro_id = :EXT_registro_id');
  $sql->bindValue(':EXT_registro_id', $EXT_registro_id, PDO::PARAM_STR);
  if($sql->execute()){$pgto = $sql->fetch(PDO::FETCH_ASSOC);}

  // Se ainda está aberto
  return $pgto;
  exit;
}

// Marca o pagamento como concluído
function paymentReceived($id, $pgtoBD, $payment, $fncr){
  global $bd;

  date_default_timezone_set("America/Sao_paulo");
  $bd->getConexao()->exec("set names utf8");
  $bd->getConexao()->exec('set time_zone = "'.date('P').'"');

  // Marca o pagamento como concluído
  $sql = $bd->getConexao()->prepare('UPDATE pgtos_ext_pagamentos SET finalizado = 1, finalizado_data_hora = NOW() WHERE id = :id');
  $sql->bindValue(':id', $id, PDO::PARAM_STR);
  if($sql->execute());

  $split_value = isset($payment['split'][0]->totalValue) ? $payment['split'][0]->totalValue : 0;

  // Calculos de valores (para registros)
  $servico_valor_bruto = $pgtoBD['valor']; // valor total do pagamento (sem qualquer desconto de taxas)
  $servico_valor_liquido = $payment['netValue']; // valor do pagamento (já descontado a taxa do serviço)
  $clube_valor_liquido = $servico_valor_liquido - $split_value; // valor disponivel ao clube (sem taxa de serviço e taxa do gameid)
  $servico_valor_taxa = $servico_valor_bruto - $servico_valor_liquido; // valor da taxa cobrada pelo serviço
  $clube_valor_taxa = $servico_valor_bruto - $clube_valor_liquido; // valor total descontado do clube

  if(!$fncr){
    // Registra o valor no extrato para o clube
    $sql = $bd->getConexao()->prepare('INSERT INTO pgtos_ext_extrato
    (uuid, FNCR_clube_id, FNCR_pw_conta_id, FNCR_pw_subconta_id, FNCR_ext_pgto_id, servico_valor_bruto, servico_valor_taxa, servico_valor_liquido, clube_valor_taxa, clube_valor_liquido, data_hora) VALUES
    (:uuid, :FNCR_clube_id, :FNCR_pw_conta_id, :FNCR_pw_subconta_id, :FNCR_ext_pgto_id, :servico_valor_bruto, :servico_valor_taxa, :servico_valor_liquido, :clube_valor_taxa, :clube_valor_liquido, NOW())');
    $sql->bindValue(':uuid', uuid(), PDO::PARAM_STR);
    $sql->bindValue(':FNCR_clube_id', $pgtoBD['FNCR_clube_id'], PDO::PARAM_STR);
    $sql->bindValue(':FNCR_pw_conta_id', $pgtoBD['FNCR_pw_conta_id'], PDO::PARAM_STR);
    $sql->bindValue(':FNCR_pw_subconta_id', $pgtoBD['FNCR_pw_subconta_id'], PDO::PARAM_STR);
    $sql->bindValue(':FNCR_ext_pgto_id', $pgtoBD['id'], PDO::PARAM_STR);
    $sql->bindValue(':servico_valor_bruto', $servico_valor_bruto, PDO::PARAM_STR);
    $sql->bindValue(':servico_valor_taxa', $servico_valor_taxa, PDO::PARAM_STR);
    $sql->bindValue(':servico_valor_liquido', $servico_valor_liquido, PDO::PARAM_STR);
    $sql->bindValue(':clube_valor_taxa', $clube_valor_taxa, PDO::PARAM_STR);
    $sql->bindValue(':clube_valor_liquido', $clube_valor_liquido, PDO::PARAM_STR);
    if($sql->execute());
  }

  return [
    'servico_valor_bruto' => $servico_valor_bruto,
    'servico_valor_liquido' => $servico_valor_liquido,
    'clube_valor_liquido' => $clube_valor_liquido,
    'servico_valor_taxa' => $servico_valor_taxa,
    'clube_valor_taxa' => $clube_valor_taxa,
    'gid_liquido' => $split_value,
  ];
}

// REALIZA AÇÕES EM SISTEMAS/APIS
// *******************************************
// *******************************************

// CLUBE - REQUISIÇÃO AO SISTEMA
function clubSystemRequest($url_link_sistema, $url_ext){
  // ACCESS TOKEN PW
  include_once dirname(__FILE__).'/../../_vendors/google-authenticator/FixedBitNotation.php';
  include_once dirname(__FILE__).'/../../_vendors/google-authenticator/GoogleAuthenticatorInterface.php';
  include_once dirname(__FILE__).'/../../_vendors/google-authenticator/GoogleAuthenticator.php';
  include_once dirname(__FILE__).'/../../_vendors/google-authenticator/GoogleQrUrl.php';
  $auth = new \Google\Authenticator\GoogleAuthenticator();

  $timeSlice = floor(time()/30); // Período atual de 30 segundos
  $code = $auth->getCode(strtoupper(GLOBAL_KEY_CRYPTO), $timeSlice);

  require_once('../libraries/outros/Crypto.php');
  $crypto = new Crypto();
  $access_token_pw = $crypto->encode(json_encode(array("code_auth" => $code, "system" => 'fncr')));

  // REQUISIÇÃO
  $ch = curl_init();
  //curl_setopt($ch, CURLOPT_URL, $url_link_sistema.'.v2.pokerweb.com.br/api/pgto_ext/'.$url_ext); // PRODUÇÃO
  //curl_setopt($ch, CURLOPT_URL, 'http://192.168.100.44/st_code/api/pgto_ext/'.$url_ext); // LOCAL IP
  curl_setopt($ch, CURLOPT_URL, 'https://'.$url_link_sistema.'.b3.pokerweb.dev.br/api/pgto_ext/'.$url_ext); // LOCAL URL
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Access_token_PW: ".$access_token_pw,
    "accept: application/json",
    "content-type: application/json",
  ]);
  $response = curl_exec($ch);
  echoPre($response);
  $err = curl_error($ch);
  curl_close($ch);
}


// FUNÇÕES AUXILIARES
// *******************************************

// SUBCONTA do clube
function subConta_dds($id_clube){
  global $bd;

  // Dados da subconta
  $sql = $bd->getConexao()->prepare('
  SELECT
    sc.*,
    cc.link_sistema
  FROM pwbank_subcontas sc
    LEFT JOIN pwbank_contas bc ON bc.id = sc.id_conta
    LEFT JOIN clubes_configuracao cc ON cc.id_clube = :id_clube
  WHERE sc.ext_servico_id = 2 AND sc.tipo = "clube" AND sc.tipo_id = :id_clube');
  $sql->bindValue(':id_clube', $id_clube, PDO::PARAM_STR);
  if($sql->execute()){$subconta = $sql->fetch(PDO::FETCH_ASSOC);}

  return $subconta;
}
?>
