I'm going through a strange problem, I'm integrating my site with PagSeguro
, I'm calculating the freight on my side and the values are correct according to a one-page conference that is in my hosting, but when sending to PagSeguro
the freight value from there is different from mine.
The requested parameters are all being filled in correctly and I am not understanding this difference.
I do not know how to go through what I am, so I'll try not to let myself down too much.
What I'm doing is this, Page Calculation.php
if(!isset($_SESSION)) {
session_start();
}
header("Content-Type: text/html; charset=ISO-8859-1",true);
require_once("Connections/conexao.php");
// validacao por banco de dados
function validar($conexao, $cep, $valor){
$c = (int)preg_replace("/\D+/", "", $cep);
$sql = "SELECT cep_inicial, cep_final, valor, status FROM frete_gratis WHERE status = 1";
$sel = mysql_query($sql);
while($row = mysql_fetch_array($sel)):
if ($c >= $row['cep_inicial'] && $c <= $row['cep_final'] && $row['valor'] < $valor) return true;
endwhile;
}
mysql_select_db($database_conexao, $conexao);
$query_cepOrigem = "SELECT cep_1, cep_2 FROM cep_origem";
$cepOrigem = mysql_query($query_cepOrigem, $conexao) or die(mysql_error());
$row_cepOrigem = mysql_fetch_assoc($cepOrigem);
$CEP_ORIGEM = $row_cepOrigem['cep_1']."-".$row_cepOrigem['cep_2'];
// CEP
if ( isset($_POST['cep1']) && isset($_POST['cep2']) ){
$cep1 = $_POST['cep1'];
$cep2 = $_POST['cep2'];
// CEP DE DESTINO
// não pode ser inteiro - retira zero do inicio
$CEP_DESTINO = $cep1."-".$cep2;
$_SESSION["cepS"] = $CEP_DESTINO;
}
// VALOR
if ( isset($_POST['SUBTotal']) ){
$VALOR = $_POST['SUBTotal'];
if ($VALOR > 10000) {
$VALOR = 10000;
}
$VALOR = str_replace(".", ",", $VALOR);
}
if ( isset($_POST['peso']) ){
$PESOGR = $_POST['peso'];
$PESOGR = $PESOGR / 1000;
//$iteracoes = 1;
if ($PESOGR > 30) {
//$iteracoes = ceil($PESOGR / 30);
$PESOGR = 30;
}
}
echo $VALOR; echo "<br>";
echo $PESOGR; echo "<br>";
echo $CEP_ORIGEM; echo "<br>";
echo $CEP_DESTINO;echo "<br>";
// CHAMADA DO ARQUIVO QUE CONTEM A CLASSE PgsFrete()
require_once('Frete.php');
// INSTANCIANDO A CLASSE
$frete = new PgsFrete;
// ZERANDO VALORES
$valorFrete = 0.0;
// CALCULANDO
$valorFrete = $frete->gerar($CEP_ORIGEM, $PESOGR, $VALOR, $CEP_DESTINO);
$vlrFreteSedex = str_replace(".","",$valorFrete["Sedex"]);
$vlrFretePac = str_replace(".","",$valorFrete["PAC"]);
// $valorFrete["Sedex"] = $valorFrete["Sedex"] - 4.60;
// $valorFrete["PAC"] = $valorFrete["PAC"] - 2;
if(is_array($valorFrete)) {
// frete gratis para tipo de ceps
$VALOR = str_replace(",", ".", $VALOR);
if (validar($pdo,$CEP_DESTINO,$VALOR) ){
echo '
<input type="radio" name="tipoEntrega" value="3" alt="0.00" rel="0.00" /> <strong>GRATIS (R$ 0,00)</strong><br/>
';
} else {
echo '
<input type="radio" name="tipoEntrega" value="2" alt="'.$vlrFreteSedex.'" rel="'.$valorFrete["Sedex"].'" /> <strong>SEDEX (R$ '.$valorFrete["Sedex"].')</strong><br/>
<input type="radio" name="tipoEntrega" value="1" alt="'.$vlrFretePac.'" rel="'.$valorFrete["PAC"].'" /> <strong>PAC (R$ '.$valorFrete["PAC"].')</strong><br/>
';
}
}
Shipping Page.php
class PgsFrete {
private $_use = 'curl';
private $_debug = false;
private $_methods = array('curl');
private $_result;
public function PgsFrete()
{
if ($this->debug()) {
echo "\nPgsFrete started!";
}
}
public function debug($debug=null)
{
if (null===$debug) {
return $this->_debug;
}
$this->_debug = (bool) $debug;
}
public function setUse($useMethod)
{
if ('string'!==gettype($useMethod)) {
throw new Exception('Method for setUse not allowed.'.
'Method passed: '.var_export($useMethod, true));
}
$useMethod = strtolower($useMethod);
if (!in_array($useMethod, $this->_methods)) {
throw new Exception('Method for setUse not allowed.'.
'Method passed: '.var_export($useMethod, true));
}
$this->_use = $useMethod;
if ($this->debug()) {
echo "\nMethod changed to ".strtoupper($useMethod);
}
}
public function getUse()
{
return $this->_use;
}
public function request($url, $post=null)
{
$method = $this->getUse();
if (in_array($method, $this->_methods)) {
$method_name = '_request'.ucWords($method);
if (!method_exists($this, $method_name)) {
throw new Exception("Method $method_name does not exists.");
}
if ($this->debug()) {
echo "\nTrying to get '$url' using ".strtoupper($method);
}
return call_user_func(array($this, $method_name), $url, $post);
} else {
throw new Exception('Method not seted.');
}
}
private function _requestCurl($url, $post=null)
{
$urlkey="URL:".md5("$url POST:$post");
if(isset($_SESSION[$urlkey])){
$this->_result = $_SESSION[$urlkey];
return;
}
$parse = parse_url($url);
$ch = curl_init();
if ('https'===$parse['scheme']) {
// Nao verificar certificado
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
curl_setopt($ch, CURLOPT_URL, $url); // Retornar o resultado
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Retornar o resultado
if ($post) {
curl_setopt($ch, CURLOPT_POST, true); // Ativa o modo POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Insere os POSTs
}
$result = curl_exec($ch);
curl_close($ch);
$this->_result = $result;
$_SESSION[$urlkey]=$result;
}
public function gerar($CepOrigem, $Peso, $Valor, $Destino)
{
$Peso = str_replace('.',',',$Peso);
$url = "https://pagseguro.uol.com.br/desenvolvedor/simulador_de_frete_calcular.jhtml?postalCodeFrom={$CepOrigem}&weight={$Peso}&value={$Valor}&postalCodeTo={$Destino}";
$this->request($url);
$result = explode('|',$this->_result);
$valores=array();
if($result[0]=='ok'){
$valores['Sedex']=$result[3];
$valores['PAC']=$result[4];
}else{
die($result[1]);
}
return $valores;
}
}
Sending to SecurePay:
if ($ TPFrete == 3) { weight = 0; $ paymentRequest-> addItem ($ cod_prod, $ prod_name, $ prod_d, $ vlr, $ weight); } else { $ paymentRequest-> addItem ($ cod_prod, $ prod_name, $ prod_d, $ vlr, $ weight, $ VLRFrete); }
Some pictures of the cart and console: