Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »

How does it work ?

Basically

  1. Channel Advisor has a SKU record with lots of attributes
    1. One attribute is a Label (TAG) of the marketplaces it is live on - a single field with multiple comma delimited tabs
      1. Labels trigger rules to put the product live on the marketplace nominated > BDirect made these rules and included the TAGS to manage the multiple marketplaces.  no Label it is not live - label it is live.
    2. For each marketplace - there is attributes used for related prices - or the default is used
    3. The stock level available is shown on all marketplaces
      1. Distribution centres have stock levels - have two now (sydney and melbourne) - usually products are only in one warehouse so not a problem
      2. Amazon is an option but not used.
      3. Stock changes can be absolution or incremental etc.


This is the channel advisor API requirements

A typical integration https://developer.channeladvisor.com/a-typical-integration  Note in this image all deals are tracked in channel advisor....

Deals are turned on in a marketplace when a Flag of the marketplace is added to the SKU.

Channel advisor flows

Labels (eBay, Amazon Seller Central - AU, etc ) - trigger a rule (signing of a template) to put the product live - until inventory reaches qty of 1 (or date) . Different rules can be setup 

Listing can have multiple SKU's

  1. Templates > 

SKus have multiple prices - on attributes - these are updated and then push to the marketplaces.  Typically hold details for 9 days minimum.

Link to code details https://developer.channeladvisor.com/soap-api-documentation/code-samples/inventory-service-examples/synchinventoryitemlist-examples

API examples and code samples

https://developer.channeladvisor.com/soap-api-documentation/code-samples

SKU information

We need to

  1. Create new SKU's - Create SKU WPF
  2. Update information on SKU's
  3. Delete SKU's

https://developer.channeladvisor.com/soap-api-documentation/code-samples/inventory-service-examples/synchinventoryitemlist-examples


Request

Code to syn inventory itemSaaSplications Field

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://api.channeladvisor.com/webservices/">



   <soapenv:Header>



      <web:APICredentials>



         <web:DeveloperKey>?</web:DeveloperKey>

host company > Channel advisor API > developer key

         <web:Password>?</web:Password>

host company > Channel advisor API > password

      </web:APICredentials>

host company > Channel advisor API > APICredentials

   </soapenv:Header>



   <soapenv:Body>



      <web:SynchInventoryItemList>



         <web:accountID>?</web:accountID>

host company > Channel advisor API > AccountID

         <web:itemList>



            <web:InventoryItemSubmit>



               <web:Sku>?</web:Sku>

SKU

               <web:Title>?</web:Title>

SKU: Name

               <web:Subtitle>?</web:Subtitle>

SKU: subtitle field (new field default on SKU EBAY only MAX55)

               <web:ShortDescription>?</web:ShortDescription>

SKU: Short Description

               <web:Description>?</web:Description>

SKU: Description

               <web:Weight>?</web:Weight>

SKU: Shipping Carton Weight

               <web:SupplierCode>?</web:SupplierCode>

SKU: Supplier code

               <web:WarehouseLocation>?</web:WarehouseLocation>



               <web:TaxProductCode>?</web:TaxProductCode>

SKU: Price-GST

               <web:FlagStyle>?</web:FlagStyle>



               <web:FlagDescription>?</web:FlagDescription>



               <web:IsBlocked>?</web:IsBlocked>

SKU: Shopping Cart Status = Hidden

               <web:BlockComment>?</web:BlockComment>

"Hidden" if blocked

               <web:ASIN>?</web:ASIN>



               <web:ISBN>?</web:ISBN>



               <web:UPC>?</web:UPC>

SKU: Barcode (if UPC)

               <web:MPN>?</web:MPN>

SKU: SKU Code

               <web:EAN>?</web:EAN>

SKU: Barcode (if EAN)

               <web:Manufacturer>?</web:Manufacturer>



               <web:Brand>?</web:Brand>

SKU: Brand

               <web:Condition>?</web:Condition>

