SDK Não Oficial para integração a partir de aplicações PHP com as APIs da B2W Marketplace (Submarino, Shoptime, Americanas.com)
- PHP >= 5.4
- curl extension
- Composer Dependency Manager
Adicione o pacote submarino-sdk ao seu projeto utilizando composer:
composer require gpupo/submarino-sdk
Lista de comandos disponíveis:
./bin/main
Você pode verificar suas credenciais Cnova na linha de comando:
./bin/main credential
Este exemplo demonstra o uso simplificado a partir do Factory
:
use Gpupo\SubmarinoSdk\Factory;
$submarinoSdk = Factory::getInstance()->setup([
'token' => '7Ao82svbm#6',
'version' => 'sandbox',
]);
$manager = $submarinoSdk->factoryManager('product'));
$produtosCadastrados = $manager->fetch(); // Collection de Objetos Product
$produto = $manager->findById(9));
echo $product->getName();
Veja o formato de $data
em Resources/fixture/Products.json
$data = [];
$product = $submarinoSdk->createProduct($data);
foreach ($data['sku'] as $item) {
$sku = $submarinoSdk->createSku($item);
$product->getSku()->add($sku);
}
$manager->save($product);
$manager = $submarinoSdk->factoryManager('product'));
// Acesso a lista de produtos cadastrados:
$produtosCadastrados = $manager->fetch(); // Collection de Objetos Product
// Acesso a informações de um produto cadastrado e com identificador conhecido:
$produto = $manager->findById(9)); // Objeto Produto
echo $product->getName(); // Acesso ao nome do produto #9
// Criação de um produto:
$data = []; // Veja o formato de $data em Resources/fixture/Products.json
$product = $submarinoSdk->createProduct($data);
foreach ($data['sku'] as $item) {
$sku = $submarinoSdk->createSku($item);
$product->getSku()->add($sku);
}
$manager->save($product);
//Adicionando SKU ao produto:
$skuData = []; // Defina o valor deste array conforme o esquema disponível em Resources/
$novoSku = $submarinoSdk->createSku($skuData);
$product->getSku()->add($novoSku);
$manager->save($product);
$manager = $submarinoSdk->factoryManager('order'));
$orderList = $manager->fetch(); //Recebe uma coleção ``\Gpupo\SubmarinoSdk\Entity\Order\Order``
foreach ($orderList as $order) {
//Atualizando dados de ENVIO do pedido:
$order->getStatus()->setStatus('DELIVERED')
->getDelivered()->setDeliveredCustomerDate(date('Y-m-d H:i:s'))
->setTrackingProtocol('RE983737722BR')
->setEstimatedDelivery('2015-12-25 01:00:00');
$manager->saveStatus($order);
}
//Acessando informações de um pedido específico
$order = $manager->findById(339938882);
echo $order->getId(); //339938882
echo $order->getSiteId(); // 03-589-01
echo $order->getStore(); // SUBMARINO
echo $order->getStatus(); // PROCESSING
//Movendo pedido de situação na B2W:
$order->getStatus()->setStatus('PROCESSING');
$manager->saveStatus($order);
use Gpupo\Cache\CacheItem;
use Gpupo\Cache\CacheItemPool;
use Gpupo\SubmarinoSdk\Entity\Product\Factory;
$data = []; //Your SKU array!
$sku = Factory::createSku($data);
$pool = new CacheItemPool('Memcached');
$key = 'sku-foo';
$item = new CacheItem($key);
$item->set($sku, 60);
$pool->save($item);
// mude o mundo... e pense que está em uma nova execução, alguns minutos depois ...
$sku = Factory::createSku($data);
$previousSku = $pool->getItem($key)->get();
$sku->setPrevious($previousSku);
$sku->save();
MIT, see LICENSE.
git clone --depth=1 git@github.com:gpupo/submarino-sdk.git
cd submarino-sdk;
composer install;
Personalize a configuração do phpunit
:
cp phpunit.xml.dist phpunit.xml;
Insira sua Token de Sandbox em phpunit.xml
:
<!-- Customize your parameters ! -->
<php>
<const name="API_TOKEN" value=""/>
<const name="VERBOSE" value="false"/>
</php>
Rode os testes localmente:
$ phpunit
- Submarino-sdk Composer Package no packagist.org
- marketplace-bundle Composer Package - Integração deste pacote com Symfony2
- Outras SDKs para o Ecommerce do Brasil
A lista abaixo é gerada a partir da saída da execução dos testes unitários:
- Gerencia uri de recurso
- Acesso a lista de pedidos
- Acesso a lista de produtos
- Acesso a lista de skus
- Cada cliente possui endereco de entrega como objeto
- Cada cliente possui colecao de telefones
- Cada cliente possui objeto pessoa fisica
- Cada cliente possui objeto pessoa juridica
- Possui método
getPf()
para acessar Pf - Possui método
setPf()
que define Pf - Possui método
getPj()
para acessar Pj - Possui método
setPj()
que define Pj - Possui método
getTelephones()
para acessar Telephones - Possui método
setTelephones()
que define Telephones - Possui método
getDeliveryAddress()
para acessar DeliveryAddress - Possui método
setDeliveryAddress()
que define DeliveryAddress - Entidade é uma Coleção
- Cada cliente possui colecao de telefones
- Obtem lista pedidos
- Obtém a lista de pedidos recém aprovados e que esperam processamento
- Recupera informacoes de um pedido especifico
- Atualiza status de um pedido
- Atualiza dados de envio de um pedido
- Atualiza dados de entrega de um pedido
- Cada item de uma lista e um objeto
- Cada pedido possui objeto cliente
- Cada pedido possui objeto com dados de cobrança
- Cada pedido possui colecao de produtos
- Cada pedido possui colecao de metodos de pagamento
- Cada pedido possui objeto com dados de entrega
- Cada pedido possui objeto status
- Possui loja de origem
- Possui valor total do pedido
- Possui valor total do frete
- Possui valor total de desconto
- Possui valor total de juros
- Possui valor total do pedido descontado juros
- O total real contém produtos somado a frete menos o desconto
- O total real possui mesmo valor de total amount se não houver juros
- O total real contém total menos juros
- Possui método
setId()
que define Id - Possui método
getSiteId()
para acessar SiteId - Possui método
setSiteId()
que define SiteId - Possui método
getStore()
para acessar Store - Possui método
setStore()
que define Store - Possui método
getPurchaseDate()
para acessar PurchaseDate - Possui método
setPurchaseDate()
que define PurchaseDate - Possui método
getLastUpdate()
para acessar LastUpdate - Possui método
setLastUpdate()
que define LastUpdate - Possui método
getPurchaseTimestamp()
para acessar PurchaseTimestamp - Possui método
setPurchaseTimestamp()
que define PurchaseTimestamp - Possui método
getLastUpdateTimestamp()
para acessar LastUpdateTimestamp - Possui método
setLastUpdateTimestamp()
que define LastUpdateTimestamp - Possui método
getStatus()
para acessar Status - Possui método
setStatus()
que define Status - Possui método
getInvoiced()
para acessar Invoiced - Possui método
setInvoiced()
que define Invoiced - Possui método
getEstimatedDeliveryDate()
para acessar EstimatedDeliveryDate - Possui método
setEstimatedDeliveryDate()
que define EstimatedDeliveryDate - Possui método
getCustomer()
para acessar Customer - Possui método
setCustomer()
que define Customer - Possui método
getPayer()
para acessar Payer - Possui método
setPayer()
que define Payer - Possui método
getTotalAmount()
para acessar TotalAmount - Possui método
setTotalAmount()
que define TotalAmount - Possui método
getTotalFreight()
para acessar TotalFreight - Possui método
setTotalFreight()
que define TotalFreight - Possui método
getTotalDiscount()
para acessar TotalDiscount - Possui método
setTotalDiscount()
que define TotalDiscount - Possui método
getTotalInterest()
para acessar TotalInterest - Possui método
setTotalInterest()
que define TotalInterest - Possui método
getProducts()
para acessar Products - Possui método
setProducts()
que define Products - Possui método
getShipping()
para acessar Shipping - Possui método
setShipping()
que define Shipping - Possui método
getPaymentMethods()
para acessar PaymentMethods - Possui método
setPaymentMethods()
que define PaymentMethods - Entidade é uma Coleção
- Cada pagador possui endereco de cobrança como objeto
- Cada pagador possui colecao de telefones
- Cada pagador possui objeto pessoa fisica
- Cada pagador possui objeto pessoa juridica
- Cada pedido possui uma coleção de objetos payment method
- Possui método
getSequential()
para acessar Sequential - Possui método
setSequential()
que define Sequential - Possui método
getId()
para acessar Id - Possui método
setId()
que define Id - Possui método
getValue()
para acessar Value - Possui método
setValue()
que define Value - Entidade é uma Coleção
- Cada pedido possui uma coleção de objetos produto
- Possui método
getLink()
para acessar Link - Possui método
setLink()
que define Link - Possui método
getQuantity()
para acessar Quantity - Possui método
setQuantity()
que define Quantity - Possui método
getPrice()
para acessar Price - Possui método
setPrice()
que define Price - Possui método
getFreight()
para acessar Freight - Possui método
setFreight()
que define Freight - Possui método
getDiscount()
para acessar Discount - Possui método
setDiscount()
que define Discount - Entidade é uma Coleção
- Possui método
getShippingEstimateId()
para acessar ShippingEstimateId - Possui método
setShippingEstimateId()
que define ShippingEstimateId - Possui método
getShippingMethodId()
para acessar ShippingMethodId - Possui método
setShippingMethodId()
que define ShippingMethodId - Possui método
getShippingMethodName()
para acessar ShippingMethodName - Possui método
setShippingMethodName()
que define ShippingMethodName - Possui método
getCalculationType()
para acessar CalculationType - Possui método
setCalculationType()
que define CalculationType - Possui método
getShippingMethodDisplayName()
para acessar ShippingMethodDisplayName - Possui método
setShippingMethodDisplayName()
que define ShippingMethodDisplayName - Entidade é uma Coleção
- Cada status pode ser impresso como string
- Cada status possui objeto invoiced
- Cada status possui objeto shipped
- Cada status possui objeto shipment exception
- Cada status possui objeto delivered
- Cada status possui objeto unavailable
- Falha ao marcar como faturado sem possuir objeto invoiced valido
- Sucesso ao marcar como faturado informando objeto invoiced valido
- Falha ao marcar como remetido sem possuir objeto shipped valido
- Sucesso ao marcar como remetido informando objeto shipped valido
- Falha ao marcar como falha na entrega sem possuir objeto shipment exception valido
- Sucesso ao marcar como falha na entrega informando objeto shipment exception valido
- Falha ao marcar como entregue sem possuir objeto delivered valido
- Sucesso ao marcar como entregue informando objeto delivered valido
- Falha ao marcar como indisponivel sem possuir objeto unavailable valido
- Sucesso ao marcar como indisponivel informando objeto unavailable valido
- Obtem lista de produtos cadastrados
- Recupera informacoes de um produto especifico
- Gerencia update
- Possui propriedades e objetos
- Possui nbm formatado
- Possui preco formatado
- Possui uma colecao de skus
- Possui objeto manufacturer
- Entrega json
- Acesso a lista de skus cadastrados
- Acessa a informacoes de um sku
- Possui preço normal
- Possui preço com desconto
- Envia dados opcionais apenas se preenchidos
- Possui propriedade contendo url da imagem
- Sku possui objeto status
- Sku possui objeto stock
- Centraliza acesso a managers
- Centraliza criacao de objetos