Latest News: (loading..)
greasemonkey

ShipStation Shipping Integration Software

20 posts in this topic

Hey all, while working on a new project to connect my store with Amazon I came across an ecommerce shipping integration software called ShipStation.

And realized quickly during my 30 day trial - this is something HUGE missing from OsC.... Wow... what a great program!

The ShipStation API connects to almost EVERY eCommerce platform available (both hosted and self hosted) BUT NOT WITH OSC. It even will integrate with Zencart....

It was extremely easy to integrate with Amazon... Here are just a few of the highlights in my few days using it:

1) The API connects with all major shipping carriers - including Fedex, UPS, DHL, USPS, Canada Post & Purolator.

2)The API connects to the "store" and "fetches" current orders where they can be batch printed for picking and shipping labels can be printed without data entry (other than weights and dimensions).

3) Connects to multiple store and multiple shipping carriers at the same time

4) Because the API connects with multiple carriers it can quickly and easily compare shipping rates on the fly and then print labels for ANY of the connected Carriers in seconds.... even international shipments and will even print closing (manifest) reports if required.

Just to be clear - this is not a shipping "module" to provide rates via OsC. It is a shipping automation tool to help with the "backend" stuff that our customers don't ever see - the biggest thing is, IMHO, comparing shipping rates of multiple carriers and printing shipping labels without data entry.

I have asked ShipStation if they would consider adding OsC to their platform... here is there reply...

http://feedback.shipstation.com/forums/330429-product-feedback-fresh-ideas/suggestions/20039272-oscommerce

Seriously... go forth and SPAM the hell out of them requesting integration!!!!!

Anyone who ships more than a few orders a day....needs access to this!

Share this post


Link to post
Share on other sites

I have all ready replied to the mod...

Quote

Thank you for the update. OsCommerce is an open source software - so I would recommend joining the OsC community forums to connect with those at OsC that can help with the integration... https://forums.oscommerce.com/forum.

The most current version code base can be found here: https://github.com/gburton/Responsive-osCommerce

Your developers will find OsCommerce and Zencart (which you do offer an integration for) to be of a very similar structure (some would call them almost identical).

The next version 2.4 is being developed here https://github.com/osCommerce/oscommerce2

 

Share this post


Link to post
Share on other sites

@greasemonkey

I must be dumber than a bag of rocks .... I can see where I can sign in, but I can't find where to create the account to sign into ... :huh:

Malcolm

Share this post


Link to post
Share on other sites

@ArtcoInc watch.... maybe it is them dumb as rocks and they will make you/us signup for a trial (although not the end of the world... there was no credit card to sign up) to leave feedback... I will see if I can find more.

Thanks Malcolm!

 

Share this post


Link to post
Share on other sites

Posted (edited)

Nope.... it is them... not you Malcolm.

you need to have an account to leave feedback or vote on other feedback.

really tho, I'm not sure how I'm suppose to get them feedback if there expectation is you have to sign up for an account to give feedback....

https://www.shipstation.com/step1/

 

Edited by greasemonkey

Share this post


Link to post
Share on other sites

@greasemonkey Scott I had a call shortly after this thread was started offering me a platform for shipping from a company that seems to be based in Toronto.  I'm not sure how it fits in with what you're working on but I thought I'd pass the information and link along in case if was of any interest to  you.

Dan

Share this post


Link to post
Share on other sites

Yes, I have briefly looked into them... and also eshipper... Neither do what shipstation does (or at least as well as shipstation does).

That said, since ShipStation doesn't seem to be an option I have put in a commercial request to build my/our own..... in an admin/hook tab here are the basics from one of my conversations with those quoting.....

----------------------------------------------------------

Currently I offer shipping quotes via Canada Post, FedEx and I'm working on Purolator (another Canadian shipping vendor). In addition to these API I also have the following modules: 1) DHL (I'm using MultiGeoZone MultiTable for this as the DHL API sucks) and 2) about 6 different flat rate modules (some which are $0.00 for free shipping or in store pick up and others flat rate depending on the location or SPPC customer group).

So first I'm looking to dramatically simplify the way I display the shipping rates for my customers (similar to the way Amazon does it) to the following: Standard, Expedited/Ground and Express (I will still use the free shipping and instore pickup modules). I'm not sure how yet I will display these rates (I may just use the current fedex or Canada post module and strip out all branding).... this should be simple and I can certainly handle this myself.

