require 'net/http' require 'base64' require 'digest/md5' module ActiveMerchant #:nodoc: module Billing #:nodoc: module Integrations #:nodoc: module TwoCheckout class Notification < ActiveMerchant::Billing::Integrations::Notification # order_number 2Checkout.com order number # card_holder_name Card holder's name # street_address Card holder's address # city Card holder's city # state Card holder's state # zip Card holder's zip # country Card holder's country # email Card holder's email # phone Card holder's phone # credit_card_processed Y if successful, K if waiting for approval # total Total purchase amount # ship_name Shipping information # ship_street_address Shipping information # ship_city Shipping information # ship_state Shipping information # ship_zip Shipping information # ship_country Shipping information # product_id 2Checkout product ID for purchased items will append a number if more than one item. # ex. product_id,product_id1,product_id2 # quantity quantity of corresponding product will append a number if more than one item. # ex. quantity,quantity1,quantity2 # merchant_product_id your product ID for purchased items will append a number if more than one item. # ex. merchant_product_id,merchant_product_id1,merchant_product_id2 # product_description your description for purchased items will append a number if more than one item. # ex. product_description,product_description1,product_description2 def currency 'USD' end def complete? status == 'Completed' end def item_id params['cart_order_id'] end def transaction_id params['order_number'] end def received_at params[''] end def payer_email params['email'] end def receiver_email params[''] end # The MD5 Hash def security_key params['key'] end # the money amount we received in X.2 decimal. def gross params['total'] end # Was this a test transaction? # Use the hash def test? params['demo'] == 'Y' end def status case params['credit_card_processed'] when 'Y' 'Completed' when 'K' 'Pending' else 'Failed' end end def secret @options[:credential2] end def acknowledge return false if security_key.blank? Digest::MD5.hexdigest("#{secret}#{params['sid']}#{transaction_id}#{gross}").upcase == security_key.upcase end private def parse(post) @raw = post.to_s for line in @raw.split('&') key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten params[key] = CGI.unescape(value || '') end end end end end end end