SKU: New

               <web:Warranty>?</web:Warranty>

SKY: Warrantee

               <web:ProductMargin>?</web:ProductMargin>

Deal: Buy it now price - Av cost - Freight ($)

               <web:SupplierPO>?</web:SupplierPO>



               <web:HarmonizedCode>?</web:HarmonizedCode>

SKU: HS Tariff code for international shipments (optional)

               <web:Height>?</web:Height>

SKU: Height

               <web:Length>?</web:Length>

SKU: Length

               <web:Width>?</web:Width>

SKU: Width

               <web:Classification>?</web:Classification>

SKU: Product Category

               <web:DistributionCenterList>



                  <web:DistributionCenterInfoSubmit>



                     <web:DistributionCenterCode>?</web:DistributionCenterCode>

Warehouse: ID

                     <web:Quantity>?</web:Quantity>

SKU: Available Quantity in warehouse

                     <web:QuantityUpdateType>?</web:QuantityUpdateType>

"Absolute quantity" including unshipped orders for CA

                     <web:WarehouseLocation>?</web:WarehouseLocation>



                     <web:ReceivedInInventory>?</web:ReceivedInInventory>



                     <web:ShippingRateList>



                        <web:ShippingRateInfo>



                           <web:DestinationZoneName>?</web:DestinationZoneName>

Shipping Zone ID

                           <web:CarrierCode>?</web:CarrierCode>

Carrier Code

                           <web:ClassCode>?</web:ClassCode>

SKU: Carrier Class Code "Standard"

                           <web:FirstItemRate>?</web:FirstItemRate>

SKU: Carrier $ per item

                           <web:AdditionalItemRate>?</web:AdditionalItemRate>

SKU: Carrier $ per additional item

                           <web:FirstItemHandlingRate>?</web:FirstItemHandlingRate>



                           <web:AdditionalItemHandlingRate>?</web:AdditionalItemHandlingRate>



                           <web:FreeShippingIfBuyItNow>?</web:FreeShippingIfBuyItNow>

Deal: Free shipping if buy it now flag ?

                           <web:FirstItemRateAttribute>?</web:FirstItemRateAttribute>



                           <web:FirstItemHandlingRateAttribute>?</web:FirstItemHandlingRateAttribute>



                           <web:AdditionalItemRateAttribute>?</web:AdditionalItemRateAttribute>



                           <web:AdditionalItemHandlingRateAttribute>?</web:AdditionalItemHandlingRateAttribute>



                        </web:ShippingRateInfo>



                     </web:ShippingRateList>



                  </web:DistributionCenterInfoSubmit>



               </web:DistributionCenterList>



               <web:PriceInfo>



                  <web:Cost>?</web:Cost>



                  <web:RetailPrice>?</web:RetailPrice>

SKU: RRP

                  <web:StartingPrice>?</web:StartingPrice>



                  <web:ReservePrice>?</web:ReservePrice>



                  <web:TakeItPrice>?</web:TakeItPrice>

Deal: Buy it now price

                  <web:SecondChanceOfferPrice>?</web:SecondChanceOfferPrice>



                  <web:StorePrice>?</web:StorePrice>



               </web:PriceInfo>



               <web:AttributeList>



                  <web:AttributeInfo>



                     <web:Name>?</web:Name>

SKU:Attribute name - used for by marketplace prices, multiple categories by marketplace,

                     <web:Value>?</web:Value>

SKU:Attribute value

                  </web:AttributeInfo>



               </web:AttributeList>



               <web:VariationInfo>



                  <web:IsInRelationship>?</web:IsInRelationship>

SKU: group (yes/no)

                  <web:RelationshipName>?</web:RelationshipName>

SKU: Group Name

                  <web:IsParent>?</web:IsParent>

SKU: Is Group SKU

                  <web:ParentSku>?</web:ParentSku>

