Class: ActiveMerchant::Billing::PaypalPermissionsGateway

Inherits:
Gateway
  • Object
show all
Includes:
XPPAuthorization
Defined in:
lib/paypal_permissions/paypal_permissions_gateway.rb

Overview

:nodoc

Class Method Summary collapse

Instance Method Summary collapse

Methods included from XPPAuthorization

#x_pp_authorization_header, #x_pp_authorization_signature

Constructor Details

#initialize(options = {}) ⇒ PaypalPermissionsGateway

Returns a new instance of PaypalPermissionsGateway.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 20

def initialize(options = {})
  requires!(options, :login, :password, :signature, :app_id)
  @login = options.delete(:login)
  @password = options.delete(:password)
  @app_id = options.delete(:app_id)
  @api_signature = options.delete(:signature)
  request_permissions_headers = {
    'X-PAYPAL-SECURITY-USERID' => @login,
    'X-PAYPAL-SECURITY-PASSWORD' => @password,
    'X-PAYPAL-SECURITY-SIGNATURE' => @api_signature,
    'X-PAYPAL-APPLICATION-ID' => @app_id,
    'X-PAYPAL-REQUEST-DATA-FORMAT' => 'NV',
    'X-PAYPAL-RESPONSE-DATA-FORMAT' => 'NV',
  }
  get_access_token_headers = request_permissions_headers.dup
  get_basic_personal_data_headers = lambda { |access_token, access_token_verifier|
    {
      'X-PAYPAL-SECURITY-USERID' => @login,
      'X-PAYPAL-SECURITY-PASSWORD' => @password,
      'X-PAYPAL-SECURITY-SIGNATURE' => @api_signature,
      'X-PAYPAL-APPLICATION-ID' => @app_id,
      'X-PAYPAL-REQUEST-DATA-FORMAT' => 'NV',
      'X-PAYPAL-RESPONSE-DATA-FORMAT' => 'NV',
    }.update(x_pp_authorization_header(get_basic_personal_data_url, access_token, access_token_verifier))
  }
  get_advanced_personal_data_headers = lambda { |access_token, access_token_verifier|
    {
      'X-PAYPAL-SECURITY-USERID' => @login,
      'X-PAYPAL-SECURITY-PASSWORD' => @password,
      'X-PAYPAL-SECURITY-SIGNATURE' => @api_signature,
      'X-PAYPAL-APPLICATION-ID' => @app_id,
      'X-PAYPAL-REQUEST-DATA-FORMAT' => 'NV',
      'X-PAYPAL-RESPONSE-DATA-FORMAT' => 'NV',
    }.update(x_pp_authorization_header(get_advanced_personal_data_url, access_token, access_token_verifier))
  }
  @options = {
    :request_permissions_headers => request_permissions_headers,
    :get_access_token_headers => get_access_token_headers,
    :get_basic_personal_data_headers => get_basic_personal_data_headers,
    :get_advanced_personal_data_headers => get_advanced_personal_data_headers,
  }.update(options)
  super
end

Class Method Details

