Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bernardo.castro

[Resolvido] Pagseguro erro 150

Recommended Posts

Olá pessoal,

 

Estou migrando um site de Pagamento digital para Pagseguro, o site trabalha com grande quantidade de itens para um mesmo produto, que varia de 1 até mais de 10.000 (dez mil).

Exemplo: 15 mil tijolos tamanho 30x12x7 no valor de R$ 0.40 cada.

 

Mas parece que o Pagseguro tem uma limitação para apenas 999 quantidade de itens por produto.

 

Vejam o erro:

"Erro 150 - A QUANTIDADE do item 1 deve ser maior que 0 e não deve exceder o máximo permitido."

 

Algumas perguntas:

Alguém já teve algo parecido?

Tem solução?

Porque limitam isso?

 

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém já teve algo parecido? Sim eu estudei um caso desses;

Tem solução? Tenho, porem você terá de testar bastante e ver se não possui falhas...

Porque limitam isso? Eles devem ter seus motivos...

 

 

A solução verificar os itens do carrinho, verificar quem tem mais que 999, faço um loop criando outros pacotes com quantidades inferiores.

Seria algo similar a isso...

 

Na minha classe eu criei três parâmetros

 

protected $itemId = array(), $itemDescription = array(), $itemAmount = array(), $itemQuantity = array()

 

Criei um metodo para adcionar os itens, algo mais ou menos assim

 

public function item($itemId, $itemDescription, $itemAmount, $itemQuantity){
	//verifica se os dados passados nao sao arrays, para converter em array
	if(!is_array($itemId)){

		$itemId 				= array($itemId);
		$itemDescription		= array($itemDescription);
		$itemAmount 			= array($itemAmount);
		$itemQuantity 			= array($itemQuantity);
	}
	$this -> itemId 			= array_merge($this -> itemId, 			$itemId);
	$this -> itemDescription	= array_merge($this -> itemDescription, $itemDescription);
	$this -> itemAmount 		= array_merge($this -> itemAmount, 		$itemAmount);
	$this -> itemQuantity 		= array_merge($this -> itemQuantity, 	$itemQuantity);
}

 

Apos isso entrei em um caso similar ao seu, e adicionei mais um parâmetro no meu método, para ele verificar a quantidade dos itens, e aproveitei para formatar os outros campos, e a descrição já limitei para 100 caracteres ... ( meu formatString recebe 97 porque ele irá adcionar "..." que no total irá dar 100 caracteres )

$itemKey = $itemId;
	//verifica item por item para fazer o tratamento dos mesmos
	foreach ($itemKey as $key => $value){

		$itemAmount[$key] 		= $this -> filterAmount($itemAmount[$key]);
		$itemQuantity[$key] 	= $this -> formatString($itemQuantity[$key],'int');
		$itemDescription[$key]	= $this -> formatString($itemDescription[$key],'string',97);

		//verifica se o item tem mais que 999 e divide em outros itens
		if($itemQuantity[$key] > 999 && $this -> sliceItem === true){

			$quantity = $itemQuantity[$key];

			for ($i = 0; $quantity > 999; $i++){

				$quantity -= 999;
				$newItemId[] = $itemId[$key] . '___OPSTlouPGS__' . $i; //Other Product sliced to UOL PagSeguro;
				$newItemDescription[] = $itemDescription[$key];
				$newItemAmount[] = $itemAmount[$key];
				$newItemQuantity[] = 999;
			}
			$newItemId[] = $itemId[$key] . '___OPSTlouPGS__' . $i;
			$newItemDescription[] = $itemDescription[$key];
			$newItemAmount[] = $itemAmount[$key];
			$newItemQuantity[] = $quantity;
			$this -> item($newItemId, $newItemDescription, $newItemAmount, $newItemQuantity);
			unset($itemId[$key], $itemDescription[$key], $itemAmount[$key], $itemQuantity[$key]);
		}
	}

 

o método inteiro ficaria algo mais ou menos assim:

 

public function item($itemId, $itemDescription, $itemAmount, $itemQuantity){
	//verifica se os dados passados não são arrays, para converter em array
	if(!is_array($itemId)){

		$itemId 				= array($itemId);
		$itemDescription		= array($itemDescription);
		$itemAmount 			= array($itemAmount);
		$itemQuantity 			= array($itemQuantity);
	}
	$itemKey = $itemId;
	//verifica item por item para fazer o tratamento dos mesmos
	foreach ($itemKey as $key => $value){

		$itemAmount[$key] 		= $this -> filterAmount($itemAmount[$key]);
		$itemQuantity[$key] 	= $this -> formatString($itemQuantity[$key],'int');
		$itemDescription[$key]	= $this -> formatString($itemDescription[$key],'string',97);

		//verifica se o item tem mais que 999 e divide em outros itens
		if($itemQuantity[$key] > 999 && $this -> sliceItem === true){

			$quantity = $itemQuantity[$key];

			for ($i = 0; $quantity > 999; $i++){

				$quantity -= 999;
				$newItemId[] = $itemId[$key] . '___OPSTlouPGS__' . $i; //Other Product sliced to UOL PagSeguro;
				$newItemDescription[] = $itemDescription[$key];
				$newItemAmount[] = $itemAmount[$key];
				$newItemQuantity[] = 999;
			}
			$newItemId[] = $itemId[$key] . '___OPSTlouPGS__' . $i;
			$newItemDescription[] = $itemDescription[$key];
			$newItemAmount[] = $itemAmount[$key];
			$newItemQuantity[] = $quantity;
			$this -> item($newItemId, $newItemDescription, $newItemAmount, $newItemQuantity);
			unset($itemId[$key], $itemDescription[$key], $itemAmount[$key], $itemQuantity[$key]);
		}
	}
	$this -> itemId 			= array_merge($this -> itemId, 			$itemId);
	$this -> itemDescription	= array_merge($this -> itemDescription, $itemDescription);
	$this -> itemAmount 		= array_merge($this -> itemAmount, 		$itemAmount);
	$this -> itemQuantity 		= array_merge($this -> itemQuantity, 	$itemQuantity);
}

 

 

Isso é apenas um exemplo do que você pode fazer...Antes de implementar isso, verifique todas possíveis falhas, erros, e incompatibilidades no sistema, caso não entenda menos que eu de programação dê uma pesquisada antes sobre a linguagem, e o mais importante, tenha em mente que não é para copiar e colar o código, use apenas a logica e monte um que fique melhor a sua necessidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado @senartes pelo grande esclarecimento, tomara que seja útil para outros.

 

Grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.