SKU: Group SKU

               </web:VariationInfo>



               <web:StoreInfo>



                  <web:DisplayInStore>?</web:DisplayInStore>



                  <web:Title>?</web:Title>



                  <web:Description>?</web:Description>



                  <web:CategoryID>?</web:CategoryID>



               </web:StoreInfo>



               <web:ImageList>



                  <web:ImageInfoSubmit>



                     <web:PlacementName>?</web:PlacementName>

SKU: Image - Placement (eg itemimageURL1)

                     <web:FolderName>?</web:FolderName>

SKU: SKU

                     <web:FilenameOrUrl>?</web:FilenameOrUrl>

SKU:Image URL

                  </web:ImageInfoSubmit>



               </web:ImageList>



               <web:LabelList>



                  <web:string>?</web:string>

Marketplaces to be sold on - set values

               </web:LabelList>



               <web:MetaDescription>?</web:MetaDescription>

Set in system already

            </web:InventoryItemSubmit>



         </web:itemList>



      </web:SynchInventoryItemList>



   </soapenv:Body>



</soapenv:Envelope>               </web:StoreInfo>



Update Quantity Information using Absolute value

Update quantity information for all DC in a single request and set quantity to absolute value.  This will be a triggered request for a number of SKU's in a data grid.

https://developer.channeladvisor.com/working-with-products/quantity/update-quantity-choose-update-type-multi-dc-update

Get Order List

We need to:

  1. Get orders that need to be fulfilled (Export Orders) and we have not yet retrieved and mark the ones we have as exported already
  2. Update orders with a tracking number
  3. Ship Order, Cancel Order, Refund Order - all single order calls https://developer.channeladvisor.com/working-with-orders

https://developer.channeladvisor.com/soap-api-documentation/code-samples/orderservice-getorderlist

https://developer.channeladvisor.com/working-with-orders/retrieve-orders/common-order-retrieval-methods 

Request Using visual studio.net

RequestSaaSplications Field

using System;


using System.Collections.Generic;


using System.Text;




namespace WindowsApplication13


{


  public class OrderRetriever


  {


    public List<string> GetSkuList()


    {


      //


      // 1. For this sample to work you will need create a web reference in


      // your VS.Net project by pointing to this URL:


      // https://api.channeladvisor.com/ChannelAdvisorAPI/v6/InventoryService.asmx?wsdl


      // Accept the default reference name of com.channeladvisor.api.OrderService


      //


      // 2. You will most likely need to change the namespace above (WindowsApplication13) to match


      // your projects default namespace so that it can see the web reference.


      // 3. Update the code to use your DeveloperKey, password, and AccountKey.




      const string developerApiGuid = "MyDeveloperKey";


      const string password = "myPassword";


      const string sellerAccountGuid = "MyAccountKey";


      com.channeladvisor.api.OrderService orderService = new com.channeladvisor.api.OrderService();


      com.channeladvisor.api.APICredentials apiCredentials = new com.channeladvisor.api.APICredentials();


      apiCredentials.DeveloperKey = developerApiGuid;


      apiCredentials.Password = password;


      orderService.APICredentialsValue = apiCredentials;




      com.channeladvisor.api.OrderCriteria orderCriteria = new com.channeladvisor.api.OrderCriteria();


      // Only grab items that are marked has Shipped


      orderCriteria.ShippingStatusFilter = "Shipped";


      //Only grab orders created from Mar 17, 2013 to Mar 18, 2013


      orderCriteria.OrderCreationFilterBeginTimeGMT = new System.DateTime(2013, 3, 17);


      orderCriteria.OrderCreationFilterEndTimeGMT = new DateTime(2013, 3, 18);


      // Set other properties required by call


      orderCriteria.DetailLevel = "High";


      orderCriteria.PageSize = 50; // Show 50 orders per page


      orderCriteria.PageNumberFilter = 0;




      List<string> skuList = new List<string>();


      bool moreResults = true;




      // Call the API several times to retrieve a list of all matches


      while (moreResults)


      {


        orderCriteria.PageNumberFilter += 1; // Get the next page each time through the loop


        com.channeladvisor.api.APIResultOfArrayOfOrderResponseItem orderResponse = orderService.GetOrderList(sellerAccountGuid, orderCriteria);


        if (orderResponse.Status == com.channeladvisor.api.ResultStatus.Success)


        {


          com.channeladvisor.api.OrderResponseItem[] orderResponseList = orderResponse.ResultData;


          if (orderResponseList.Length == 0 || orderResponseList.Length < orderCriteria.PageSize)


          {


            moreResults = false;


          }


          //step through each order in our returned array


          foreach (com.channeladvisor.api.OrderResponseDetailHigh order in orderResponseList)


          {


            System.Diagnostics.Debug.WriteLine("OrderID = " + order.OrderID.ToString());


            //step through each item in this Order


            foreach (com.channeladvisor.api.OrderLineItemItem invoiceLine in order.ShoppingCart.LineItemSKUList)


            {


              System.Diagnostics.Debug.WriteLine("LineItemID = " + invoiceLine.LineItemID.ToString());


              // Grab a list of all SKUs from invoices on this page


              skuList.Add(invoiceLine.SKU);


            }




            //step through each Promo.


            foreach (com.channeladvisor.api.OrderLineItemPromo promo in order.ShoppingCart.LineItemPromoList)


            {


              System.Diagnostics.Debug.WriteLine(string.Format("Promo code of {0} had a value of {1}", promo.PromoCode, promo.UnitPrice));


            }




            //step through each ItemInvoice in this Order.  These are subtotal categories


            foreach (com.channeladvisor.api.OrderLineItemInvoice line in order.ShoppingCart.LineItemInvoiceList)


            {


              if (line.LineItemType == "Shipping")


              {


                System.Diagnostics.Debug.WriteLine(string.Format("Shipping charge of {0}",line.UnitPrice));


              }


              else if (line.LineItemType == "VATShipping")


              {


                System.Diagnostics.Debug.WriteLine(string.Format("VAT Shipping charge of {0}", line.UnitPrice));


              }


              else if (line.LineItemType == "SalesTax")


              {


                System.Diagnostics.Debug.WriteLine(string.Format("Sales Tax charge of {0}", line.UnitPrice));


              }


              else if (line.LineItemType == "ShippingInsurance")


              {


                System.Diagnostics.Debug.WriteLine(string.Format("Shipping Insurance charge of {0}", line.UnitPrice));


              }


              else


              {


                System.Diagnostics.Debug.WriteLine("Unexpected line type of " + line.LineItemType);


              }


            }


          }


        }


        else


        {


          int errorCode = orderResponse.MessageCode;


          string errorMessage = orderResponse.Message;


          System.Diagnostics.Debug.WriteLine(string.Format("An unexpected error occured. ErrorCode={0}, ErrorMessage={1}", errorCode, errorMessage));


        }


      }


      return skuList;


    }


  }


}


Python


from suds.client import Client


import logging


 


logging.basicConfig(level=logging.INFO)


logging.getLogger('suds.client').setLevel(logging.DEBUG)


 


# Specify Login Information


developer_key = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'


password = 'xxxxxxxx'


account_guid = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'


 


# Specify URLs


wsdl_url = 'https://api.channeladvisor.com/ChannelAdvisorAPI/v6/OrderService.asmx?WSDL'


service_url = 'https://api.channeladvisor.com/ChannelAdvisorAPI/v6/OrderService.asmx'


 


# Initialize client.


client = Client(wsdl_url, location = service_url)


 


login = client.factory.create('APICredentials')


login.DeveloperKey = developer_key


login.Password = password


client.set_options(soapheaders=login)


 


# Instantiate our GetOrderList Object


getOrderList = client.factory.create('GetOrderList')


getOrderList.orderCriteria.OrderCreationFilterBeginTimeGMT = '2000-01-01T00:00:00'


