Archive | Projects

Introducing Shipiro – BigCommerce and Shipwire Integration

Over the past few weeks I’ve gotten a ton of positive feedback on FoxyWire (several people are building businesses on the platform as I type this). After talking more with the Shipwire team, I discovered that tons of users were clamoring for an integration of Shipwire and BigCommerce, which is one of the most widely used shopping carts on the internet. And so, here it is – Shipiro, a seamless integration of BigCommerce and Shipwire.

Like FoxyWire, Shipiro offers an out-of-the-box, point and click integration with Shipwire. Shipiro is a little more advanced however, in that it makes it easy to push tracking numbers from Shipwire back into BigCommerce. That allows things like inventory management and customer notification of shipments, all using built-in BigCommerce functionality.

Shipiro Order Flow

Here’s a bit of background on how each service works, and how you can stitch them together quickly with Shipiro to build an enterprise class e-commerce supply chain.

BigCommerce

BigCommerce is one of the web’s most popular e-commerce solutions (over 10,000 live stores). BigCommerce is extremely full featured – everything from custom templates to inventory management to eBay integration to marketing and analytics is included. Just about the only thing BigCommerce didn’t have was fulfillment. Enter Shipwire with Shipiro.

Shipwire

Ah, how the world has changed. Advanced logistics and fulfillment used to be reserved for large, international companies with sophisticated supply chain managers. Not anymore. Shipwire brings professional-grade fulfillment within the price range and sophistication level of an individual entrepreneur. Shipwire has warehouses in LA, Chicago, Toronto, Vancouver, and London. To get started, you can ship your inventory to any or all of Shipwire’s warehouses. When a new order comes in, simply send the SKUs and address information to Shipwire (automatically via their API if you’re using Shipiro), and they’ll use intelligent business rules to ship the order for the lowest cost possible, dynamically selecting the closest warehouse and cheapest shipping carrier. Check out this interview with their CEO to learn a bit more about how they are trying to help entrepreneurs build supply chains to rival Fortune 500 companies.

Shipiro

Shipiro.com reaches out to the BigCommerce API with each user’s credentials a few times a day and requests the orders list, which is then parsed for “physical” items only (so we don’t ship e-books for example) and passed over to Shipwire. Then nightly, Shipiro hits the Shipwire API and pulls tracking numbers back into Shipiro. Lack of write capability in the BigCommerce API prevents me from pushing those numbers back to BigCommerce, but Shipiro is able to export a CSV of all orders with tracking numbers that easily imports back into BigCommerce with their import tool. Shipiro keeps an auditable log of every single piece of XML that goes back and forth to make the above steps happen, which can be viewed order-by-order inside of the Shipiro interface.

The folks at Shipwire have listed Shipiro on their website as the only currently available method for BigCommerce/Shipwire integration. Shipiro is also featured on the BigCommerce blog. If you’re running an e-commerce store on BigCommerce and are looking to automate your supply chain and fulfillment, give Shipwire a try with Shipiro.

Introducing FoxyWire: Now You Can Build An E-commerce Supply Chain From Your Bedroom

Just a quick post to announce the availability of my latest side-project: FoxyWire, which I built in about 15 hours of coding (PHP/mySQL) over the course of a week. FoxyWire is an out-of-the-box integration between two of the quickest ways to cobble together an e-commerce business that I’m aware of – FoxyCart for almost instant shopping cart functionality, and Shipwire for automated intelligent fulfillment and shipping.

Until today, if you wanted to use FoxyCart and Shipwire together to run your business, you needed to either transfer orders manually by uploading spreadsheets, or do some custom coding to connect the two APIs. I went ahead and did the hard work for you – now you can use a (free) FoxyWire account as a “universal connector” to funnel FoxyCart orders directly into Shipwire and build an end-to-end automated supply chain without leaving your desk.

FoxyWire Order Flow

Here’s a bit of background on how each service works, and how you can stich them together quickly with FoxyWire to build an enterprise class e-commerce supply chain.

FoxyCart

FoxyCart is different than any other online shopping cart software in that it’s designed to be lightweight, easy to setup, and not require the customer to jump through tons of hoops to check out. It’s the last point that drew me to FoxyCart – every additional “Next Step” click is a chance for cart abandonment. The checkout page is a single screen that can be completed in under a minute. Very slick, very easy. I’ve used FoxyCart to power several side projects, and have gotten explicit feedback from customers that “your checkout is the easiest I’ve ever used.” FoxyCart also doesn’t have any software at all you need to upload to your own server – orders are simply passed into their hosted cart via forms, links with parameters, or even a JSON API. Check out their 2-minute tour of FoxyCart for a deeper dive into their features.

