Dúvida integração Carrinho de Compras e Checkout Cielo
Boa madrugada a todos. Como postei a pouco tempo, estou desenvolvendo o site do meu selo fonográfico com o framework CodeIgniter.
E nele eu venderei cds físicos e digitais com a classe Cart.
Me inscrevi na cielo essa semana e estou lendo assiduamente o Manual do Desenvolvedor. Nele não contém algumas dúvidas que não consegui solução.
A parte do carrinho já está funcionando OK, e as informações que vão para Cielo que não sei, pois o formulário que estou enviando não vai para página da cielo.
Eu uso uma função e nela contém o CURL todo.
Segue o código:
function enviar_requisicao($order){ $curl = curl_init(). curl_setopt($curl, CURLOPT_URL, 'https://cieloecommerce.cielo.com.br/api/public/v1/orders'). curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false). curl_setopt($curl, CURLOPT_RETURNTRANSFER, true). curl_setopt($curl, CURLOPT_POST, true). curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($order)). curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'MerchantId: (substitui para não deixar a mostra)', 'Content-Type: application/json' )). $response = curl_exec($curl). if($response) { return $response. } else { return curl_error($curl). } curl_close($curl). $json = json_decode($response). }
} Eu tenho duas questões que ficaria agradecido se alguém pudesse me dar uma luz.Eu ví que no manual, o formulário Post é tratado como Cart_1_opção.
Pensei logo em fazer um Array e adicionar vários inputs com as informações de cada um dos produtos, porém quando fiz isso, não recebi o email de erros, que se recebe sempre que uma solicitação no site da cielo fracassa, por falta de informações no formulário entre outros.
O problema é que tem campos específicos para cada produto, o digital se trata como cart_1_type onde 1 é produto físico, 2 é produto digital, e 3 é serviços. E é aí que começa os problemas.
Se uma pessoa adiciona um album digital, ou faixa do album digital no carrinho e decide também comprar um outro album físico, como eu teria que mandar essas informações para a Cielo, sendo que o primeiro produto(digital) não teria que calcular o frete nem nada, e no segundo produto(físico) teria que calcular o frete e etc. Segue o controller que faz o Checkout e não retorna nemhuma ação, apenas a página em branco do meu site:
(Esse é API REST, não sei direito como proceder a esse método e gostaria que alguém pudesse me dar uma luz, se estou fazendo certo ou errado, se a lógica é errada e por ai vai)
public function checkout(){ $transaction_id = md5(date("Y-m-d").date("H:i:s")). $valor_total = $this->cart->total(). $order = new stdClass(). $order->OrderNumber = $transaction_id. $order->SoftDescriptor = '----'. $order->Cart = new stdClass(). $order->Cart->Discount = new stdClass(). $order->Cart->Discount->Type = 'Percent'. $order->Cart->Discount->Value = 10. $order->Cart->Items = array(). foreach($this->cart->contents() as $items){ $order->Cart->Items[0] = new stdClass(). $order->Cart->Items[0]->Name = $items['name']. $order->Cart->Items[0]->Description = 'aaaa'. $order->Cart->Items[0]->UnitPrice = $items['price']. $order->Cart->Items[0]->Quantity = $items['qty']. $order->Cart->Items[0]->Type = $items['type']. $order->Cart->Items[0]->Sku = $items['rowid']. $order->Cart->Items[0]->Weight = $items['weight']. if($items['type'] == 1){ $order->Shipping = new stdClass(). $order->Shipping->Type = 'Correios'. $order->Shipping->SourceZipCode = '--------'. $order->Shipping->TargetZipCode = $this->session->userdata('user_cep'). $order->Shipping->Address = new stdClass(). $order->Shipping->Address->Street = $this->session->userdata('user_adress'). $order->Shipping->Address->Number = $this->session->userdata('user_adress_number'). $order->Shipping->Address->Complement = $this->session->userdata('user_adress_comp'). $order->Shipping->Address->District = $this->session->userdata('user_adress_district'). $order->Shipping->Address->City = $this->session->userdata('user_city'). $order->Shipping->Address->State = $this->session->userdata('user_State'). } if($items['type'] == 2){ $order->Shipping = new stdClass(). $order->Shipping->Type = 'WithoutShipping'. } } $order->Payment = new stdClass(). $order->Payment->BoletoDiscount = 0. $order->Payment->DebitDiscount = 10. $order->Customer = new stdClass(). $order->Customer->Identity = $this->session->userdata('user_cpf'). $order->Customer->FullName = $this->session->userdata('user_name'). $order->Customer->Email = $this->session->userdata('user_email'). $order->Options = new stdClass(). $order->Options->AntifraudEnabled = false. $response = enviar_requisicao($order). Eu preciso informar cada item, ou é necessário ser um "pacote" tipo o que era na Buy Page Cielo? Pois na Buy Page se fosse mais de um produto, o valor teria que ser o valor total e não valor unitário de produtos. No manual do desenvolvedor eles dão exemplo de um formulário que vou postar a seguir, porém parece que é somente para um produto. Exemplo de consumo via PostSegue abaixo um exemplo de consumo via post, e como a tela se apresentaria para este caso.
<form action="https://cieloecommerce.cielo.com.br/Transactional/Order/Index" method="post">
<input type="hidden" name="merchant_id" value="C89FDFBB-DBE2-4E77-806A-6D75CD397DAC" />
<input type="hidden" name="order_number" value="0000000001" />
<input type="hidden" name="shipping_type" value="2" />
<input type="hidden" name="Shipping_Zipcode" value="01452002" />
<input type="hidden" name="cart_1_name" value="Camiseta Branca" />
<input type="hidden" name="cart_1_unitprice" value="10000" />
<input type="hidden" name="cart_1_quantity" value="1" />
<input type="hidden" name="cart_1_weight" value="100" />
<input type="hidden" name="cart_1_zipcode" value="20020080" />
<input type="hidden" name="cart_1_type" value="1" />
<input type="hidden" name="shipping_1_name" value="Servico da Loja" />
<input type="hidden" name="shipping_1_price" value="500" />
<input type="hidden" name="shipping_2_name" value="Motoboy" />
<input type="hidden" name="shipping_2_price" value="800" />
<input type="hidden" name="Shipping_Address_Name" value="Av. Brigadeiro Faria Lima" />
<input type="hidden" name="Shipping_Address_Number" value="1461" />
<input type="hidden" name="Shipping_Address_Complement" value="" />
<input type="hidden" name="Shipping_Address_District" value="Jd. Paulista" />
<input type="hidden" name="Shipping_Address_City" value="Sao Paulo" />
<input type="hidden" name="Shipping_Address_State" value="SP" />
<input type="hidden" name="Customer_Name" value="João da Silva" />
<input type="hidden" name="Customer_Email" value="jsilva@braspag.com.br" />
<input type="hidden" name="Customer_Identity" value="26636640650" />
<input type="hidden" name="Customer_Phone" value="1122223333" />
<input type="submit" value="Comprar" />
</form> Nesse método consegui "conexão" com a Cielo, porém meu perfil ainda não estava ativo e recebi um email, com tudo certo e etc. Porém não consegui mandar mais que um produto no carrinho e ficou tipo a solução Buy Page Cielo. Desde já agradeço e peço desculpas por qualquer equivoco.Discussão (6)
Carregando comentários...