class Paypal::NVP::Response
Attributes
amount[RW]
bill_to[RW]
billing_agreement[RW]
description[RW]
insurance_option_selected[RW]
items[RW]
payer[RW]
payment_info[RW]
payment_responses[RW]
recurring[RW]
refund[RW]
ship_to[RW]
shipping_options_is_default[RW]
success_page_redirect_requested[RW]
Public Class Methods
new(attributes = {})
click to toggle source
# File lib/paypal/nvp/response.rb, line 45 def initialize(attributes = {}) attrs = attributes.dup @@attribute_mapping.each do |key, value| self.send "#{value}=", attrs.delete(key) end @shipping_options_is_default = attrs.delete(:SHIPPINGOPTIONISDEFAULT) == 'true' @success_page_redirect_requested = attrs.delete(:SUCCESSPAGEREDIRECTREQUESTED) == 'true' @insurance_option_selected = attrs.delete(:INSURANCEOPTIONSELECTED) == 'true' @amount = Payment::Common::Amount.new( :total => attrs.delete(:AMT), :item => attrs.delete(:ITEMAMT), :handing => attrs.delete(:HANDLINGAMT), :insurance => attrs.delete(:INSURANCEAMT), :ship_disc => attrs.delete(:SHIPDISCAMT), :shipping => attrs.delete(:SHIPPINGAMT), :tax => attrs.delete(:TAXAMT), :fee => attrs.delete(:FEEAMT) ) @ship_to = Payment::Response::Address.new( :owner => attrs.delete(:SHIPADDRESSOWNER), :status => attrs.delete(:SHIPADDRESSSTATUS), :name => attrs.delete(:SHIPTONAME), :zip => attrs.delete(:SHIPTOZIP), :street => attrs.delete(:SHIPTOSTREET), :street2 => attrs.delete(:SHIPTOSTREET2), :city => attrs.delete(:SHIPTOCITY), :state => attrs.delete(:SHIPTOSTATE), :country_code => attrs.delete(:SHIPTOCOUNTRYCODE), :country_name => attrs.delete(:SHIPTOCOUNTRYNAME), ) @bill_to = Payment::Response::Address.new( :owner => attrs.delete(:ADDRESSID), :status => attrs.delete(:ADDRESSSTATUS), :name => attrs.delete(:BILLINGNAME), :zip => attrs.delete(:ZIP), :street => attrs.delete(:STREET), :street2 => attrs.delete(:STREET2), :city => attrs.delete(:CITY), :state => attrs.delete(:STATE), :country_code => attrs.delete(:COUNTRY) ) if attrs[:PAYERID] @payer = Payment::Response::Payer.new( :identifier => attrs.delete(:PAYERID), :status => attrs.delete(:PAYERSTATUS), :first_name => attrs.delete(:FIRSTNAME), :last_name => attrs.delete(:LASTNAME), :email => attrs.delete(:EMAIL), :company => attrs.delete(:BUSINESS), :phone_number => attrs.delete(:PHONENUM) ) end if attrs[:PROFILEID] @recurring = Payment::Recurring.new( :identifier => attrs.delete(:PROFILEID), # NOTE: # CreateRecurringPaymentsProfile returns PROFILESTATUS # GetRecurringPaymentsProfileDetails returns STATUS :description => @description, :status => attrs.delete(:STATUS) || attrs.delete(:PROFILESTATUS), :start_date => attrs.delete(:PROFILESTARTDATE), :name => attrs.delete(:SUBSCRIBERNAME), :reference => attrs.delete(:PROFILEREFERENCE), :auto_bill => attrs.delete(:AUTOBILLOUTAMT), :max_fails => attrs.delete(:MAXFAILEDPAYMENTS), :aggregate_amount => attrs.delete(:AGGREGATEAMT), :aggregate_optional_amount => attrs.delete(:AGGREGATEOPTIONALAMT), :final_payment_date => attrs.delete(:FINALPAYMENTDUEDATE) ) if attrs[:BILLINGPERIOD] @recurring.billing = Payment::Recurring::Billing.new( :amount => @amount, :currency_code => @currency_code, :period => attrs.delete(:BILLINGPERIOD), :frequency => attrs.delete(:BILLINGFREQUENCY), :total_cycles => attrs.delete(:TOTALBILLINGCYCLES), :trial => { :period => attrs.delete(:TRIALBILLINGPERIOD), :frequency => attrs.delete(:TRIALBILLINGFREQUENCY), :total_cycles => attrs.delete(:TRIALTOTALBILLINGCYCLES), :currency_code => attrs.delete(:TRIALCURRENCYCODE), :amount => attrs.delete(:TRIALAMT), :tax_amount => attrs.delete(:TRIALTAXAMT), :shipping_amount => attrs.delete(:TRIALSHIPPINGAMT), :paid => attrs.delete(:TRIALAMTPAID) } ) end if attrs[:REGULARAMT] @recurring.regular_billing = Payment::Recurring::Billing.new( :amount => attrs.delete(:REGULARAMT), :shipping_amount => attrs.delete(:REGULARSHIPPINGAMT), :tax_amount => attrs.delete(:REGULARTAXAMT), :currency_code => attrs.delete(:REGULARCURRENCYCODE), :period => attrs.delete(:REGULARBILLINGPERIOD), :frequency => attrs.delete(:REGULARBILLINGFREQUENCY), :total_cycles => attrs.delete(:REGULARTOTALBILLINGCYCLES), :paid => attrs.delete(:REGULARAMTPAID) ) @recurring.summary = Payment::Recurring::Summary.new( :next_billing_date => attrs.delete(:NEXTBILLINGDATE), :cycles_completed => attrs.delete(:NUMCYCLESCOMPLETED), :cycles_remaining => attrs.delete(:NUMCYCLESREMAINING), :outstanding_balance => attrs.delete(:OUTSTANDINGBALANCE), :failed_count => attrs.delete(:FAILEDPAYMENTCOUNT), :last_payment_date => attrs.delete(:LASTPAYMENTDATE), :last_payment_amount => attrs.delete(:LASTPAYMENTAMT) ) end end if attrs[:BILLINGAGREEMENTID] @billing_agreement = Payment::Response::Reference.new( :identifier => attrs.delete(:BILLINGAGREEMENTID), :description => attrs.delete(:BILLINGAGREEMENTDESCRIPTION), :status => attrs.delete(:BILLINGAGREEMENTSTATUS) ) billing_agreement_info = Payment::Response::Info.attribute_mapping.keys.inject({}) do |billing_agreement_info, key| billing_agreement_info.merge! key => attrs.delete(key) end @billing_agreement.info = Payment::Response::Info.new billing_agreement_info @billing_agreement.info.amount = @amount end if attrs[:REFUNDTRANSACTIONID] @refund = Payment::Response::Refund.new( :transaction_id => attrs.delete(:REFUNDTRANSACTIONID), :amount => { :total => attrs.delete(:TOTALREFUNDEDAMOUNT), :fee => attrs.delete(:FEEREFUNDAMT), :gross => attrs.delete(:GROSSREFUNDAMT), :net => attrs.delete(:NETREFUNDAMT) } ) end # payment_responses payment_responses = [] attrs.keys.each do |_attr_| prefix, index, key = case _attr_.to_s when /^PAYMENTREQUEST/, /^PAYMENTREQUESTINFO/ _attr_.to_s.split('_') when /^L_PAYMENTREQUEST/ _attr_.to_s.split('_')[1..-1] end if prefix payment_responses[index.to_i] ||= {} payment_responses[index.to_i][key.to_sym] = attrs.delete(_attr_) end end @payment_responses = payment_responses.collect do |_attrs_| Payment::Response.new _attrs_ end # payment_info payment_info = [] attrs.keys.each do |_attr_| prefix, index, key = _attr_.to_s.split('_') if prefix == 'PAYMENTINFO' payment_info[index.to_i] ||= {} payment_info[index.to_i][key.to_sym] = attrs.delete(_attr_) end end @payment_info = payment_info.collect do |_attrs_| Payment::Response::Info.new _attrs_ end # payment_info items = [] attrs.keys.each do |_attr_| key, index = _attr_.to_s.scan(/^L_(.+?)(\d+)$/).flatten if index items[index.to_i] ||= {} items[index.to_i][key.to_sym] = attrs.delete(_attr_) end end @items = items.collect do |_attrs_| Payment::Response::Item.new _attrs_ end # remove duplicated parameters attrs.delete(:SHIPTOCOUNTRY) # NOTE: Same with SHIPTOCOUNTRYCODE attrs.delete(:SALESTAX) # Same as TAXAMT # warn ignored attrs attrs.each do |key, value| Paypal.log "Ignored Parameter (#{self.class}): #{key}=#{value}", :warn end end