Shipwire

Ah, how the world has changed. Advanced logistics and fulfillment used to be reserved for large, international companies with sophisticated supply chain managers. Not anymore. Shipwire brings professional-grade fulfillment within the price range and sophistication level of an individual entrepreneur. Shipwire has warehouses in LA, Chicago, Toronto, Vancouver, and London. To get started, you can ship your inventory to any or all of Shipwire’s warehouses. When a new order comes in, simply send the SKUs and address information to Shipwire (automatically via their API if you’re using FoxyWire), and they’ll use intelligent business rules to ship the order for the lowest cost possible, dynamically selecting the closest warehouse and cheapest shipping carrier. Check out this interview with their CEO to learn a bit more about how they are trying to help entrepreneurs build supply chains to rival Fortune 500 companies.

FoxyWire

FoxyWire acts as a connector and translator between FoxyCart and Shipwire. FoxyWire simply listens for new transactions from FoxyCart, performs some error checking and logic (to be sure we don’t try to ship e-books for example), translates the orders into a format Shipwire can understand, then pushes the address and line item information to Shipwire. I couldn’t have built FoxyWire without the great APIs provided by both FoxyCart (API docs link) and Shipwire (API docs link). The Shipwire API is extremely handy in that it takes only an XML file containing address information and the order’s line items – no specific shipping instructions are required. Shipwire intelligently selects shipping options based on the rules laid out in the user’s Shipwire account.

The kind folks at both FoxyCart and Shipwire have listed FoxyWire on both their websites (here and here) as the only currently available method for FoxyCart/Shipwire integration. Over the next few months, I hope FoxyWire is able to help a lot of people launch new businesses without jumping through manual spreadsheet hell or expensive upfront coding. If you’re a new entrepreneur looking to launch an e-commerce business selling physical goods, I don’t know of any quicker way to get started taking orders and sending them to your customers than by using FoxyCart, FoxyWire, and Shipwire.

Note: As of November 2012, FoxyWire is now part of Order Desk. Order Desk is an extremely robust FoxyCart order management product created by David Hollander, which adds an order dashboard, subscription management, order statistics, custom reporting, and integration with lots of additional systems in addition to the simple FoxyCart/Shipwire sync offered by FoxyWire.

New: A Mobile Version of 37Signals’ Highrise CRM

WhoBook MOBI is a version of Highrise optimized for mobile phones. If you haven’t heard of Highrise, 37Signals’ dead simple CRM web app, you should check it out. Basically it’s an online contacts database, with support for notes about contacts (“Left him a voicemail Tuesday”), tasks (“Follow up with John”), and cases (for organizing multiple people on a project). There are tons of uses for Highrise – it’s used by many small business to keep track of customer relationships, and even by one local pastor to keep track of interactions with his congregation. I used Highrise extensively in my job search – as I interviewed at multiple companies, in multiple rounds, all those faces started to blend together. I had amassed a huge stack of business cards with short handwritten notes on the back. I needed a way to organize it all.

Enter Highrise. I spent two hours one day typing all those contacts into Highrise. Now I can search by name, by company, or even by industry (I’ve tagged all my contacts with the industry they work in). Highrise also keeps track of every email I’ve ever exchanged with that contact, as well as any notes that I’ve added to help me remember who they are (“John loves the Giants” or “Steve has red hair and looks like Ron Howard”). In fact, my story and use case has been featured on the 37Signals Product Blog.

I became so dependent on having my Highrise contacts that I soon realized the biggest shortcoming of the application: no mobile version. Luckily, Highrise has a robust API, so I was able to program exactly the mobile version that I needed to get my Highrise contacts onto my cell phone.

The result is WhoBook MOBI. It’s built specifically for Blackberry and older mobile phones with WAP-based browsers, and provides read-only access to your Highrise contacts. Simply search for their name, and you’ll get back their contact information (with one-click dialing on the phone numbers) as well as any notes you’ve written about them. In addition to the mobile web interface, WhoBook MOBI also has SMS support – send a text to 41411 in the form “WHOBOOK john” and you’ll receive a text back with John’s phone number(s).

WhoBook MOBI is free, unlike some other websites out there that do similar things. I’m also pretty sure that it’s the only way to access your Highrise contacts via SMS that exists. If you find it useful or have any feature requests, I’d really appreciate any feedback at feedback@whobook.mobi or in the comments here.

