class PaypalApi

Constants

MASS_PAY_ENDPOINT

MassPay Setting

PAYPAL_PASSWORD
PAYPAL_SIGNATURE
PAYPAL_USER_NAME

Private Class Methods

adaptive_payment( return_url, cancel_url, receiver_list ) click to toggle source

—– Adaptive Payments API —– #

# File lib/generators/paypal/scaffold/templates/app/models/paypal_api.rb, line 120
def self.adaptive_payment( return_url, cancel_url, receiver_list )
  pay_request = PaypalAdaptive::Request.new
  
  data = {
    "returnUrl"       => return_url,
    "requestEnvelope" => { "errorLanguage" => "ja_JP" },
    "currencyCode"    => "JPY",
    "receiverList"    => { "receiver" => receiver_list },
    "cancelUrl"       => cancel_url,
    "actionType"      => "PAY",
  }
  
  pay_response = pay_request.pay( data )

  if pay_response.success?
    return "Success", pay_response.approve_paypal_payment_url
  else
    return "Error", pay_response.errors.first['message']
  end
end
cancel_recurring( profile_id ) click to toggle source
# File lib/generators/paypal/scaffold/templates/app/models/paypal_api.rb, line 103
def self.cancel_recurring( profile_id )
  request = self.get_request
  response = request.renew!( profile_id, :Cancel )
  
  return response.ack
end
create_recurring( token, description ) click to toggle source
# File lib/generators/paypal/scaffold/templates/app/models/paypal_api.rb, line 64
def self.create_recurring( token, description )
  request = self.get_request
  
  profile = Paypal::Payment::Recurring.new(
    start_date: Time.now,
    description: description,
    billing: {
      period:        PAYPAL_RECURRING_PERIOD,
      frequency:     PAYPAL_RECURRING_FREQUENCY,
      amount:        PAYPAL_RECURRING_AMOUNT,
      currency_code: :JPY, # if nil, PayPal use USD as default
    }
  )
  
  response = request.subscribe!( token, profile )
  response.recurring
  
  return response.recurring.identifier # => profile_id
end
get_recurring_profile( profile_id ) click to toggle source
# File lib/generators/paypal/scaffold/templates/app/models/paypal_api.rb, line 90
def self.get_recurring_profile( profile_id )
  request = self.get_request
  response = request.subscription(profile_id)
  
  return response.recurring
end
get_request() click to toggle source

—– Recurring Payments API —– #

# File lib/generators/paypal/scaffold/templates/app/models/paypal_api.rb, line 21
def self.get_request
  request = Paypal::Express::Request.new(
    username:  PAYPAL_USER_NAME,
    password:  PAYPAL_PASSWORD,
    signature: PAYPAL_SIGNATURE,
  )
  
  return request
end
mass_pay( receive_list ) click to toggle source

—– MassPay API —– #

# File lib/generators/paypal/scaffold/templates/app/models/paypal_api.rb, line 149
def self.mass_pay( receive_list )
  # リクエストパラメータ設定
      request_param = {
        "USER"         => PAYPAL_USER_NAME,
        "PWD"          => PAYPAL_PASSWORD,
        "SIGNATURE"    => PAYPAL_SIGNATURE,
        "METHOD"       => "MassPay",
        "CURRENCYCODE" => "JPY",
        "RECEIVERTYPE" => "EmailAddress",
        "VERSION"      => "89.0",
      }

  # 支払い先リスト
  receive_list.each.with_index{ |receive, index|
    request_param["L_EMAIL#{index}"] = receive[:email].to_s
    request_param["L_AMT#{index}"]   = receive[:amount].to_s
  }

      url = URI.parse( MASS_PAY_ENDPOINT )
      http = Net::HTTP.new( url.host, url.port )
      http.use_ssl = true
  
  # パラメータ文字列化
      string_field_params = request_param.map{ |p| "#{p.first}=#{CGI.escape(p.last)}" }.join("&")
  
  # POST実行
      response = http.post( "/nvp", string_field_params )
  
  # レスポンスハッシュ化
  decode_hash = Hash[ URI.decode_www_form( response.body ) ]

  # 結果ハッシュを返す
  return decode_hash
end
set_express_checkout( success_calback, cancel_calback, description ) click to toggle source
# File lib/generators/paypal/scaffold/templates/app/models/paypal_api.rb, line 39
def self.set_express_checkout( success_calback, cancel_calback, description )
  request = self.get_request
  
  payment_request = Paypal::Payment::Request.new(
    currency_code:                 :JPY, # if nil, PayPal use USD as default
    billing_type:                  :RecurringPayments,
    billing_agreement_description: description,
  )
  
  response = request.setup(
    payment_request,
    success_calback,
    cancel_calback,
  )
  
  return response.redirect_uri
end