Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Rails Controller for Chargify Webhooks
require 'md5'
class Chargify::HooksController < ApplicationController
protect_from_forgery :except => :dispatch
before_filter :verify, :only => :dispatch
EVENTS = %w[ test signup_success signup_failure renewal_success renewal_failure payment_success payment_failure billing_date_change subscription_state_change subscription_product_change ].freeze
def dispatch
event = params[:event]
unless EVENTS.include? event
render :nothing, :status => 404 and return
end
begin
convert_payload
self.send event
rescue Exception => e
notify_hoptoad(e) #If you use hoptoad...
render :nothing, :status => 422 and return
end
end
def test
Rails.logger.debug "Chargify Webhook test!"
render :nothing, :status => 200
end
def signup_success
render :nothing, :status => 200
end
def signup_failure
render :nothing, :status => 200
end
def renewal_success
render :nothing, :status => 200
end
def renewal_failure
render :nothing, :status => 200
end
def payment_success
render :nothing, :status => 200
end
def payment_failure
render :nothing, :status => 200
end
def billing_date_change
render :nothing, :status => 200
end
def subscription_state_change
render :nothing, :status => 200
end
def subscription_product_change
render :nothing, :status => 200
end
protected
def verify
if params[:signature].nil?
params[:signature] = request.headers["HTTP_X_CHARGIFY_WEBHOOK_SIGNATURE"]
end
unless MD5::hexdigest(CHARGIFY_CONFIG['subdomain_shared_key'] + request.raw_post) == params[:signature]
render :nothing, :status => :forbidden
end
end
def convert_payload
if params[:payload].has_key? :transaction
@transaction = Chargify::Transaction.new params[:payload][:transaction]
end
if params[:payload].has_key? :subscription
@subscription = Chargify::Subscription.new params[:payload][:subscription]
end
end
end
# route
#map.chargify_hooks '/chargify/hooks', :controller => 'chargify/hooks', :action => "dispatch", :conditions => { :method => :post }
@joshuasiler

This comment has been minimized.

Copy link

@joshuasiler joshuasiler commented Jan 17, 2012

Very useful - thanks for posting this.

@dan987

This comment has been minimized.

Copy link

@dan987 dan987 commented Jul 27, 2015

Yes, Thank you! Routes?

@tylerlong

This comment has been minimized.

Copy link

@tylerlong tylerlong commented Jan 12, 2016

@dan987 Route is at the bottom, commented out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.