The Honey's Place API is implemented over standard HTTP requests. This allows Honey's Place to integrate with just about any application that can connect to the web.
The two files are identical, and updated at the same time, only differing in format. Neither file is meant to be viewed in a browser, the developer should use a tool like cURL or Wget to download the feed.
Should you decide to load the Tab Delimited file into Microsoft Excel, you should use the import tool, and make sure you are importing it as a TAB DELIMITED file.
The image filenames are referenced in the feeds, the way it works is if the image has no path information, the URL for the image is:
http://ws.honeysplace.com/pics/{filename}
If there is path information, it should be appended to the following URL:
http://ws.honeysplace.com/{filename}
The reason for the 2 different URL's is because we have several sources to get the most, and best possible images.
It is HIGHLY RECOMMENDED that you download the products data file you are using at least once per day and update the inventory on your site!
The Order Submission API call is used to submit an order to Honey's Place.
The "packingslip_name" field is the name of the packing slip that you have created in My Account -> Packing Slips that you wish to use for this order.
You should refer to Appendix B to understand what the API will return using this call.
Example:
<?xml version="1.0" encoding="iso-8859-1"?> <HPEnvelope> <account>01234</account> <password>abc123</password> <order> <reference>Your Order reference number</reference> <shipby>See Appendix A</shipby> <date>05/16/11</date> <items> <item> <sku>PD1234-56</sku> <qty>1</qty> </item> <item> <sku>SE-01234-56-7</sku> <qty>1</qty> </item> </items> <last>Smith</last> <first>John</first> <address1>123 Anywhere St.</address1> <address2>Apt 23B</address2> <city>Smithtown</city> <state>NY</state> <zip>12345</zip> <country>US</country> <phone>(123) 555-1212</phone> <emailaddress>customer@location.com</emailaddress> <instructions>Special instructions provided by customer for order.</instructions> <packingslip_name>valentines</packingslip_name> </order> </HPEnvelope>
Please note that if you submit an order with the "reference" field (your order number) that starts with the letters "TEST" (case insensitive), the order will NOT be processed, it will be marked as shipped with a tracking # of "123456789".
The Order Status API call is used to get the status of an order. To get the status of a previously submitted order the following XML should be submitted:
Example:
<?xml version="1.0" encoding="iso-8859-1"?> <HPEnvelope> <account>01234</account> <password>PaSsWoRd</password> <orderstatus>Order reference number</orderstatus> </HPEnvelope>
If the order has shipped, the API will return:
<?xml version="1.0" encoding="iso-8859-1"?>
<HPEnvelope>
<reference>Order reference number</reference>
<salesinvoice>Honey's Invoice # * See Note Below</salesinvoice>
<salesorder>Honey's Sales Order #</salesorder>
<orderdate>Date Ordered</orderdate>
<shipagent>USPS, UPS, for example</shipagent>
<shipservice>Priority, for example</shipservice>
<freightcost>Shipping Cost</freightcost>
<trackingnumber1>First Tracking Number</trackingnumber1>
<trackingnumber2>If applicable, second tracking number</trackingnumber2>
<trackingnumber3>If applicable, third tracking number</trackingnumber3>
<trackingnumber4>If applicable, fourth tracking number</trackingnumber4>
<warehousenotes>If applicable, warehouse notes about this order</warehousenotes>
<status>Shipped</status>
</HPEnvelope>
If the order has not yet shipped, the API will return:
<?xml version="1.0" encoding="iso-8859-1"?> <HPEnvelope> <reference>Order reference number</reference> <orderdate>Date Ordered</orderdate> <cancelled>If order was cancelled, this field will be a "Yes"</cancelled> <status>Not Yet Shipped</status> </HPEnvelope>
* Invoice Numbers may not be available initially with the tracking numbers
Tracking numbers and shipping costs are provided as soon as the order closes (near real time) as a conviencence to your customer to notify them that their order has shipped.
In most cases, the order has not yet been invoiced in our system, which happens in the evening, PST. We highly recommend that if the Honey's Place Invoice Number is important to your accounting software or department,
that you set your system to poll the next morning for all orders you have no sales invoice for so that you can populate your database with the updated information.
The Stock Check API call is used to determine if a product (or products) are currently in stock.
A common use for this would be to do a check just prior to a customer checking out to make sure the products they are purchasing are indeed available.
There is a limit of 25 items that can be checked in a single call.
Example:
<?xml version="1.0" encoding="UTF-8"?> <HPEnvelope> <account>01234</account> <password>PaSsWoRd</password> <stockcheck> <sku>abc123</sku> <sku>def456</sku> <sku>ghi789</sku> </stockcheck> </HPEnvelope>
What you will get returned to you is the number of items we have in stock at last check, encapsulated in XML.
Example:
<?xml version="1.0" encoding="iso-8859-1"?> <HPEnvelope> <stock> <item> <sku>abc123</sku> <qty>17</qty> </item> <item> <sku>def456</sku> <qty>34</qty> </item> <item> <sku>ghi789</sku> <qty>2</qty> </item> </stock> </HPEnvelope>
Carrier | Service | Old Honey's Text | API Code |
---|---|---|---|
FedEx | First Overnight | first overnight | F001 |
FedEx | Priority Overnight | priority | F002 |
FedEx | Standard Overnight | standard overnight | F003 |
FedEx | 2 Day Air | 2day | F004 |
FedEx | Express Saver | express saver | F005 |
FedEx | Ground (USA, Canada, Mexico) | ground service | F006 |
FedEx | Ground Home Delivery | home delivery | F007 |
FedEx | International Priority | priority intl | F008 |
FedEx | International Economy | economy intl | F009 |
FedEx | SmartPost | smartpost | F010 |
USPS | Express Mail (Overnight) | express | P001 |
USPS | Priority Mail | priority | P002 |
USPS | First Class (< 13oz) | first | P003 |
USPS | International Express Mail | express intl | P005 |
USPS | International Priority Mail | priority intl | P006 |
USPS | International First Class | first intl | P007 |
USPS | Priority Flat Rate | priority/flat rate | P008 |
UPS | Next Day Air | next day air | U001 |
UPS | 2nd Day Air | 2nd day air | U002 |
UPS | 3 Day Select | 3 day select | U003 |
UPS | Ground | ground | U004 |
UPS | Standard (Canada) | standard | U005 |
Honeys | Customer Pickup | pickup | PICKUP |
Cheapest | Best Rate | rateshop | RTSHOP |
When an order is transmitted to Honey's Place, we will respond with some transactional information for you to be able to complete the processing on your end. If the order is accepted without any error, you will get back a "code 100" from us. This means there was no problem at all with your order, and you will be able to get an order status at a future time.
Example:
<?xml version="1.0" encoding="iso-8859-1"?> <HPEnvelope> <reference>dropshippers reference number</reference> <code>100</code> <details>Order Accepted for processing</details> </HPEnvelope>
If you submitted an invalid 2 letter state code for "Nebraska", you would get back an error such as the following:
Example:
<?xml version="1.0" encoding="iso-8859-1"?> <HPEnvelope> <reference>dropshippers reference number</reference> <code>804</code> <details>State is required.</details> </HPEnvelope>
List of Codes and Details:
<code>999</code> <details>An invalid username / password has been submitted. Please contact Honey's Place</details> <code>800</code> <details>First Name is required.</details> <code>801</code> <details>Last Name is required.</details> <code>802</code> <details>Address1 is required.</details> <code>803</code> <details>City is required.</details> <code>804</code> <details>State is required.</details> <code>805</code> <details>Zip Code is required.</details> <code>806</code> <details>Zip Code is invalid.</details> <code>807</code> <details>Country is invalid (should be 2 characters.) Required.</details> <code>808</code> <details>E-Mail is invalid.</details> <code>809</code> <details>State must be only 2 characters.</details> <code>700</code> <details>Reference number already used.</details> <code>701</code> <details>Reference number is required.</details> <code>600</code> <details>Invalid Shipping Code.</details> <code>500</code> <details>One or more of the submitted products have been discontinued by the manufacturer.</details> <error>SKU: ABC123-01</error> <code>501</code> <details>One or more of the submitted products do not exist.</details> <error>SKU: ABC123-01</error> <code>400</code> <details>Duplicate product within same order. Please combine SKU's and QTY.</details> <code>300</code> <details>You are checking status on an order you have not yet submitted</details> <code>0</code> <details>Unknown Error. Please contact Honey's Place.</details> <code>100</code> <details>Order accepted for processing.</details>
Example PHP code:
Submit your XML to https://www.honeysplace.com/ws/ with the data encapsulated in the query parameter "xmldata".
<?php $url = "https://www.honeysplace.com/ws/"; $post_string = '<?xml version="1.0" encoding="UTF-8"?> <HPEnvelope> <account>01234</account> <password>PaSsWoRd</password> <stockcheck> <sku>SE1101202</sku> </stockcheck> </HPEnvelope>'; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 4); curl_setopt ($ch, CURLOPT_POST, true); curl_setopt ($ch, CURLOPT_POSTFIELDS, "xmldata=".$post_string); $data = curl_exec($ch); $info = curl_getinfo($ch); if ($data === false || $info['http_code'] != 200) { $data = "No cURL data returned for $url [". $info['http_code']. "]"; if (curl_error($ch)) { $data .= "\n". curl_error($ch); } echo $data; exit; } header("Content-Type: text/xml; charset=utf-8"); echo $data; ?>
Second PHP Example using the Guzzle HTTP client
<?php use GuzzleHttp\Client; use GuzzleHttp\Psr7; use GuzzleHttp\Exception\RequestException; $xml = '<?xml version="1.0" encoding="UTF-8"?> <HPEnvelope> <account>ACCOUNT</account> <password>PASSWORD</password> <stockcheck> <sku>SE1101202</sku> </stockcheck> </HPEnvelope>'; $client = new Client(); try { $response = $client->request('GET', 'https://www.honeysplace.com/ws', [ 'query' => ['xmldata' => $xml] ]); } catch (RequestException $e) { echo Psr7\str($e->getRequest()); if ($e->hasResponse()) { echo Psr7\str($e->getResponse()); } } $body = $response->getBody(); var_dump($body->getContents()); ?>
Example Perl code:
#!/usr/bin/perl use LWP::UserAgent; use HTTP::Request::Common; my $userAgent = LWP::UserAgent->new(agent => ''); $XML = '<?xml version="1.0" encoding="UTF-8"?> <HPEnvelope> <account>01234</account> <Password>PaSsWoRd</Password> <order> <reference>5573894</reference> <shipby>P002</shipby> <last>Van Riper</last> <first>Erik</first> <address1>123 Anywhere Street</address1> <address2>Apartment 123</address2> <city>Anytown</city> <state>PA</state> <zip>99999-0486</zip> <country>US</country> <phone>2345671233</phone> <emailaddress>user@place.com</emailaddress> <items> <item> <sku>JEL-PI</sku> <qty>1</qty> </item> </items> </order> </HPEnvelope>'; my $response = $userAgent->post('https://www.honeysplace.com/ws/', Content_Type => 'multipart/form-data', Content => [xmldata => $XML]); $resp = $response->content; print $resp . "\n";
Example PHP code to parse the large (old) XML feed:
<?php ini_set("memory_limit","128M"); // Set to where you need it $file = "honeysinventoryv2_0.xml"; if(!file_exists($file)) { die("Fatal Error: Cannot open " . $file); } $xml= simplexml_load_file($file); foreach($xml->Item as $item) { $stats = compareProducts($item); } //echo "Peak Memory Usage: " . memory_get_peak_usage(true) . " bytes\n"; exit; function compareProducts($item) { $sku = $item->attributes()->SKU; // Get the sku $qty = $item->attributes()->Quantity_On_Hand; // Get the Honey's QTY // ... get all the fields you are interested in // Do work here // If you have this product in your DB, then update it. // If you do not have the product in your DB, then add it. // Printing for example purposes. print "$sku: $qty\n"; } /* Fields in use as of 10/1/2013 SKU UPC Released_Date Cat_1 Cat_1_1 Cat_1_2 Cat_2 Cat_2_1 Cat_2_2 Cat_3 Cat_3_1 Cat_3_2 Cat_4 Cat_4_1 Cat_4_2 Product_Name Unit_Price Gross_Weight Quantity_On_Hand Discontinued Manufacturer_Name Last_Date_Modifed Country_Made_In Spanish_Item Realistic Materials Size_Length Size_Width Size_Circumference Power_Source_Qty_AA Power_Source_Qty_AAA Power_Source_Qty_C Power_Source_Qty_D Power_Source_Qty_9V Power_Source_Qty_Watch Power_Source_Qty_110V_AC Power_Source_Qty_Other Waterproof Phthalate_Free LED Multi_Speed Multi_Function Vibrates Pulsates Escalates Rotating Purpose_of_Item How_to_Use_Item How_to_Clean_Item Special_Features Lubricant_Water_Based Lubricant_Oil Lubricant_Silicone Long_Descr Pic1 Pic2 Pic3 Pic4 Pic5 Pkg_Height_In Pkg_Length_In Pkg_Width_In Manufacturer_SKU */ ?>