dfg-paypal 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +25 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +18 -0
  6. data/Gemfile +13 -0
  7. data/Rakefile +19 -0
  8. data/VERSION +1 -0
  9. data/dfg-paypal.gemspec +28 -0
  10. data/lib/paypal.rb +84 -0
  11. data/lib/paypal/base.rb +19 -0
  12. data/lib/paypal/exception.rb +4 -0
  13. data/lib/paypal/exception/api_error.rb +94 -0
  14. data/lib/paypal/exception/http_error.rb +12 -0
  15. data/lib/paypal/express.rb +1 -0
  16. data/lib/paypal/express/request.rb +207 -0
  17. data/lib/paypal/express/response.rb +35 -0
  18. data/lib/paypal/ipn.rb +23 -0
  19. data/lib/paypal/nvp/request.rb +64 -0
  20. data/lib/paypal/nvp/response.rb +234 -0
  21. data/lib/paypal/payment/common/amount.rb +13 -0
  22. data/lib/paypal/payment/recurring.rb +43 -0
  23. data/lib/paypal/payment/recurring/activation.rb +14 -0
  24. data/lib/paypal/payment/recurring/billing.rb +39 -0
  25. data/lib/paypal/payment/recurring/summary.rb +11 -0
  26. data/lib/paypal/payment/request.rb +67 -0
  27. data/lib/paypal/payment/request/item.rb +26 -0
  28. data/lib/paypal/payment/response.rb +73 -0
  29. data/lib/paypal/payment/response/address.rb +7 -0
  30. data/lib/paypal/payment/response/info.rb +45 -0
  31. data/lib/paypal/payment/response/item.rb +41 -0
  32. data/lib/paypal/payment/response/payer.rb +7 -0
  33. data/lib/paypal/payment/response/reference.rb +9 -0
  34. data/lib/paypal/payment/response/refund.rb +13 -0
  35. data/lib/paypal/util.rb +28 -0
  36. data/spec/fake_response/BillAgreementUpdate/fetch.txt +1 -0
  37. data/spec/fake_response/BillAgreementUpdate/revoke.txt +1 -0
  38. data/spec/fake_response/CreateBillingAgreement/success.txt +1 -0
  39. data/spec/fake_response/CreateRecurringPaymentsProfile/failure.txt +1 -0
  40. data/spec/fake_response/CreateRecurringPaymentsProfile/success.txt +1 -0
  41. data/spec/fake_response/DoCapture/failure.txt +1 -0
  42. data/spec/fake_response/DoCapture/success.txt +1 -0
  43. data/spec/fake_response/DoExpressCheckoutPayment/failure.txt +1 -0
  44. data/spec/fake_response/DoExpressCheckoutPayment/success.txt +1 -0
  45. data/spec/fake_response/DoExpressCheckoutPayment/success_with_billing_agreement.txt +1 -0
  46. data/spec/fake_response/DoExpressCheckoutPayment/success_with_many_items.txt +1 -0
  47. data/spec/fake_response/DoReferenceTransaction/failure.txt +1 -0
  48. data/spec/fake_response/DoReferenceTransaction/success.txt +1 -0
  49. data/spec/fake_response/DoVoid/success.txt +1 -0
  50. data/spec/fake_response/GetExpressCheckoutDetails/failure.txt +1 -0
  51. data/spec/fake_response/GetExpressCheckoutDetails/success.txt +1 -0
  52. data/spec/fake_response/GetExpressCheckoutDetails/with_billing_accepted_status.txt +1 -0
  53. data/spec/fake_response/GetRecurringPaymentsProfileDetails/failure.txt +1 -0
  54. data/spec/fake_response/GetRecurringPaymentsProfileDetails/success.txt +1 -0
  55. data/spec/fake_response/GetTransactionDetails/failure.txt +1 -0
  56. data/spec/fake_response/GetTransactionDetails/success.txt +1 -0
  57. data/spec/fake_response/IPN/invalid.txt +1 -0
  58. data/spec/fake_response/IPN/valid.txt +1 -0
  59. data/spec/fake_response/ManageRecurringPaymentsProfileStatus/failure.txt +1 -0
  60. data/spec/fake_response/ManageRecurringPaymentsProfileStatus/success.txt +1 -0
  61. data/spec/fake_response/RefundTransaction/full.txt +1 -0
  62. data/spec/fake_response/SetExpressCheckout/failure.txt +1 -0
  63. data/spec/fake_response/SetExpressCheckout/success.txt +1 -0
  64. data/spec/helpers/fake_response_helper.rb +33 -0
  65. data/spec/paypal/exception/api_error_spec.rb +78 -0
  66. data/spec/paypal/exception/http_error_spec.rb +8 -0
  67. data/spec/paypal/express/request_spec.rb +602 -0
  68. data/spec/paypal/express/response_spec.rb +80 -0
  69. data/spec/paypal/ipn_spec.rb +19 -0
  70. data/spec/paypal/nvp/request_spec.rb +116 -0
  71. data/spec/paypal/nvp/response_spec.rb +146 -0
  72. data/spec/paypal/payment/common/amount_spec.rb +36 -0
  73. data/spec/paypal/payment/recurring/activation_spec.rb +19 -0
  74. data/spec/paypal/payment/recurring_spec.rb +170 -0
  75. data/spec/paypal/payment/request/item_spec.rb +27 -0
  76. data/spec/paypal/payment/request_spec.rb +136 -0
  77. data/spec/paypal/payment/response/address_spec.rb +26 -0
  78. data/spec/paypal/payment/response/info_spec.rb +93 -0
  79. data/spec/paypal/payment/response/item_spec.rb +42 -0
  80. data/spec/paypal/payment/response/payer_spec.rb +26 -0
  81. data/spec/paypal/payment/response_spec.rb +16 -0
  82. data/spec/paypal/util_spec.rb +32 -0
  83. data/spec/spec_helper.rb +25 -0
  84. metadata +225 -0