NOW from an order management process (this is where it gets complicated) - after packing each order -  weigh and measure, input the weights and measurements in the admin hook/tab to quote and compare shipping rates for Canada Post, FedEx and Purolator and possibly UPS in the future (similar to ShipStation if you have ever used it?).... Then select the cheapest method for the service level and before printing the label. The reason quite simply is... I have been using shipstation on trial and have found huge differences in the shipping rates from courier to courier for the same package to the same destination on the same service level. To make this all work however I need 100% accurate shipping quotes and the only way to accomplish this is with weights AND dimensions after the order has been packed.

The Canada Post module has dimensional support built in (although we do NOT use it.... with almost 4000 sku's it is really impossible to manage) so forwarding the LxWxH should be easy. The FedEx and Purolator mods do not have built in dimensional support ... however both API's will accept LxWxH.... as long as $length, $width, $height $weight (entered in the admin) mean the same thing in each.... we should be able to get a 100% accurate quote from each....

I know what I'm trying to accomplish - just not sure if I can verbalize the process.

Share this post


Link to post
Share on other sites

Ship Station is awesome! I had it integrated into an ERP. The awesome thing was using it as a quarterback, unlike the traditional thought of an ERP should be the quarterback. Shipstation had done a lot of the leg works. I was gonna write the OSC integration module, but not enough time right now. Ship station don't make money from the monthly fee, they make money from the percentage of your shipping bill. They were bought by Stamps.com last year.

Share this post


Link to post
Share on other sites
11 hours ago, clustersolutions said:

Ship Station is awesome! I had it integrated into an ERP. The awesome thing was using it as a quarterback, unlike the traditional thought of an ERP should be the quarterback. Shipstation had done a lot of the leg works. I was gonna write the OSC integration module, but not enough time right now. Ship station don't make money from the monthly fee, they make money from the percentage of your shipping bill. They were bought by Stamps.com last year.

I wonder if, in stead of trying to have my own ship station (admin hook tab) programmed I would  be better off to have someone do a custom ShipStation integration (this is an option..... they do allow this....)??????????

Share this post


Link to post
Share on other sites

Posted (edited)

Ok reading through ShipStations very well documented integration info - they offer 2 "levels" of integration: a "Custom Store Integration" and the "ShipStation API".

Reading the docs the Custom Store Integration would DEFINITELY be easier to accomplish however still well be beyond my skill level... end results are:

Provide order information to ShipStation, including recipient address, products, customers, etc.... which ShipStation can then be used to print shipping labels and... send back tracking information when an order is shipped, including shipping method, shipping status, tracking number, and more

The ShipStation API allows FULL order management:

Managing Orders, Managing Shipments, Creating Shipping Labels, Retrieving Shipping Rates and more!!!

I'm now leaning towards a the Custom Store Integration....

For those interested here are the development guidelines: https://app.shipstation.com/content/integration/ShipStationCustomStoreDevGuide.pdf

Edited by greasemonkey

Share this post


Link to post
Share on other sites

Ok mini break through guys, I have stripped apart the zencart connector (a job that I had already started but had give up) that ShipStation has and have it communicating (with a bunch of errors of course) with the  "Custom Store Integrator". 

I'll keep you posted  

 

Share this post


Link to post
Share on other sites

@greasemonkey, of course they do. In fact all you need is an account, then you can get your API/secret keys to make the API calls. The API blue print that they offer is good. Writing the app for OSC is no big deal. I think waiting for a OSC release to be comfortable to develope on is a much bigger deal. I found it funny that SS do a lot of things that an ERP would do, but it is missing a good ERP integration. Then again, I found some stores must had an "oh, shiz" moment as their multi-channels online sales were sky rocketing through the roof and SS was there to get their orders out the door--which was probably very important at first until customers start bitching about sold out or not knowing where their orders went. 

8 hours ago, greasemonkey said:

I wonder if, in stead of trying to have my own ship station (admin hook tab) programmed I would  be better off to have someone do a custom ShipStation integration (this is an option..... they do allow this....)??????????

Share this post


Link to post
Share on other sites

Ok, I have a working sample/beta of the ShipStation connector using the "custom store integration".

Anyone out there wish to help test????? Please PM me.

You will require a SS account, and an account with Fedex, UPS, Canada Post, USPS Purolator or whatever other carriers can integrate....

SS Does offer a 30 day trial at ShipStation that does NOT require a credit card....

Share this post


Link to post
Share on other sites

Just testing myself here and it would seem I have found the first issue - the below query is not looping through to get "items" for each order (it gets the items for the first order only).

I'll include the original zen_cart Execute function commented out....

        //while (!$orders_result->EOF) {
          while ($orders_result = tep_db_fetch_array($orders_query)) {			
			//modified for osc
            //get order items from datbase
            $orderitems_query = tep_db_query("SELECT * FROM " . TABLE_ORDERS_PRODUCTS . " WHERE orders_id = '" . $orders_result['orders_id'] . "'");
            //$orderitems_result = $db->Execute($orderitems_query);
            $orderitems_result = tep_db_fetch_array($orderitems_query);

which is put in the xml like this

            echo "\t<Items>\n";
            //process Order Items
            while ($orderitems_result = tep_db_fetch_array($orderitems_query)) {							

                $image_query = tep_db_query("SELECT products_image, products_weight FROM " . TABLE_PRODUCTS . " WHERE products_id = '" . $orderitems_result['products_id'] . "'");
                $image_result = tep_db_fetch_array($image_query);
                echo "\t<Item>\n";
                AddFieldToXML("SKU", '<![CDATA[' . $orderitems_result['products_model']. ']]>');
                AddFieldToXML("Name", '<![CDATA[' . $orderitems_result['products_name']. ']]>');
                AddFieldToXML("ImageUrl", '<![CDATA[' . HTTP_SERVER . DIR_WS_CATALOG . DIR_WS_IMAGES . $image_result['products_image']. ']]>');
                AddFieldToXML("Weight", $image_result['products_weight']);
                AddFieldToXML("WeightUnits", 'grams');		
                AddFieldToXML("Quantity", $orderitems_result['products_quantity']);				
                AddFieldToXML("UnitPrice", round($orderitems_result['final_price'], 2));
                AddFieldToXML("Location", '<![CDATA[' . round($orderitems_result['products_location'], 2). ']]>');		

				//modified for osc
                $orderitems_attributes_query = tep_db_query("SELECT orders_products_attributes_id, products_options, products_options_values  FROM " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " WHERE orders_id = '" . $orders_result['orders_id'] . "' and orders_products_id = '" . $orderitems_result['orders_products_id'] . "'");
                //$orderitems_attributes_result = $db->Execute($orderitems_attributes_query);
                $orderitems_attributes_result = tep_db_fetch_array($orderitems_attributes_query);

				
                if ($orderitems_attributes_result['orders_products_attributes_id']) {
                    echo "\t<Options>\n";
                }

                //while (!$orderitems_attributes_result->EOF) {
				while ($orderitems_attributes_result = tep_db_fetch_array($orderitems_attributes_query)) {					

                    echo "\t<Option><Name><![CDATA[" . $orderitems_attributes_result['products_options'] . "]]></Name><Value><![CDATA[" . $orderitems_attributes_result['products_options_values'] . "]]></Value></Option>\n";

                    //$orderitems_attributes_result->MoveNext();
                }

                if ($orderitems_attributes_result['orders_products_attributes_id']) {
                    echo "\t</Options>\n";
                }

                echo "\t</Item>\n";

                //$orderitems_result->MoveNext();
            }

            //process Order Items
            echo "\t</Items>\n";

Zencart would have used (I think)

$orderitems_result->MoveNext();

to loop.... what am I missing?

Share this post


Link to post
Share on other sites

Posted (edited)

Ok, I think I got it....

                $image_query = tep_db_query("SELECT products_image, products_weight FROM " . TABLE_PRODUCTS . " WHERE products_id = '" . $orderitems_result['products_id'] . "'");
                $image_result = tep_db_fetch_array($image_query);
                AddFieldToXML("SKU", '<![CDATA[' . $orderitems_result['products_model']. ']]>');
                AddFieldToXML("Name", '<![CDATA[' . $orderitems_result['products_name']. ']]>');
                AddFieldToXML("ImageUrl", '<![CDATA[' . HTTP_SERVER . DIR_WS_CATALOG . DIR_WS_IMAGES . $image_result['products_image']. ']]>');
                AddFieldToXML("Weight", $image_result['products_weight']);
                AddFieldToXML("WeightUnits", 'grams');		
                AddFieldToXML("Quantity", $orderitems_result['products_quantity']);				
                AddFieldToXML("UnitPrice", round($orderitems_result['final_price'], 2));
                AddFieldToXML("Location", '<![CDATA[' . round($orderitems_result['products_location'], 2). ']]>');		
				//get attributes
                $orderitems_attributes_query = tep_db_query("SELECT orders_products_attributes_id, products_options, products_options_values  FROM " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " WHERE orders_id = '" . $orders_result['orders_id'] . "' and orders_products_id = '" . $orderitems_result['orders_products_id'] . "'");
				while ($orderitems_attributes_result = tep_db_fetch_array($orderitems_attributes_query)) {			
                if ($orderitems_attributes_result['orders_products_attributes_id']) {
                    echo "\t<Options>\n";
                }
                    echo "\t<Option><Name><![CDATA[" . $orderitems_attributes_result['products_options'] . "]]></Name><Value><![CDATA[" . $orderitems_attributes_result['products_options_values'] . "]]></Value></Option>\n";
                if ($orderitems_attributes_result['orders_products_attributes_id']) {
                    echo "\t</Options>\n";
                }
            }

If I understand correctly I had an extra while( $orderitems_result.... and tep_db_fetch_array does the looping....

Also had to clean up the xml some more.

Now I need to test it posting the updated status back to OsC....

Edited by greasemonkey

Share this post


Link to post
Share on other sites

Ok, I now have two way communication sending back updates with the Carrier, Service & tracking number and entering this into the comments box as an order history update.

2 questions;

1) There is no way to directly notify the customer with the return URL parameters (example of the return below):

ttps://www.yourstore.com/shipstationxml.php?action=shipnotify&order_number=ABC123&carrier=USPS&service=USPS+Priority+Mail&tracking_number=9511343223432432432 H

So, I'm going under the assumption that EVERYONE's "shipped" status is, as default "3".

Or is there a way for me to "$_get" this somehow?

2) I'm using the below to "update and insert" into the order and order status history tables - is there no way I can "NOTIFY" the customer?

    if ($_GET['order_number']) {

        $status = 3;
        $customer_notified = '0';
        $comments = $_GET['service'] . ' ' . $_GET['tracking_number'];

        $record_query = tep_db_query("SELECT orders_id FROM " . TABLE_ORDERS . " WHERE orders_id = '" . $_GET['order_number'] . "'");
        $record_result = tep_db_fetch_array($record_query);		

        if ($record_result['orders_id']) {

				tep_db_query("update " . TABLE_ORDERS . "
	                      set orders_status = '" . tep_db_input($status) . "', last_modified = now()
	                      where orders_id = '" . (int) $_GET['order_number'] . "'");

                tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . "
	                      (orders_id, orders_status_id, date_added, customer_notified, comments)
	                      values ('" . (int) $_GET['order_number'] . "',
	                      '" . tep_db_input($status) . "',
	                      now(),
	                      '" . tep_db_input($customer_notified) . "',
	                      '" . tep_db_input($comments) . "')");

        echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
		AddFieldToXML("ShipNotice", 'Status updated successfully');

Of course I can change the status to notified easy enough... but could I actually add (I use HTML emails templates)?

          $customer_notified = '0';
          if (isset($_POST['notify']) && ($_POST['notify'] == 'on')) {
            $notify_comments = '';
            if (isset($_POST['notify_comments']) && ($_POST['notify_comments'] == 'on')) {
              $notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n\n";
            }

            // TODO delete refencies when page loader change
            chdir('../');
            require('includes/classes/osc_template.php');
            $oscTemplate = new oscTemplate();
            $oscTemplate->getContent('email_orders');
            chdir(DIR_FS_DOCUMENT_ROOT);
            // TODO end  
			
            $customer_notified = '1';
          }

As a backup there is a function inside the SS config to send tracking emails directly and some nice email templates to choose from... so no big deal could just change notify to "1" and be done with... however another user man be confused as to why customers are not receiving emails.....

Share this post


Link to post
Share on other sites

I haven't used ShipStation and don't mean to hijack your thread, however, I thought it might be helpful to mention that ShipWorks has a OSC integration.  I've used it for years and recently upgraded OSC to 2.3.4BS Responsive and am still using ShipWorks.  I ship to the U.S. and internationally via USPS, FedEx, UPS and OnTrac and ShipWorks handles it all. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now