getOrderList.orderCriteria.OrderCreationFilterEndTimeGMT = '2012-09-05T00:00:00'


getOrderList.orderCriteria.StatusUpdateFilterBeginTimeGMT = None


getOrderList.orderCriteria.StatusUpdateFilterEndTimeGMT = None


getOrderList.orderCriteria.JoinDateFiltersWithOr = None


getOrderList.orderCriteria.DetailLevel = 'High'


getOrderList.orderCriteria.ExportState = None


getOrderList.orderCriteria.OrderIDList = None


getOrderList.orderCriteria.ClientOrderIdentifierList = None


getOrderList.orderCriteria.OrderStateFilter = 'Active'


getOrderList.orderCriteria.PaymentStatusFilter = 'Cleared'


getOrderList.orderCriteria.CheckoutStatusFilter = 'Completed'


getOrderList.orderCriteria.ShippingStatusFilter = 'Unshipped'


getOrderList.orderCriteria.RefundStatusFilter = None


getOrderList.orderCriteria.DistributionCenterCode = None


getOrderList.orderCriteria.PageSize = 20


getOrderList.orderCriteria.PageNumberFilter = 1


 


continueRequests = True


while continueRequests is True:


    print 'Page', getOrderList.orderCriteria.PageNumberFilter


    result = client.service.GetOrderList(account_guid, getOrderList.orderCriteria)


 


    ordersInResult = len(result.ResultData.OrderResponseItem)


    print '    Orders In Page:', ordersInResult


 


    for order in result.ResultData.OrderResponseItem:


        print '        ', order.OrderID




    if ordersInResult < 20:


        continueRequests = False


    else:


        getOrderList.orderCriteria.PageNumberFilter += 1


Result


SaaSplications field

<?xml version="1.0" encoding="UTF-8"?>


<SOAP-ENV:Envelope xmlns:tns="http://api.channeladvisor.com/webservices/" xmlns:ns0="http://api.channeladvisor.com/webservices/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://api.channeladvisor.com/datacontracts/orders" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">


   <SOAP-ENV:Header>


      <tns:APICredentials>


         <tns:DeveloperKey>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</tns:DeveloperKey>


         <tns:Password>xxxxxxxx</tns:Password>


      </tns:APICredentials>


   </SOAP-ENV:Header>


   <ns1:Body>


      <ns0:GetOrderList>


         <ns0:accountID>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</ns0:accountID>


         <ns0:orderCriteria>


            <ns2:OrderCreationFilterBeginTimeGMT>2000-01-01T00:00:00</ns2:OrderCreationFilterBeginTimeGMT>


            <ns2:OrderCreationFilterEndTimeGMT>2012-09-05T00:00:00</ns2:OrderCreationFilterEndTimeGMT>


            <ns2:StatusUpdateFilterBeginTimeGMT xsi:nil="true"/>


            <ns2:StatusUpdateFilterEndTimeGMT xsi:nil="true"/>


            <ns2:JoinDateFiltersWithOr xsi:nil="true"/>


            <ns2:DetailLevel>High</ns2:DetailLevel>


            <ns2:OrderStateFilter>Active</ns2:OrderStateFilter>


            <ns2:PaymentStatusFilter>Cleared</ns2:PaymentStatusFilter>


            <ns2:CheckoutStatusFilter>Completed</ns2:CheckoutStatusFilter>


            <ns2:ShippingStatusFilter>Unshipped</ns2:ShippingStatusFilter>


            <ns2:PageNumberFilter>1</ns2:PageNumberFilter>


            <ns2:PageSize>20</ns2:PageSize>


         </ns0:orderCriteria>


      </ns0:GetOrderList>


   </ns1:Body>


</SOAP-ENV:Envelope>



Create a new Fulfillment

Used to indicate shipping numbers AND mark as shipped at same time

May need to split an order into individual fulfillments

https://developer.channeladvisor.com/working-with-orders/fulfillments/create-a-new-fulfillment





  • No labels