@@ -0,0 +1,11 @@
1
+ module Paypal
2
+ module Payment
3
+ class Recurring::Summary < Base
4
+ attr_optional :next_billing_date, :cycles_completed, :cycles_remaining, :outstanding_balance, :failed_count, :last_payment_date, :last_payment_amount
5
+
6
+ def numeric_attribute?(key)
7
+ super || [:outstanding_balance, :failed_count].include?(key)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,67 @@
1
+ module Paypal
2
+ module Payment
3
+ class Request < Base
4
+ attr_optional :action, :currency_code, :description, :notify_url, :billing_type, :billing_agreement_description, :billing_agreement_id, :request_id, :seller_id, :invoice_number, :custom
5
+ attr_accessor :amount, :items, :custom_fields
6
+
7
+ def initialize(attributes = {})
8
+ @amount = if attributes[:amount].is_a?(Common::Amount)
9
+ attributes[:amount]
10
+ else
11
+ Common::Amount.new(
12
+ :total => attributes[:amount],
13
+ :tax => attributes[:tax_amount],
14
+ :shipping => attributes[:shipping_amount]
15
+ )
16
+ end
17
+ @items = []
18
+ Array(attributes[:items]).each do |item_attrs|
19
+ @items << Item.new(item_attrs)
20
+ end
21
+ @custom_fields = attributes[:custom_fields] || {}
22
+ super
23
+ end
24
+
25
+ def to_params(index = 0)
26
+ params = {
27
+ :"PAYMENTREQUEST_#{index}_PAYMENTACTION" => self.action,
28
+ :"PAYMENTREQUEST_#{index}_AMT" => Util.formatted_amount(self.amount.total),
29
+ :"PAYMENTREQUEST_#{index}_TAXAMT" => Util.formatted_amount(self.amount.tax),
30
+ :"PAYMENTREQUEST_#{index}_SHIPPINGAMT" => Util.formatted_amount(self.amount.shipping),
31
+ :"PAYMENTREQUEST_#{index}_CURRENCYCODE" => self.currency_code,
32
+ :"PAYMENTREQUEST_#{index}_DESC" => self.description,
33
+ :"PAYMENTREQUEST_#{index}_INVNUM" => self.invoice_number,
34
+ :"PAYMENTREQUEST_#{index}_CUSTOM" => self.custom,
35
+ # NOTE:
36
+ # notify_url works only when DoExpressCheckoutPayment called.
37
+ # recurring payment doesn't support dynamic notify_url.
38
+ :"PAYMENTREQUEST_#{index}_NOTIFYURL" => self.notify_url,
39
+ :"L_BILLINGTYPE#{index}" => self.billing_type,
40
+ :"L_BILLINGAGREEMENTDESCRIPTION#{index}" => self.billing_agreement_description,
41
+ # FOR PARALLEL PAYMENT
42
+ :"PAYMENTREQUEST_#{index}_PAYMENTREQUESTID" => self.request_id,
43
+ :"PAYMENTREQUEST_#{index}_SELLERPAYPALACCOUNTID" => self.seller_id
44
+ }.delete_if do |k, v|
45
+ v.blank?
46
+ end
47
+ if self.items.present?
48
+ params[:"PAYMENTREQUEST_#{index}_ITEMAMT"] = Util.formatted_amount(self.items_amount)
49
+ self.items.each_with_index do |item, item_index|
50
+ params.merge! item.to_params(index, item_index)
51
+ end
52
+ end
53
+ self.custom_fields.each do |key, value|
54
+ field = key.to_s.upcase.gsub("{N}", index.to_s).to_sym
55
+ params[field] = value
56
+ end
57
+ params
58
+ end
59
+
60
+ def items_amount
61
+ self.items.sum do |item|
62
+ item.quantity * BigDecimal.new(item.amount.to_s)
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,26 @@
1
+ module Paypal
2
+ module Payment
3
+ class Request::Item < Base
4
+ attr_optional :name, :description, :amount, :number, :quantity, :category, :url
5
+
6
+ def initialize(attributes = {})
7
+ super
8
+ @quantity ||= 1
9
+ end
10
+
11
+ def to_params(parent_index, index = 0)
12
+ {
13
+ :"L_PAYMENTREQUEST_#{parent_index}_NAME#{index}" => self.name,
14
+ :"L_PAYMENTREQUEST_#{parent_index}_DESC#{index}" => self.description,
15
+ :"L_PAYMENTREQUEST_#{parent_index}_AMT#{index}" => Util.formatted_amount(self.amount),
16
+ :"L_PAYMENTREQUEST_#{parent_index}_NUMBER#{index}" => self.number,
17
+ :"L_PAYMENTREQUEST_#{parent_index}_QTY#{index}" => self.quantity,
18
+ :"L_PAYMENTREQUEST_#{parent_index}_ITEMCATEGORY#{index}" => self.category,
19
+ :"L_PAYMENTREQUEST_#{parent_index}_ITEMURL#{index}" => self.url
20
+ }.delete_if do |k, v|
21
+ v.blank?
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,73 @@
1
+ module Paypal
2
+ module Payment
3
+ class Response < Base
4
+ attr_accessor :amount, :ship_to, :bill_to, :description, :note, :items, :notify_url, :insurance_option_offered, :currency_code, :short_message, :long_message, :error_code, :severity_code, :ack, :transaction_id, :billing_agreement_id, :request_id, :seller_id
5
+
6
+ def initialize(attributes = {})
7
+ attrs = attributes.dup
8
+ @amount = Common::Amount.new(
9
+ :total => attrs.delete(:AMT),
10
+ :item => attrs.delete(:ITEMAMT),
11
+ :handing => attrs.delete(:HANDLINGAMT),
12
+ :insurance => attrs.delete(:INSURANCEAMT),
13
+ :ship_disc => attrs.delete(:SHIPDISCAMT),
14
+ :shipping => attrs.delete(:SHIPPINGAMT),
15
+ :tax => attrs.delete(:TAXAMT)
16
+ )
17
+ @ship_to = Payment::Response::Address.new(
18
+ :name => attrs.delete(:SHIPTONAME),
19
+ :zip => attrs.delete(:SHIPTOZIP),
20
+ :street => attrs.delete(:SHIPTOSTREET),
21
+ :street2 => attrs.delete(:SHIPTOSTREET2),
22
+ :city => attrs.delete(:SHIPTOCITY),
23
+ :state => attrs.delete(:SHIPTOSTATE),
24
+ :country_code => attrs.delete(:SHIPTOCOUNTRYCODE),
25
+ :country_name => attrs.delete(:SHIPTOCOUNTRYNAME)
26
+ )
27
+ @bill_to = Payment::Response::Address.new(
28
+ :owner => attrs.delete(:ADDRESSID),
29
+ :status => attrs.delete(:ADDRESSSTATUS),
30
+ :name => attrs.delete(:BILLINGNAME),
31
+ :zip => attrs.delete(:ZIP),
32
+ :street => attrs.delete(:STREET),
33
+ :street2 => attrs.delete(:STREET2),
34
+ :city => attrs.delete(:CITY),
35
+ :state => attrs.delete(:STATE),
36
+ :country_code => attrs.delete(:COUNTRY)
37
+ )
38
+ @description = attrs.delete(:DESC)
39
+ @note = attrs.delete(:NOTETEXT)
40
+ @notify_url = attrs.delete(:NOTIFYURL)
41
+ @insurance_option_offered = attrs.delete(:INSURANCEOPTIONOFFERED) == 'true'
42
+ @currency_code = attrs.delete(:CURRENCYCODE)
43
+ @short_message = attrs.delete(:SHORTMESSAGE)
44
+ @long_message = attrs.delete(:LONGMESSAGE)
45
+ @error_code = attrs.delete(:ERRORCODE)
46
+ @severity_code = attrs.delete(:SEVERITYCODE)
47
+ @ack = attrs.delete(:ACK)
48
+ @transaction_id = attrs.delete(:TRANSACTIONID)
49
+ @billing_agreement_id = attrs.delete(:BILLINGAGREEMENTID)
50
+ @request_id = attrs.delete(:PAYMENTREQUESTID)
51
+ @seller_id = attrs.delete(:SELLERPAYPALACCOUNTID)
52
+
53
+ # items
54
+ items = []
55
+ attrs.keys.each do |_attr_|
56
+ key, index = _attr_.to_s.scan(/^(.+?)(\d+)$/).flatten
57
+ if index
58
+ items[index.to_i] ||= {}
59
+ items[index.to_i][key.to_sym] = attrs.delete(:"#{key}#{index}")
60
+ end
61
+ end
62
+ @items = items.collect do |_attr_|
63
+ Item.new(_attr_)
64
+ end
65
+
66
+ # warn ignored params
67
+ attrs.each do |key, value|
68
+ Paypal.log "Ignored Parameter (#{self.class}): #{key}=#{value}", :warn
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,7 @@
1
+ module Paypal
2
+ module Payment
3
+ class Response::Address < Base
4
+ attr_optional :owner, :status, :name, :zip, :street, :street2, :city, :state, :country_code, :country_name
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,45 @@
1
+ module Paypal
2
+ module Payment
3
+ class Response::Info < Base
4
+ cattr_reader :attribute_mapping
5
+ @@attribute_mapping = {
6
+ :ACK => :ack,
7
+ :CURRENCYCODE => :currency_code,
8
+ :ERRORCODE => :error_code,
9
+ :ORDERTIME => :order_time,
10
+ :PAYMENTSTATUS => :payment_status,
11
+ :PAYMENTTYPE => :payment_type,
12
+ :PENDINGREASON => :pending_reason,
13
+ :PROTECTIONELIGIBILITY => :protection_eligibility,
14
+ :PROTECTIONELIGIBILITYTYPE => :protection_eligibility_type,
15
+ :REASONCODE => :reason_code,
16
+ :RECEIPTID => :receipt_id,
17
+ :SECUREMERCHANTACCOUNTID => :secure_merchant_account_id,
18
+ :TRANSACTIONID => :transaction_id,
19
+ :TRANSACTIONTYPE => :transaction_type,
20
+ :PAYMENTREQUESTID => :request_id,
21
+ :SELLERPAYPALACCOUNTID => :seller_id,
22
+ :EXCHANGERATE => :exchange_rate
23
+ }
24
+ attr_accessor *@@attribute_mapping.values
25
+ attr_accessor :amount
26
+
27
+ def initialize(attributes = {})
28
+ attrs = attributes.dup
29
+ @@attribute_mapping.each do |key, value|
30
+ self.send "#{value}=", attrs.delete(key)
31
+ end
32
+ @amount = Common::Amount.new(
33
+ :total => attrs.delete(:AMT),
34
+ :fee => attrs.delete(:FEEAMT),
35
+ :tax => attrs.delete(:TAXAMT)
36
+ )
37
+
38
+ # warn ignored params
39
+ attrs.each do |key, value|
40
+ Paypal.log "Ignored Parameter (#{self.class}): #{key}=#{value}", :warn
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,41 @@
1
+ module Paypal
2
+ module Payment
3
+ class Response::Item < Base
4
+ cattr_reader :attribute_mapping
5
+ @@attribute_mapping = {
6
+ :NAME => :name,
7
+ :DESC => :description,
8
+ :QTY => :quantity,
9
+ :NUMBER => :number,
10
+ :ITEMCATEGORY => :category,
11
+ :ITEMWIDTHVALUE => :width,
12
+ :ITEMHEIGHTVALUE => :height,
13
+ :ITEMLENGTHVALUE => :length,
14
+ :ITEMWEIGHTVALUE => :weight,
15
+ :SHIPPINGAMT => :shipping,
16
+ :HANDLINGAMT => :handling,
17
+ :CURRENCYCODE => :currency
18
+
19
+ }
20
+ attr_accessor *@@attribute_mapping.values
21
+ attr_accessor :amount
22
+
23
+ def initialize(attributes = {})
24
+ attrs = attributes.dup
25
+ @@attribute_mapping.each do |key, value|
26
+ self.send "#{value}=", attrs.delete(key)
27
+ end
28
+ @quantity = @quantity.to_i
29
+ @amount = Common::Amount.new(
30
+ :total => attrs.delete(:AMT),
31
+ :tax => attrs.delete(:TAXAMT)
32
+ )
33
+
34
+ # warn ignored params
35
+ attrs.each do |key, value|
36
+ Paypal.log "Ignored Parameter (#{self.class}): #{key}=#{value}", :warn
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,7 @@
1
+ module Paypal
2
+ module Payment
3
+ class Response::Payer < Base
4
+ attr_optional :identifier, :status, :first_name, :last_name, :email, :company, :phone_number
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module Paypal
2
+ module Payment
3
+ class Response::Reference < Base
4
+ attr_required :identifier
5
+ attr_optional :description, :status
6
+ attr_accessor :info
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Paypal
2
+ module Payment
3
+ class Response::Refund < Base
4
+ attr_optional :transaction_id
5
+ attr_accessor :amount
6
+
7
+ def initialize(attributes = {})
8
+ super
9
+ @amount = Common::Amount.new(attributes[:amount])
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ module Paypal
2
+ module Util
3
+
4
+ def self.formatted_amount(x)
5
+ # Thanks @nahi ;)
6
+ sprintf "%0.2f", BigDecimal.new(x.to_s).truncate(2)
7
+ end
8
+
9
+ def self.to_numeric(x)
10
+ if x.to_f == x.to_i
11
+ x.to_i
12
+ else
13
+ x.to_f
14
+ end
15
+ end
16
+
17
+ def numeric_attribute?(key)
18
+ !!(key.to_s =~ /(amount|frequency|cycles|paid)/)
19
+ end
20
+
21
+ def ==(other)
22
+ instance_variables.all? do |key|
23
+ instance_variable_get(key) == other.instance_variable_get(key)
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1 @@
1
+ BILLINGAGREEMENTID=B%2d8XW15926RT2253736&BILLINGAGREEMENTDESCRIPTION=Reference%20Payment%20Agreement&BILLINGAGREEMENTSTATUS=Canceled&TIMESTAMP=2011%2d08%2d06T09%3a47%3a41Z&CORRELATIONID=28e5a24b3ea98&ACK=Success&VERSION=78%2e0&BUILD=2020243&EMAIL=client_1305381804_per%40matake%2ejp&PAYERID=CMJLWADKVFQYJ&PAYERSTATUS=verified&FIRSTNAME=Test&LASTNAME=User&COUNTRYCODE=US
@@ -0,0 +1 @@
1
+ BILLINGAGREEMENTID=B%2d8XW15926RT2253736&BILLINGAGREEMENTDESCRIPTION=Reference%20Payment%20Agreement&BILLINGAGREEMENTSTATUS=Canceled&TIMESTAMP=2011%2d08%2d06T09%3a47%3a41Z&CORRELATIONID=28e5a24b3ea98&ACK=Success&VERSION=78%2e0&BUILD=2020243&EMAIL=client_1305381804_per%40matake%2ejp&PAYERID=CMJLWADKVFQYJ&PAYERSTATUS=verified&FIRSTNAME=Test&LASTNAME=User&COUNTRYCODE=US
@@ -0,0 +1 @@
1
+ BILLINGAGREEMENTID=B%2d45776062X95244343&TIMESTAMP=2011%2d08%2d06T07%3a53%3a50Z&CORRELATIONID=9a16fde4456e1&ACK=Success&VERSION=78%2e0&BUILD=2020243
@@ -0,0 +1 @@
1
+ TIMESTAMP=2011%2d02%2d08T07%3a18%3a29Z&CORRELATIONID=fde1527b25b4f&ACK=Failure&VERSION=66%2e0&BUILD=1704252&L_ERRORCODE0=11502&L_SHORTMESSAGE0=Invalid%20Token&L_LONGMESSAGE0=The%20token%20is%20invalid&L_SEVERITYCODE0=Error
@@ -0,0 +1 @@
1
+ PROFILEID=I%2dL8N58XFUCET3&PROFILESTATUS=ActiveProfile&TIMESTAMP=2011%2d02%2d08T07%3a17%3a51Z&CORRELATIONID=7d2e125f5ca63&ACK=Success&VERSION=66%2e0&BUILD=1704252
@@ -0,0 +1 @@
1
+ ACK=Failure&BUILD=8334781&CORRELATIONID=dd9e16358819b&L_ERRORCODE0=10609&L_LONGMESSAGE0=Transaction+id+is+invalid.&L_SEVERITYCODE0=Error&L_SHORTMESSAGE0=Invalid+transactionID.&TIMESTAMP=2013-11-05T17%3A43%3A56Z&VERSION=88.0
@@ -0,0 +1 @@
1
+ ACK=Success&AMT=440.00&AUTHORIZATIONID=2RG78938NK8989844&BUILD=8334781&CORRELATIONID=311611c111b48&CURRENCYCODE=BRL&EXCHANGERATE=0.426354&FEEAMT=13.16&ORDERTIME=2013-11-05T17%3A34%3A56Z&PARENTTRANSACTIONID=2RG78938NK8989844&PAYMENTSTATUS=Completed&PAYMENTTYPE=instant&PENDINGREASON=None&PROTECTIONELIGIBILITY=Ineligible&PROTECTIONELIGIBILITYTYPE=None&REASONCODE=None&SETTLEAMT=181.98&TAXAMT=0.00&TIMESTAMP=2013-11-05T17%3A34%3A56Z&TRANSACTIONID=9VW4495267708531S&TRANSACTIONTYPE=expresscheckout&VERSION=88.0
@@ -0,0 +1 @@
1
+ TIMESTAMP=2011%2d02%2d08T07%3a15%3a19Z&CORRELATIONID=5dd0308345382&ACK=Failure&VERSION=66%2e0&BUILD=1721431&L_ERRORCODE0=10410&L_SHORTMESSAGE0=Invalid%20token&L_LONGMESSAGE0=Invalid%20token%2e&L_SEVERITYCODE0=Error
@@ -0,0 +1 @@
1
+ TOKEN=EC-9E2743126S4330617&SUCCESSPAGEREDIRECTREQUESTED=false&TIMESTAMP=2011-02-08T03:23:55Z&CORRELATIONID=15b93874c358c&ACK=Success&VERSION=66.0&BUILD=1721431&INSURANCEOPTIONSELECTED=false&SHIPPINGOPTIONISDEFAULT=false&PAYMENTINFO_0_TRANSACTIONID=8NC65222871997739&PAYMENTINFO_0_TRANSACTIONTYPE=expresscheckout&PAYMENTINFO_0_PAYMENTTYPE=instant&PAYMENTINFO_0_ORDERTIME=2011-02-08T03:23:54Z&PAYMENTINFO_0_AMT=14.00&PAYMENTINFO_0_FEEAMT=0.85&PAYMENTINFO_0_TAXAMT=0.00&PAYMENTINFO_0_CURRENCYCODE=USD&PAYMENTINFO_0_PAYMENTSTATUS=Completed&PAYMENTINFO_0_PENDINGREASON=None&PAYMENTINFO_0_REASONCODE=None&PAYMENTINFO_0_PROTECTIONELIGIBILITY=Ineligible&PAYMENTINFO_0_PROTECTIONELIGIBILITYTYPE=None&PAYMENTINFO_0_ERRORCODE=0&PAYMENTINFO_0_ACK=Success
@@ -0,0 +1 @@
1
+ TOKEN=EC-9E2743126S4330617&SUCCESSPAGEREDIRECTREQUESTED=false&TIMESTAMP=2011-02-08T03:23:55Z&CORRELATIONID=15b93874c358c&ACK=Success&VERSION=66.0&BUILD=1721431&INSURANCEOPTIONSELECTED=false&SHIPPINGOPTIONISDEFAULT=false&PAYMENTINFO_0_TRANSACTIONID=8NC65222871997739&PAYMENTINFO_0_TRANSACTIONTYPE=expresscheckout&PAYMENTINFO_0_PAYMENTTYPE=instant&PAYMENTINFO_0_ORDERTIME=2011-02-08T03:23:54Z&PAYMENTINFO_0_AMT=14.00&PAYMENTINFO_0_FEEAMT=0.85&PAYMENTINFO_0_TAXAMT=0.00&PAYMENTINFO_0_CURRENCYCODE=USD&PAYMENTINFO_0_PAYMENTSTATUS=Completed&PAYMENTINFO_0_PENDINGREASON=None&PAYMENTINFO_0_REASONCODE=None&PAYMENTINFO_0_PROTECTIONELIGIBILITY=Ineligible&PAYMENTINFO_0_PROTECTIONELIGIBILITYTYPE=None&PAYMENTINFO_0_ERRORCODE=0&BILLINGAGREEMENTID=B-1XR87946TC504770W&PAYMENTINFO_0_ACK=Success
@@ -0,0 +1 @@
1
+ TOKEN=EC%2d7HG122968U843864S&CHECKOUTSTATUS=PaymentActionNotInitiated&TIMESTAMP=2011%2d04%2d12T03%3a51%3a58Z&CORRELATIONID=6a0a92ea79ac3&ACK=Success&VERSION=69%2e0&BUILD=1824201&EMAIL=buyer_1297999636_per%40cerego%2ecom&PAYERID=9RWDTMRKKHQ8S&PAYERSTATUS=verified&FIRSTNAME=Test&LASTNAME=User&COUNTRYCODE=US&CURRENCYCODE=USD&AMT=1000&ITEMAMT=1000&SHIPPINGAMT=0&HANDLINGAMT=0&TAXAMT=0&DESC=Instant%20Payment%20Request&NOTIFYURL=http%3a%2f%2fmerchant%2eexample%2ecom%2fnotify&INSURANCEAMT=0&SHIPDISCAMT=0&L_ITEMHEIGHTVALUE0=%20%20%200%2e00000&L_ITEMHEIGHTVALUE1=%20%20%200%2e00000&L_ITEMHEIGHTVALUE2=%20%20%200%2e00000&L_ITEMHEIGHTVALUE3=%20%20%200%2e00000&L_ITEMHEIGHTVALUE4=%20%20%200%2e00000&L_ITEMHEIGHTVALUE5=%20%20%200%2e00000&L_ITEMHEIGHTVALUE6=%20%20%200%2e00000&L_ITEMHEIGHTVALUE7=%20%20%200%2e00000&L_ITEMHEIGHTVALUE8=%20%20%200%2e00000&L_ITEMHEIGHTVALUE9=%20%20%200%2e00000&L_ITEMHEIGHTVALUE10=%20%20%200%2e00000&L_ITEMHEIGHTVALUE11=%20%20%200%2e00000&L_ITEMHEIGHTVALUE12=%20%20%200%2e00000&L_ITEMHEIGHTVALUE13=%20%20%200%2e00000&L_ITEMHEIGHTVALUE14=%20%20%200%2e00000&L_ITEMHEIGHTVALUE15=%20%20%200%2e00000&L_ITEMHEIGHTVALUE16=%20%20%200%2e00000&L_ITEMHEIGHTVALUE17=%20%20%200%2e00000&L_ITEMHEIGHTVALUE18=%20%20%200%2e00000&L_ITEMHEIGHTVALUE19=%20%20%200%2e00000&L_ITEMWIDTHVALUE0=%20%20%200%2e00000&L_ITEMWIDTHVALUE1=%20%20%200%2e00000&L_ITEMWIDTHVALUE2=%20%20%200%2e00000&L_ITEMWIDTHVALUE3=%20%20%200%2e00000&L_ITEMWIDTHVALUE4=%20%20%200%2e00000&L_ITEMWIDTHVALUE5=%20%20%200%2e00000&L_ITEMWIDTHVALUE6=%20%20%200%2e00000&L_ITEMWIDTHVALUE7=%20%20%200%2e00000&L_ITEMWIDTHVALUE8=%20%20%200%2e00000&L_ITEMWIDTHVALUE9=%20%20%200%2e00000&L_ITEMWIDTHVALUE10=%20%20%200%2e00000&L_ITEMWIDTHVALUE11=%20%20%200%2e00000&L_ITEMWIDTHVALUE12=%20%20%200%2e00000&L_ITEMWIDTHVALUE13=%20%20%200%2e00000&L_ITEMWIDTHVALUE14=%20%20%200%2e00000&L_ITEMWIDTHVALUE15=%20%20%200%2e00000&L_ITEMWIDTHVALUE16=%20%20%200%2e00000&L_ITEMWIDTHVALUE17=%20%20%200%2e00000&L_ITEMWIDTHVALUE18=%20%20%200%2e00000&L_ITEMWIDTHVALUE19=%20%20%200%2e00000&L_ITEMLENGTHVALUE0=%20%20%200%2e00000&L_ITEMLENGTHVALUE1=%20%20%200%2e00000&L_ITEMLENGTHVALUE2=%20%20%200%2e00000&L_ITEMLENGTHVALUE3=%20%20%200%2e00000&L_ITEMLENGTHVALUE4=%20%20%200%2e00000&L_ITEMLENGTHVALUE5=%20%20%200%2e00000&L_ITEMLENGTHVALUE6=%20%20%200%2e00000&L_ITEMLENGTHVALUE7=%20%20%200%2e00000&L_ITEMLENGTHVALUE8=%20%20%200%2e00000&L_ITEMLENGTHVALUE9=%20%20%200%2e00000&L_ITEMLENGTHVALUE10=%20%20%200%2e00000&L_ITEMLENGTHVALUE11=%20%20%200%2e00000&L_ITEMLENGTHVALUE12=%20%20%200%2e00000&L_ITEMLENGTHVALUE13=%20%20%200%2e00000&L_ITEMLENGTHVALUE14=%20%20%200%2e00000&L_ITEMLENGTHVALUE15=%20%20%200%2e00000&L_ITEMLENGTHVALUE16=%20%20%200%2e00000&L_ITEMLENGTHVALUE17=%20%20%200%2e00000&L_ITEMLENGTHVALUE18=%20%20%200%2e00000&L_ITEMLENGTHVALUE19=%20%20%200%2e00000&L_NAME0=Item0&L_NAME1=Item1&L_NAME2=Item2&L_NAME3=Item3&L_NAME4=Item4&L_NAME5=Item5&L_NAME6=Item6&L_NAME7=Item7&L_NAME8=Item8&L_NAME9=Item9&L_NAME10=Item10&L_NAME11=Item11&L_NAME12=Item12&L_NAME13=Item13&L_NAME14=Item14&L_NAME15=Item15&L_NAME16=Item16&L_NAME17=Item17&L_NAME18=Item18&L_NAME19=Item19&L_ITEMWEIGHTVALUE0=%20%20%200%2e00000&L_ITEMWEIGHTVALUE1=%20%20%200%2e00000&L_ITEMWEIGHTVALUE2=%20%20%200%2e00000&L_ITEMWEIGHTVALUE3=%20%20%200%2e00000&L_ITEMWEIGHTVALUE4=%20%20%200%2e00000&L_ITEMWEIGHTVALUE5=%20%20%200%2e00000&L_ITEMWEIGHTVALUE6=%20%20%200%2e00000&L_ITEMWEIGHTVALUE7=%20%20%200%2e00000&L_ITEMWEIGHTVALUE8=%20%20%200%2e00000&L_ITEMWEIGHTVALUE9=%20%20%200%2e00000&L_ITEMWEIGHTVALUE10=%20%20%200%2e00000&L_ITEMWEIGHTVALUE11=%20%20%200%2e00000&L_ITEMWEIGHTVALUE12=%20%20%200%2e00000&L_ITEMWEIGHTVALUE13=%20%20%200%2e00000&L_ITEMWEIGHTVALUE14=%20%20%200%2e00000&L_ITEMWEIGHTVALUE15=%20%20%200%2e00000&L_ITEMWEIGHTVALUE16=%20%20%200%2e00000&L_ITEMWEIGHTVALUE17=%20%20%200%2e00000&L_ITEMWEIGHTVALUE18=%20%20%200%2e00000&L_ITEMWEIGHTVALUE19=%20%20%200%2e00000&L_TAXAMT0=%20%20%200%2e00000&L_TAXAMT1=%20%20%200%2e00000&L_TAXAMT2=%20%20%200%2e00000&L_TAXAMT3=%20%20%200%2e00000&L_TAXAMT4=%20%20%200%2e00000&L_TAXAMT5=%20%20%200%2e00000&L_TAXAMT6=%20%20%200%2e00000&L_TAXAMT7=%20%20%200%2e00000&L_TAXAMT8=%20%20%200%2e00000&L_TAXAMT9=%20%20%200%2e00000&L_TAXAMT10=%20%20%200%2e00000&L_TAXAMT11=%20%20%200%2e00000&L_TAXAMT12=%20%20%200%2e00000&L_TAXAMT13=%20%20%200%2e00000&L_TAXAMT14=%20%20%200%2e00000&L_TAXAMT15=%20%20%200%2e00000&L_TAXAMT16=%20%20%200%2e00000&L_TAXAMT17=%20%20%200%2e00000&L_TAXAMT18=%20%20%200%2e00000&L_TAXAMT19=%20%20%200%2e00000&L_DESC0=A%20new%20Item%200&L_DESC1=A%20new%20Item%201&L_DESC2=A%20new%20Item%202&L_DESC3=A%20new%20Item%203&L_DESC4=A%20new%20Item%204&L_DESC5=A%20new%20Item%205&L_DESC6=A%20new%20Item%206&L_DESC7=A%20new%20Item%207&L_DESC8=A%20new%20Item%208&L_DESC9=A%20new%20Item%209&L_DESC10=A%20new%20Item%2010&L_DESC11=A%20new%20Item%2011&L_DESC12=A%20new%20Item%2012&L_DESC13=A%20new%20Item%2013&L_DESC14=A%20new%20Item%2014&L_DESC15=A%20new%20Item%2015&L_DESC16=A%20new%20Item%2016&L_DESC17=A%20new%20Item%2017&L_DESC18=A%20new%20Item%2018&L_DESC19=A%20new%20Item%2019&L_AMT0=50&L_AMT1=50&L_AMT2=50&L_AMT3=50&L_AMT4=50&L_AMT5=50&L_AMT6=50&L_AMT7=50&L_AMT8=50&L_AMT9=50&L_AMT10=50&L_AMT11=50&L_AMT12=50&L_AMT13=50&L_AMT14=50&L_AMT15=50&L_AMT16=50&L_AMT17=50&L_AMT18=50&L_AMT19=50&L_QTY0=1&L_QTY1=1&L_QTY2=1&L_QTY3=1&L_QTY4=1&L_QTY5=1&L_QTY6=1&L_QTY7=1&L_QTY8=1&L_QTY9=1&L_QTY10=1&L_QTY11=1&L_QTY12=1&L_QTY13=1&L_QTY14=1&L_QTY15=1&L_QTY16=1&L_QTY17=1&L_QTY18=1&L_QTY19=1&PAYMENTREQUEST_0_CURRENCYCODE=JPY&PAYMENTREQUEST_0_AMT=10&PAYMENTREQUEST_0_ITEMAMT=10&PAYMENTREQUEST_0_SHIPPINGAMT=0&PAYMENTREQUEST_0_HANDLINGAMT=0&PAYMENTREQUEST_0_TAXAMT=0&PAYMENTREQUEST_0_DESC=Instant%20Payment%20Request&PAYMENTREQUEST_0_NOTIFYURL=http%3a%2f%2fmerchant%2eexample%2ecom%2fnotify&PAYMENTREQUEST_0_INSURANCEAMT=0&PAYMENTREQUEST_0_SHIPDISCAMT=0&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE1=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE2=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE3=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE4=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE5=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE6=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE7=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE8=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE9=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE10=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE11=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE12=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE13=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE14=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE15=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE16=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE17=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE18=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE19=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE1=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE2=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE3=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE4=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE5=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE6=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE7=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE8=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE9=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE10=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE11=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE12=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE13=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE14=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE15=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE16=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE17=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE18=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE19=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE1=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE2=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE3=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE4=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE5=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE6=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE7=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE8=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE9=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE10=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE11=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE12=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE13=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE14=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE15=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE16=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE17=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE18=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE19=%20%20%200%2e00000&L_PAYMENTREQUEST_0_NAME0=Item0&L_PAYMENTREQUEST_0_NAME1=Item1&L_PAYMENTREQUEST_0_NAME2=Item2&L_PAYMENTREQUEST_0_NAME3=Item3&L_PAYMENTREQUEST_0_NAME4=Item4&L_PAYMENTREQUEST_0_NAME5=Item5&L_PAYMENTREQUEST_0_NAME6=Item6&L_PAYMENTREQUEST_0_NAME7=Item7&L_PAYMENTREQUEST_0_NAME8=Item8&L_PAYMENTREQUEST_0_NAME9=Item9&L_PAYMENTREQUEST_0_NAME10=Item10&L_PAYMENTREQUEST_0_NAME11=Item11&L_PAYMENTREQUEST_0_NAME12=Item12&L_PAYMENTREQUEST_0_NAME13=Item13&L_PAYMENTREQUEST_0_NAME14=Item14&L_PAYMENTREQUEST_0_NAME15=Item15&L_PAYMENTREQUEST_0_NAME16=Item16&L_PAYMENTREQUEST_0_NAME17=Item17&L_PAYMENTREQUEST_0_NAME18=Item18&L_PAYMENTREQUEST_0_NAME19=Item19&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE1=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE2=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE3=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE4=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE5=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE6=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE7=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE8=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE9=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE10=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE11=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE12=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE13=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE14=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE15=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE16=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE17=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE18=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE19=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT1=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT2=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT3=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT4=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT5=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT6=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT7=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT8=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT9=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT10=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT11=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT12=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT13=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT14=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT15=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT16=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT17=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT18=%20%20%200%2e00000&L_PAYMENTREQUEST_0_TAXAMT19=%20%20%200%2e00000&L_PAYMENTREQUEST_0_DESC0=A%20new%20Item%200&L_PAYMENTREQUEST_0_DESC1=A%20new%20Item%201&L_PAYMENTREQUEST_0_DESC2=A%20new%20Item%202&L_PAYMENTREQUEST_0_DESC3=A%20new%20Item%203&L_PAYMENTREQUEST_0_DESC4=A%20new%20Item%204&L_PAYMENTREQUEST_0_DESC5=A%20new%20Item%205&L_PAYMENTREQUEST_0_DESC6=A%20new%20Item%206&L_PAYMENTREQUEST_0_DESC7=A%20new%20Item%207&L_PAYMENTREQUEST_0_DESC8=A%20new%20Item%208&L_PAYMENTREQUEST_0_DESC9=A%20new%20Item%209&L_PAYMENTREQUEST_0_DESC10=A%20new%20Item%2010&L_PAYMENTREQUEST_0_DESC11=A%20new%20Item%2011&L_PAYMENTREQUEST_0_DESC12=A%20new%20Item%2012&L_PAYMENTREQUEST_0_DESC13=A%20new%20Item%2013&L_PAYMENTREQUEST_0_DESC14=A%20new%20Item%2014&L_PAYMENTREQUEST_0_DESC15=A%20new%20Item%2015&L_PAYMENTREQUEST_0_DESC16=A%20new%20Item%2016&L_PAYMENTREQUEST_0_DESC17=A%20new%20Item%2017&L_PAYMENTREQUEST_0_DESC18=A%20new%20Item%2018&L_PAYMENTREQUEST_0_DESC19=A%20new%20Item%2019&L_PAYMENTREQUEST_0_AMT0=50&L_PAYMENTREQUEST_0_AMT1=50&L_PAYMENTREQUEST_0_AMT2=50&L_PAYMENTREQUEST_0_AMT3=50&L_PAYMENTREQUEST_0_AMT4=50&L_PAYMENTREQUEST_0_AMT5=50&L_PAYMENTREQUEST_0_AMT6=50&L_PAYMENTREQUEST_0_AMT7=50&L_PAYMENTREQUEST_0_AMT8=50&L_PAYMENTREQUEST_0_AMT9=50&L_PAYMENTREQUEST_0_AMT10=50&L_PAYMENTREQUEST_0_AMT11=50&L_PAYMENTREQUEST_0_AMT12=50&L_PAYMENTREQUEST_0_AMT13=50&L_PAYMENTREQUEST_0_AMT14=50&L_PAYMENTREQUEST_0_AMT15=50&L_PAYMENTREQUEST_0_AMT16=50&L_PAYMENTREQUEST_0_AMT17=50&L_PAYMENTREQUEST_0_AMT18=50&L_PAYMENTREQUEST_0_AMT19=50&L_PAYMENTREQUEST_0_QTY0=1&L_PAYMENTREQUEST_0_QTY1=1&L_PAYMENTREQUEST_0_QTY2=1&L_PAYMENTREQUEST_0_QTY3=1&L_PAYMENTREQUEST_0_QTY4=1&L_PAYMENTREQUEST_0_QTY5=1&L_PAYMENTREQUEST_0_QTY6=1&L_PAYMENTREQUEST_0_QTY7=1&L_PAYMENTREQUEST_0_QTY8=1&L_PAYMENTREQUEST_0_QTY9=1&L_PAYMENTREQUEST_0_QTY10=1&L_PAYMENTREQUEST_0_QTY11=1&L_PAYMENTREQUEST_0_QTY12=1&L_PAYMENTREQUEST_0_QTY13=1&L_PAYMENTREQUEST_0_QTY14=1&L_PAYMENTREQUEST_0_QTY15=1&L_PAYMENTREQUEST_0_QTY16=1&L_PAYMENTREQUEST_0_QTY17=1&L_PAYMENTREQUEST_0_QTY18=1&L_PAYMENTREQUEST_0_QTY19=1&PAYMENTREQUESTINFO_0_ERRORCODE=0
@@ -0,0 +1 @@
1
+ TIMESTAMP=2011%2d07%2d19T08%3a59%3a52Z&CORRELATIONID=ed8096a3c3d7d&ACK=Failure&VERSION=72%2e0&BUILD=1982348&L_ERRORCODE0=11451&L_SHORTMESSAGE0=Billing%20Agreement%20Id%20or%20transaction%20Id%20is%20not%20valid&L_LONGMESSAGE0=Billing%20Agreement%20Id%20or%20transaction%20Id%20is%20not%20valid&L_SEVERITYCODE0=Error&TRANSACTIONTYPE=None&PAYMENTTYPE=None&ORDERTIME=1970%2d01%2d01T00%3a00%3a00Z&PAYMENTSTATUS=None&PENDINGREASON=None&REASONCODE=None
@@ -0,0 +1 @@
1
+ BILLINGAGREEMENTID=B%2d7HU5U5U1ULU14U49E&TIMESTAMP=2011%2d07%2d19T08%3a30%3a08Z&CORRELATIONID=12ca85fb3c9d2&ACK=Success&VERSION=72%2e0&BUILD=1982348&TRANSACTIONID=3IV51111LY1211907&TRANSACTIONTYPE=merchtpmt&PAYMENTTYPE=instant&ORDERTIME=2011%2d07%2d19T08%3a30%3a06Z&AMT=192&FEEAMT=47&TAXAMT=0&CURRENCYCODE=JPY&PAYMENTSTATUS=Completed&PENDINGREASON=None&REASONCODE=None&PROTECTIONELIGIBILITY=Ineligible&PROTECTIONELIGIBILITYTYPE=None
@@ -0,0 +1 @@
1
+ ACK=Success&AUTHORIZATIONID=1a2b3c4d5e6f&BUILD=13055236&TIMESTAMP=2014-10-03T17%3A34%3A56Z
@@ -0,0 +1 @@
1
+ TOKEN=EC%2d9E2743126S4330617&CHECKOUTSTATUS=PaymentActionCompleted&TIMESTAMP=2011%2d02%2d08T07%3a10%3a26Z&CORRELATIONID=8f5fddf13ed10&ACK=Failure&VERSION=66%2e0&BUILD=1721431&L_ERRORCODE0=10411&L_SHORTMESSAGE0=This%20Express%20Checkout%20session%20has%20expired%2e&L_LONGMESSAGE0=This%20Express%20Checkout%20session%20has%20expired%2e%20%20Token%20value%20is%20no%20longer%20valid%2e&L_SEVERITYCODE0=Error&EMAIL=valid_1296805890_per%40matake%2ejp&PAYERID=PRT3TZ6MCBCNC&PAYERSTATUS=verified&FIRSTNAME=Test&LASTNAME=User&COUNTRYCODE=US&SHIPTONAME=Test%20User&SHIPTOSTREET=1%20Main%20St&SHIPTOCITY=San%20Jose&SHIPTOSTATE=CA&SHIPTOZIP=95131&SHIPTOCOUNTRYCODE=US&SHIPTOCOUNTRYNAME=United%20States&ADDRESSSTATUS=Confirmed&CURRENCYCODE=USD&AMT=14%2e00&SHIPPINGAMT=0%2e00&HANDLINGAMT=0%2e00&TAXAMT=0%2e00&INSURANCEAMT=0%2e00&SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_CURRENCYCODE=USD&PAYMENTREQUEST_0_AMT=14%2e00&PAYMENTREQUEST_0_SHIPPINGAMT=0%2e00&PAYMENTREQUEST_0_HANDLINGAMT=0%2e00&PAYMENTREQUEST_0_TAXAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEAMT=0%2e00&PAYMENTREQUEST_0_SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_TRANSACTIONID=8NC65222871997739&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&PAYMENTREQUEST_0_SHIPTONAME=Test%20User&PAYMENTREQUEST_0_SHIPTOSTREET=1%20Main%20St&PAYMENTREQUEST_0_SHIPTOCITY=San%20Jose&PAYMENTREQUEST_0_SHIPTOSTATE=CA&PAYMENTREQUEST_0_SHIPTOZIP=95131&PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE=US&PAYMENTREQUEST_0_SHIPTOCOUNTRYNAME=United%20States&PAYMENTREQUESTINFO_0_TRANSACTIONID=8NC65222871997739&PAYMENTREQUESTINFO_0_ERRORCODE=0
@@ -0,0 +1 @@
1
+ TOKEN=EC%2d7HG122968U843864S&CHECKOUTSTATUS=PaymentActionNotInitiated&TIMESTAMP=2011%2d04%2d12T03%3a51%3a58Z&CORRELATIONID=6a0a92ea79ac3&ACK=Success&VERSION=69%2e0&BUILD=1824201&EMAIL=buyer_1297999636_per%40cerego%2ecom&PAYERID=9RWDTMRKKHQ8S&PAYERSTATUS=verified&FIRSTNAME=Test&LASTNAME=User&COUNTRYCODE=US&CURRENCYCODE=JPY&AMT=10&ITEMAMT=10&SHIPPINGAMT=0&HANDLINGAMT=0&TAXAMT=0&DESC=Instant%20Payment%20Request&NOTIFYURL=http%3a%2f%2fmerchant%2eexample%2ecom%2fnotify&INSURANCEAMT=0&SHIPDISCAMT=0&L_NAME0=Item1&L_QTY0=1&L_TAXAMT0=0&L_AMT0=10&L_DESC0=Item1%20Desc&L_ITEMWEIGHTVALUE0=%20%20%200%2e00000&L_ITEMLENGTHVALUE0=%20%20%200%2e00000&L_ITEMWIDTHVALUE0=%20%20%200%2e00000&L_ITEMHEIGHTVALUE0=%20%20%200%2e00000&L_ITEMCATEGORY0=Digital&PAYMENTREQUEST_0_CURRENCYCODE=JPY&PAYMENTREQUEST_0_AMT=10&PAYMENTREQUEST_0_ITEMAMT=10&PAYMENTREQUEST_0_SHIPPINGAMT=0&PAYMENTREQUEST_0_HANDLINGAMT=0&PAYMENTREQUEST_0_TAXAMT=0&PAYMENTREQUEST_0_DESC=Instant%20Payment%20Request&PAYMENTREQUEST_0_NOTIFYURL=http%3a%2f%2fmerchant%2eexample%2ecom%2fnotify&PAYMENTREQUEST_0_INSURANCEAMT=0&PAYMENTREQUEST_0_SHIPDISCAMT=0&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&L_PAYMENTREQUEST_0_NAME0=Item1&L_PAYMENTREQUEST_0_QTY0=1&L_PAYMENTREQUEST_0_TAXAMT0=0&L_PAYMENTREQUEST_0_AMT0=10&L_PAYMENTREQUEST_0_DESC0=Item1%20Desc&L_PAYMENTREQUEST_0_ITEMWEIGHTVALUE0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMLENGTHVALUE0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMWIDTHVALUE0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMHEIGHTVALUE0=%20%20%200%2e00000&L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital&PAYMENTREQUESTINFO_0_ERRORCODE=0
@@ -0,0 +1 @@
1
+ TOKEN=EC%2d4D299105F9409730D&BILLINGAGREEMENTACCEPTEDSTATUS=1&CHECKOUTSTATUS=PaymentActionNotInitiated&TIMESTAMP=2011%2d08%2d08T01%3a56%3a13Z&CORRELATIONID=53a48e61dfca7&ACK=Success&VERSION=78%2e0&BUILD=2020243&EMAIL=client_1305381804_per%40matake%2ejp&PAYERID=CMJLWADKVFQYJ&PAYERSTATUS=verified&FIRSTNAME=Test&LASTNAME=User&COUNTRYCODE=US&CURRENCYCODE=JPY&AMT=0&SHIPPINGAMT=0&HANDLINGAMT=0&TAXAMT=0&INSURANCEAMT=0&SHIPDISCAMT=0&PAYMENTREQUEST_0_CURRENCYCODE=JPY&PAYMENTREQUEST_0_AMT=0&PAYMENTREQUEST_0_SHIPPINGAMT=0&PAYMENTREQUEST_0_HANDLINGAMT=0&PAYMENTREQUEST_0_TAXAMT=0&PAYMENTREQUEST_0_INSURANCEAMT=0&PAYMENTREQUEST_0_SHIPDISCAMT=0&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&PAYMENTREQUESTINFO_0_ERRORCODE=0
@@ -0,0 +1 @@
1
+ PROFILEID=I%2dK1VFLRN3VVG0x&TIMESTAMP=2011%2d02%2d08T07%3a19%3a43Z&CORRELATIONID=edc954f1c34c5&ACK=Failure&VERSION=66%2e0&BUILD=1704252&L_ERRORCODE0=11552&L_SHORTMESSAGE0=Invalid%20profile%20ID&L_LONGMESSAGE0=The%20profile%20ID%20is%20invalid&L_SEVERITYCODE0=Error
@@ -0,0 +1 @@
1
+ PROFILEID=I%2dK1VFLRN3VVG0&STATUS=Active&AUTOBILLOUTAMT=NoAutoBill&DESC=iKnow%21%20Subscription&MAXFAILEDPAYMENTS=0&SUBSCRIBERNAME=Test%20User&PROFILESTARTDATE=2011%2d02%2d03T15%3a00%3a00Z&NEXTBILLINGDATE=2011%2d03%2d04T10%3a00%3a00Z&NUMCYCLESCOMPLETED=1&NUMCYCLESREMAINING=18446744073709551615&OUTSTANDINGBALANCE=0&FAILEDPAYMENTCOUNT=0&LASTPAYMENTDATE=2011%2d02%2d04T10%3a50%3a56Z&LASTPAYMENTAMT=1000&TRIALAMTPAID=0&REGULARAMTPAID=1000&AGGREGATEAMT=1000&AGGREGATEOPTIONALAMT=0&FINALPAYMENTDUEDATE=1970%2d01%2d01T00%3a00%3a00Z&TIMESTAMP=2011%2d02%2d08T07%3a19%3a25Z&CORRELATIONID=8e18dd6545045&ACK=Success&VERSION=66%2e0&BUILD=1704252&SHIPTOSTREET=1%20Main%20St&SHIPTOCITY=San%20Jose&SHIPTOSTATE=CA&SHIPTOZIP=95131&SHIPTOCOUNTRYCODE=US&SHIPTOCOUNTRY=US&SHIPTOCOUNTRYNAME=United%20States&SHIPADDRESSOWNER=PayPal&SHIPADDRESSSTATUS=Unconfirmed&BILLINGPERIOD=Month&BILLINGFREQUENCY=1&TOTALBILLINGCYCLES=0&CURRENCYCODE=JPY&AMT=1000&SHIPPINGAMT=0&TAXAMT=0&REGULARBILLINGPERIOD=Month&REGULARBILLINGFREQUENCY=1&REGULARTOTALBILLINGCYCLES=0&REGULARCURRENCYCODE=JPY&REGULARAMT=1000&REGULARSHIPPINGAMT=0&REGULARTAXAMT=0
@@ -0,0 +1 @@
1
+ ADDRESSOWNER=PayPal&ADDRESSSTATUS=None&TIMESTAMP=2012%2d02%2d23T21%3a07%3a22Z&CORRELATIONID=4e18d75a23953&ACK=Failure&VERSION=78%2e0&BUILD=2571254&L_ERRORCODE0=10004&L_SHORTMESSAGE0=Transaction%20refused%20because%20of%20an%20invalid%20argument%2e%20See%20additional%20error%20messages%20for%20details%2e&L_LONGMESSAGE0=The%20transaction%20id%20is%20not%20valid&L_SEVERITYCODE0=Error&PENDINGREASON=None&REASONCODE=None
@@ -0,0 +1 @@
1
+ RECEIVEREMAIL=test%40email%2ecom&RECEIVERID=ABCDEFG12345&EMAIL=test%40email%2ecom&PAYERID=12345ABCDEFG&PAYERSTATUS=verified&COUNTRYCODE=US&SHIPTONAME=Billy%20Bob&SHIPTOSTREET=1%20Main%20St&SHIPTOCITY=San%20Jose&SHIPTOSTATE=CA&SHIPTOCOUNTRYCODE=US&SHIPTOCOUNTRYNAME=United%20States&SHIPTOZIP=95131&ADDRESSOWNER=PayPal&ADDRESSSTATUS=Confirmed&SALESTAX=0%2e00&SUBJECT=Test%20Subject&TIMESTAMP=2012%2d02%2d23T20%3a51%3a29Z&CORRELATIONID=4fc0a06cbaec7&ACK=Success&VERSION=78%2e0&BUILD=2571254&FIRSTNAME=Billy&LASTNAME=Bob&TRANSACTIONID=123456789ABCD&TRANSACTIONTYPE=cart&PAYMENTTYPE=instant&ORDERTIME=2012%2d02%2d13T23%3a09%3a46Z&AMT=740%2e43&FEEAMT=21%2e77&TAXAMT=0%2e00&SHIPPINGAMT=0%2e00&HANDLINGAMT=0%2e00&CURRENCYCODE=USD&PAYMENTSTATUS=Completed&PENDINGREASON=None&REASONCODE=None&PROTECTIONELIGIBILITY=Eligible&PROTECTIONELIGIBILITYTYPE=ItemNotReceivedEligible%2cUnauthorizedPaymentEligible&L_NAME0=Item%201&L_NAME1=Item%202&L_QTY0=1&L_QTY1=1&L_SHIPPINGAMT0=0%2e00&L_SHIPPINGAMT1=0%2e00&L_HANDLINGAMT0=0%2e00&L_HANDLINGAMT1=0%2e00&L_CURRENCYCODE0=USD&L_CURRENCYCODE1=USD&L_AMT0=687%2e93&L_AMT1=52%2e50
@@ -0,0 +1 @@
1
+ INVALID
@@ -0,0 +1 @@
1
+ VERIFIED
@@ -0,0 +1 @@
1
+ TIMESTAMP=2011%2d02%2d08T07%3a21%3a08Z&CORRELATIONID=aa160cad77481&ACK=Failure&VERSION=66%2e0&BUILD=1704252&L_ERRORCODE0=11556&L_SHORTMESSAGE0=Invalid%20profile%20status%20for%20cancel%20action%3b%20profile%20should%20be%20active%20or%20suspended&L_LONGMESSAGE0=Invalid%20profile%20status%20for%20cancel%20action%3b%20profile%20should%20be%20active%20or%20suspended&L_SEVERITYCODE0=Error
@@ -0,0 +1 @@
1
+ PROFILEID=I%2dK1VFLRN3VVG0&TIMESTAMP=2011%2d02%2d08T07%3a20%3a44Z&CORRELATIONID=86bde487ccba6&ACK=Success&VERSION=66%2e0&BUILD=1704252
@@ -0,0 +1 @@
1
+ REFUNDTRANSACTIONID=6D456341FS516215S&FEEREFUNDAMT=0%2e50&GROSSREFUNDAMT=10%2e00&NETREFUNDAMT=9%2e50&CURRENCYCODE=USD&TOTALREFUNDEDAMOUNT=10%2e00&TIMESTAMP=2011%2d05%2d21T14%3a13%3a32Z&CORRELATIONID=862bfc523cca2&ACK=Success&VERSION=72%2e0&BUILD=1882144
@@ -0,0 +1 @@
1
+ TIMESTAMP=2011%2d02%2d02T02%3a16%3a50Z&CORRELATIONID=379d1b7f97afb&ACK=Failure&L_ERRORCODE0=10001&L_SHORTMESSAGE0=Internal%20Error&L_LONGMESSAGE0=Timeout%20processing%20request
@@ -0,0 +1 @@
1
+ ACK=Success&BUILD=1721431&CORRELATIONID=5549ea3a78af1&TIMESTAMP=2011-02-02T02%3A02%3A18Z&TOKEN=EC-5YJ90598G69065317&VERSION=66.0
@@ -0,0 +1,33 @@
1
+ require 'fakeweb'
2
+
3
+ module FakeResponseHelper
4
+
5
+ def fake_response(file_path, api = :NVP, options = {})
6
+ endpoint = case api
7
+ when :NVP
8
+ Paypal::NVP::Request.endpoint
9
+ when :IPN
10
+ Paypal::IPN.endpoint
11
+ else
12
+ raise "Non-supported API: #{api}"
13
+ end
14
+ FakeWeb.register_uri(
15
+ :post,
16
+ endpoint,
17
+ options.merge(
18
+ :body => File.read(File.join(File.dirname(__FILE__), '../fake_response', "#{file_path}.txt"))
19
+ )
20
+ )
21
+ end
22
+
23
+ def request_to(endpoint, method = :get)
24
+ raise_error(
25
+ FakeWeb::NetConnectNotAllowedError,
26
+ "Real HTTP connections are disabled. Unregistered request: #{method.to_s.upcase} #{endpoint}"
27
+ )
28
+ end
29
+
30
+ end
31
+
32
+ FakeWeb.allow_net_connect = false
33
+ include FakeResponseHelper