tablexi / foxy_sync

MIT License
8 stars 6 forks source link

FoxySync

A gem to synchronize your Ruby application with FoxyCart.

It encapsulates the FoxyCart SSO, Datafeed, and cart validation protocols and abstracts the entire FoxyCart API.

Installation

If you use Bundler just add gem 'foxy_sync' to your Gemfile and then run bundle install. Otherwise you can gem install foxy_sync manually.

Setup

You'll need to configure FoxySync. In particular you need to make known your FoxyCart API key and store URL.

FoxySync.setup do |config|
  config.api_key = 'YOUR API KEY HERE'
  config.store_url = 'YOUR STORE URL HERE'
end

You should do this in an application startup file. In Rails it's best to put it in a file config/initializers/foxy_sync.rb

Cart validation

FoxySync provides methods to help with FoxyCart's cart validation service. To create a hidden input like this:

<input type="hidden" value="mai" name="code||5651608dde5a2abeb51fad7099fbd1a026690a7ddbd93a1a3167362e2f611b53"/>

You would include FoxySync::CartValidation and output your hidden field with a name whose value is cart_input_name 'code', 'mai', 'mai'

Single sign on

FoxySync provides methods for helping with FoxyCart's single sign on service.

To create the URL that FoxyCart expects your server to redirect to just include FoxySync::Sso and redirect_to sso_url(params, user). The params argument should be something that responds to [] and holds the 'fcsid' and 'timestamp' parameters given by the FoxyCart SSO request (in Rails that's the params object). The user argument should be the currently logged in user, if any.

XML datafeeds

FoxySync provides methods for helping with FoxyCart's datafeeds. Typically done in a controller you would include FoxySync::Datafeed and, in the method that handles the datafeed request, parse the request parameter and read the XML:

  receipt = []
  xml = datafeed_unwrap params
  receipt << xml.customer_first_name
  receipt << xml.customer_last_name
  receipt << xml.receipt_url
  # ... etc ....

params should respond to [] and hold the 'FoxyData' parameter that FoxyCart sends (in Rails that's the params object). xml would be a FoxySync::Xml::Transaction. FoxyCart expects a particular reply when responding to its datafeed requests. The reply can be sent using the datafeed_response method.

FoxyCart API

You can access any part of the FoxyCart API via the FoxySync::Api::Messenger class. To use it create a new instance and then send it a message that corresponds to the FoxyCart API. All messages return an instance of FoxySync::Xml::Document through which you can access FoxyCart's XML response. For Example:

    api = FoxySync::Api::Messenger.new
    reply = api.customer_get :customer_email => 'foo@bar.com'
    reply.customer_id # is the customer's FoxyCart id

Messenger instances respond to every API call in FoxyCart v1.0.