Luiz Ito Postado Junho 16, 2011 Denunciar Share Postado Junho 16, 2011 Olá, estou fazendo a interface do módulo de PagSeguro com envio PAC/Sedex e preciso de ajuda no código PHP.O programa pagseguro.php executa a função adicionar arrayinclude_once('pagseguro/pgs.php'); foreach ($order->products as $product) { $pgs->adicionar (array ( 'id' => (string) $product['id'], 'descricao' => $product['name'] . ' ' . $product['model'], 'quantidade' => $product['qty'], 'valor' => $product['price'], 'peso' => (int) number_format($product['weight'], 2, '', '') , 'frete' => (int) number_format($order->info['shipping_cost'], 2, '','' ) , ));e a função adicionar array está no include pgs.php function adicionar($item) { if ('array' !== gettype($item)) return $this->error("Item precisa ser um array."); if(isset($item[0]) && 'array' === gettype($item[0])){ foreach ($item as $elm) { if('array' === gettype($elm)) { $this->adicionar($elm); } } return $this; } $tipos=array( "id" => array(1,"string", '@\w@' ), "quantidade" => array(1,"string,integer", '@^\d+$@' ), "valor" => array(1,"double,string,integer", '@^\d*\.?\d+$@'), "descricao" => array(1,"string", '@\w@' ), "frete" => array(0,"string,integer", '@^\d+$@' ), "peso" => array(0,"string,integer", '@^\d+$@' ), ); foreach($tipos as $elm=>$valor){ list($obrigatorio,$validos,$regexp)=$valor; if(isset($item[$elm])){ if(strpos($validos,gettype($item[$elm])) === false || (gettype($item[$elm]) === "string" && !preg_match($regexp,$item[$elm]))){ return $this->error("Valor invalido passado para $elm."); } }elseif($obrigatorio){ return $this->error("O item adicionado precisa conter $elm"); } } $this->_itens[] = $item; return $this; }O valor do frete já está calculado no módulo dos Correios e está correto.O problema é o valor do frete adicionado n vezes ao total do pedido porque tem o foreach para cada item de produto adquirido.Preciso que o valor do frete 'frete' => (int) number_format($order->info['shipping_cost'], 2, '','' ) ,seja adicionado apenas uma única vez no pedido.Como fazer a codificação correta? Qual o array que contem o valor do frete após a execução do adicionar array? $pgs ?Grato pela ajuda. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Luiz Ito
Olá, estou fazendo a interface do módulo de PagSeguro com envio PAC/Sedex e preciso de ajuda no código PHP.
O programa pagseguro.php executa a função adicionar array
include_once('pagseguro/pgs.php');
foreach ($order->products as $product) {
$pgs->adicionar (array (
'id' => (string) $product['id'],
'descricao' => $product['name'] . ' ' . $product['model'],
'quantidade' => $product['qty'],
'valor' => $product['price'],
'peso' => (int) number_format($product['weight'], 2, '', '') ,
'frete' => (int) number_format($order->info['shipping_cost'], 2, '','' ) ,
));
e a função adicionar array está no include pgs.php
function adicionar($item) {
if ('array' !== gettype($item))
return $this->error("Item precisa ser um array.");
if(isset($item[0]) && 'array' === gettype($item[0])){
foreach ($item as $elm) {
if('array' === gettype($elm)) {
$this->adicionar($elm);
}
}
return $this;
}
$tipos=array(
"id" => array(1,"string", '@\w@' ),
"quantidade" => array(1,"string,integer", '@^\d+$@' ),
"valor" => array(1,"double,string,integer", '@^\d*\.?\d+$@'),
"descricao" => array(1,"string", '@\w@' ),
"frete" => array(0,"string,integer", '@^\d+$@' ),
"peso" => array(0,"string,integer", '@^\d+$@' ),
);
foreach($tipos as $elm=>$valor){
list($obrigatorio,$validos,$regexp)=$valor;
if(isset($item[$elm])){
if(strpos($validos,gettype($item[$elm])) === false ||
(gettype($item[$elm]) === "string" && !preg_match($regexp,$item[$elm]))){
return $this->error("Valor invalido passado para $elm.");
}
}elseif($obrigatorio){
return $this->error("O item adicionado precisa conter $elm");
}
}
$this->_itens[] = $item;
return $this;
}
O valor do frete já está calculado no módulo dos Correios e está correto.
O problema é o valor do frete adicionado n vezes ao total do pedido porque tem o foreach para cada item de produto adquirido.
Preciso que o valor do frete
'frete' => (int) number_format($order->info['shipping_cost'], 2, '','' ) ,
seja adicionado apenas uma única vez no pedido.
Como fazer a codificação correta? Qual o array que contem o valor do frete após a execução do adicionar array? $pgs ?
Grato pela ajuda.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.