UPDATE 4/11/2010: Since I wrote this post, 37Signals has released an iPhone app for Highrise. The official app works great for those with iPhones, but if you’re in the 90% of mobile phone users who don’t own an iPhone, there is still no official Highrise mobile app for you. That’s where WhoBook MOBI comes in – it’s entirely text-based and optimized for the basic WAP browsing available on old school Blackberries and “regular” mobile phones. I’ve just done a scrub of the codebase and added a few new features, so check out WhoBook MOBI if you’re not a member of the iPhone crowd and want to access your Highrise contacts on the go.

PHP: Remote Kill Switch – Make Sure You Get Paid

Web Developers: Have you ever gotten to the end of a project, and had a client withhold the last of your fee to exact additional changes or features that were not in the original plan? Perhaps a client that decided your work “wasn’t what we expected” and tried to withhold payment?

Well worry no more. Put the power back in your hands with a Remote Kill Switch. The idea is this: you build into their website a small function that checks with a server you control to make sure the client’s account is in good standing. If it is, the site loads as normal. If not, their site doesn’t load, and they get a message asking for payment.

We’ll accomplish this with a little PHP and a protocol called XML-RPC (remote procedure call). Your client’s server will transmit an XML encoded, unique string identifying itself to your server. Your server will check to see if that unique string is one you’ve specified as disabled. If there is a match, it responds with a XML encoded string telling the client’s server to disable the application.

Sound like something you’d want to implement? Here’s how it breaks down:

Part One: Your server. You’ll need a fairly reliable host, and a fast one at that. You don’t want to slow down the remote application load with requests to your server. However, the below code is set to continue loading the remote application even if it does not receive a response from your server, ensuring that downtime on your end does not cause downtime on their end.

Part Two: The code on your end. Also known as the RPC server. Create a new file and paste the following:

	require('XMLRPC.inc.php');
	function checkapp($the_app)
	{
		$deactivateMe = ""; // to disable a webapp, enter it's short code here
		if (isset($the_app) && $the_app == $deactivateMe)
			return true; // Application Disabled
		else
			return false; // All systems go
	}
	$server = new IXR_Server(array('activation.checkapp' => 'checkapp'));

You’ll also need to download XMLRPC.inc.php and upload it to your webserver in the same directory as the file you created above. You will need to change the file extension from .phpp to .php.

Part Three: The client code. Also known as the RPC client. Insert this code in your client’s site, preferably toward the beginning of execution:

	require('XMLRPC.inc.php');
	$appname = "UNIQUE_APP_SHORTCODE";
	$client = new IXR_Client('http://path_to_file_created_earlier.php');
	if (!$client->query('activation.checkapp', $appname)) {
		if($client->getResponse() )
		{
			die("Application Disabled. Please pay your web developer.");
		}
	}

Again, download XMLRPC.inc.php and upload it to the server in the same directory as the file you created above. This library is required both by the client to make the request, and the server to respond to it.

That’s it! If the client ever doesn’t pay you, and you want to shutdown the site you developed for them, just set $deactivateMe in Step 1 to the “UNIQUE_APP_SHORTCODE” you entered in the code in Step 3.

You can see that the above setup allows you to protect multiple web apps at once, just remember what shortcodes you assigned at what sites! I recommend keeping them in comments at the top of your XML-RPC server PHP file. However, a limitation of my code is that you can only disable one remote site at a time. I’m sure my code could be expanded to use an array that would allow you to disable multiple sites at once.

I realize that this is significantly more technical than my typical fare (which I will return to next post), but I hope it’s helpful to some people, if only as a demonstration. Feel free to rip my code apart in the comments, I’m sure I’ve left something out.

Disclaimers and warnings: You use the above code at your own risk. It is probably buggy and insecure (though it does work). I take no liability for any harm that should befall your data, your bank account, or your person as a result of implementing this idea. You should obviously remove the activation check as soon as the client has paid you for your work. It’s definitely unethical (and insecure) to leave this backdoor in place after you have finished the project. Also, this kind of system won’t work against someone who knows anything about how their site is programmed. But then again, those people probably wouldn’t be hiring freelance web developers would they?

Add WFU Specific Search to your Firefox

Here’s a quickie, but I think a number of Wake Forest students will appreciate it. I’ve programmed a plugin for Firefox to add a Wake Forest site-specific search to the upper right search box. Just click the little arrow next to the Google logo, and pick the “WF” logo, and your search will be restricted to the Wake Forest website. It’s great for finding things like OGB articles and a link to the PDF of the course catalog that you misplaced. Just go to the link below to install it.

http://www.billda.com/searchplugin/