.setup {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



15
16
17
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 15

def self.setup
  yield self
end

Instance Method Details

#advanced_personal_data_mappingsObject



108
109
110
111
112
113
114
115
116
117
118
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 108

def advanced_personal_data_mappings
  {
    "http://axschema.org/birthDate" => :birthdate,
    "http://schema.openid.net/contact/street1" => :street1,
    "http://schema.openid.net/contact/street2" => :street2,
    "http://axschema.org/contact/city/home" => :city,
    "http://axschema.org/contact/state/home" => :state,
    "http://axschema.org/contact/postalCode/home" => :postal_code,
    "http://axschema.org/contact/phone/default" => :phone,
  }
end

#basic_personal_data_mappingsObject



97
98
99
100
101
102
103
104
105
106
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 97

def basic_personal_data_mappings
  {
    "http://axschema.org/contact/country/home" => :country,
    "http://axschema.org/contact/email" => :email,
    "http://axschema.org/namePerson/first" => :first_name,
    "http://axschema.org/namePerson/last" => :last_name,
    "http://schema.openid.net/contact/fullname" => :full_name,
    "https://www.paypal.com/webapps/auth/schema/payerID" => :payer_id,
  }
end

#get_access_token(request_token, request_token_verifier) ⇒ Object



81
82
83
84
85
86
87
88
89
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 81

def get_access_token(request_token, request_token_verifier)
  query_string = build_get_access_token_query_string request_token, request_token_verifier
  nvp_response = ssl_get "#{get_access_token_url}?#{query_string}", @options[:get_access_token_headers]
  if nvp_response =~ /error\(\d+\)/
    # puts "request: #{get_access_token_url}?#{query_string}\n"
    # puts "nvp_response: #{nvp_response}\n"
  end
  response = parse_get_access_token_nvp(nvp_response)
end

#get_access_token_urlObject



145
146
147
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 145

def get_access_token_url
  test? ? URLS[:test][:get_access_token] : URLS[:live][:get_access_token]
end

#get_advanced_personal_data(access_token, access_token_verifier) ⇒ Object



133
134
135
136
137
138
139
140
141
142
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 133

def get_advanced_personal_data(access_token, access_token_verifier)
  body = personal_data_post_body(advanced_personal_data_mappings)
  opts = @options[:get_advanced_personal_data_headers].call(access_token, access_token_verifier)
  nvp_response = ssl_post(get_advanced_personal_data_url, body, opts)
  if nvp_response =~ /error\(\d+\)/
    # puts "request: #{get_advanced_personal_data_url} post_body:#{body}\n"
    # puts "nvp_response: #{nvp_response}\n"
  end
  response = parse_personal_data_nvp(nvp_response, advanced_personal_data_mappings)
end

#get_advanced_personal_data_urlObject



160
161
162
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 160

def get_advanced_personal_data_url
  test? ? URLS[:test][:get_advanced_personal_data] : URLS[:live][:get_advanced_personal_data]
end

#get_basic_personal_data(access_token, access_token_verifier) ⇒ Object



121
122
123
124
125
126
127
128
129
130
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 121

def get_basic_personal_data(access_token, access_token_verifier)
  body = personal_data_post_body(basic_personal_data_mappings)
  opts = @options[:get_basic_personal_data_headers].call(access_token, access_token_verifier)
  nvp_response = ssl_post(get_basic_personal_data_url, body, opts)
  if nvp_response =~ /error\(\d+\)/
    # puts "request: #{get_basic_personal_data_url} post_body:#{body}\n"
    # puts "nvp_response: #{nvp_response}\n"
  end
  response = parse_personal_data_nvp(nvp_response, basic_personal_data_mappings)
end

#get_basic_personal_data_urlObject



155
156
157
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 155

def get_basic_personal_data_url
  test? ? URLS[:test][:get_basic_personal_data] : URLS[:live][:get_basic_personal_data]
end

#get_permissions_urlObject



150
151
152
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 150

def get_permissions_url
  test? ? URLS[:test][:get_permissions] : URLS[:live][:get_permissions]
end

#redirect_user_to_paypal_url(token) ⇒ Object



92
93
94
95
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 92

def redirect_user_to_paypal_url token
  template = test? ? URLS[:test][:redirect_user_to_paypal] : URLS[:live][:redirect_user_to_paypal]
  template % token
end

#request_permissions(callback_url, scope) ⇒ Object



65
66
67
68
69
70
71
72
73
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 65

def request_permissions(callback_url, scope)
  query_string = build_request_permissions_query_string callback_url, scope
  nvp_response = ssl_get "#{request_permissions_url}?#{query_string}", @options[:request_permissions_headers]
  if nvp_response =~ /error\(\d+\)/
    # puts "request: #{request_permissions_url}?#{query_string}\n"
    # puts "nvp_response: #{nvp_response}\n"
  end
  response = parse_request_permissions_nvp(nvp_response)
end

#request_permissions_urlObject



76
77
78
# File 'lib/paypal_permissions/paypal_permissions_gateway.rb', line 76

def request_permissions_url
  test? ? URLS[:test][:request_permissions] : URLS[:live][:request_permissions]
end