bacen / pix-dict-api

API do DICT - Diretório de Identificadores de Contas Transacionais
416 stars 59 forks source link

Cálculo Cids em PHP funcionando #51

Open emersonrf227 opened 1 year ago

emersonrf227 commented 1 year ago
<?php

namespace App\sts\Controllers;

if (!defined('URL')) {
  header("Location: /");
  exit();
}

class Reconciliacao
{

  private $Dados;

  function stringGuidAsBinaryGuid($stringGuid)
  {
    $binary = pack("H*", str_replace('-', '', $stringGuid));
    return $binary;
  }

  function binaryGuidAsStringGuid($binaryGuid)
  {
    $string = unpack("H*", $binaryGuid);
    $string = preg_replace(
      "/([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{12})/",
      "$1-$2-$3-$4-$5",
      $string["1"]
    );
    return $string;
  }

  public function calc()
  {

    //Dados necessários para pegar o montar o CID 
    $type = "EMAIL";
    $email = "client0454@iliketechnology.com.br";
    $ownerTaxIdNumber = "51857504488";
    $ownerName = "Andreia Oliveira Almeida";
    $ownerTradeName = "";
    $participant = "yourNumber";
    $branch = "0002";
    $accountNumber = "170888053967579";
    $accountType = "CACC";
    $entryAttributes =  "$type&$email&$ownerTaxIdNumber&$ownerName&$ownerTradeName&$participant&$branch&$accountNumber&$accountType";
    $requestIdBytes = "670032e7-e4b6-4f60-8a30-bdcd30ca971f";
    $bin = $this->stringGuidAsBinaryGuid($requestIdBytes);
    $cidBytes = hash_hmac('sha256', $entryAttributes, $bin, false );
    // variavel cidBytes contém o resultado do cid; 

    // o exemplo abaixo mostra como montar o calculo de cid`s com bitwise em Xor os cid's abaixo temos     
    // exemplos de cid's forncecidos na doc documentação do banco central onde o objetivo foi chegar no resultado do exemplo da doc
    // https://gokeitecnologia.com.br/api-docs/SPI/DICT/#section/Calculo-de-CID
    // na documentação o resultado esperado tem que ser igual a 996fc1dd3b6b14bcf0c9fe8320eb66d7e2a3fd874ccf767b2e939641b1ea8eaf

    $cidP1 = $this->stringGuidAsBinaryGuid('28c06eb41c4dc9c3ae114831efcac7446c8747777fca8b145ecd31ff8480ae88');
    $cidP2 = $this->stringGuidAsBinaryGuid('4d4abb9168114e349672b934d16ed201a919cb49e28b7f66a240e62c92ee007f');
    $cidP3 = $this->stringGuidAsBinaryGuid('fce514f84f37934bc8aa0f861e4f7392273d71b9d18e8209d21e4192a7842058');
    $x = $cidP1 ^ $cidP2 ^ $cidP3;
    echo str_replace("-", "", $this->binaryGuidAsStringGuid($x));

  }
}