Sha256: 6d0329e47918c830fa0a5df0e412130cf4c510dba3cfea282b96f39dbfedfbc8

Contents?: true

Size: 1.89 KB

Versions: 3

Compression:

Stored size: 1.89 KB

Contents

module Paypal
  module NVP
    class Request < Base
      attr_required :username, :password, :signature
      attr_optional :subject
      attr_accessor :version

      ENDPOINT = {
        :production => 'https://api-3t.paypal.com/nvp',
        :sandbox => 'https://api-3t.sandbox.paypal.com/nvp'
      }

      def self.endpoint
        if Paypal.sandbox?
          ENDPOINT[:sandbox]
        else
          ENDPOINT[:production]
        end
      end

      def initialize(attributes = {})
        @version = Paypal.api_version
        super
      end

      def common_params
        {
          :USER => self.username,
          :PWD => self.password,
          :SIGNATURE => self.signature,
          :SUBJECT => self.subject,
          :VERSION => self.version
        }
      end

      def request(method, params = {})
        handle_response do
          post(method, params)
        end
      end

      private

        def post(method, params)
          rest_params = common_params.merge(params).merge(METHOD: method)

          response = RestClient.post(self.class.endpoint, rest_params)

          puts ">> Paypal::NVP Got response to POST request <<"
          puts "Request arguments:\nendpoint: #{self.class.endpoint}\nparams: #{rest_params})\n"
          puts "Response string:\n#{response}"
          puts "=============================================="

          return response
        end

        def handle_response
          response = yield
          response = CGI.parse(response).inject({}) do |res, (k, v)|
            res.merge!(k.to_sym => v.first)
          end

          case response[:ACK]
          when 'Success', 'SuccessWithWarning'
            response
          else
            raise Exception::APIError.new(response)
          end

        rescue RestClient::Exception => e
          raise Exception::HttpError.new(e.http_code, e.message, e.http_body)
        end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
creative-paypal-express-1.2.1 lib/paypal/nvp/request.rb
creative-paypal-express-1.2.0 lib/paypal/nvp/request.rb
creative-paypal-express-1.1.0 lib/paypal/nvp/request.rb