module NaspayRails::Transactions

Public Class Methods

create_new(endpoint, params, token) click to toggle source
# File lib/naspay_rails/transactions.rb, line 20
def self.create_new(endpoint, params, token)
  route_suffix = '/api/v1/transactions'
  target_url   = "#{endpoint}#{route_suffix}"
  request_uri  = URI.parse(target_url)
  request      = Net::HTTP::Post.new(request_uri)
  request["Authorization"] = "Bearer #{token}"
  request["Content-Type"]  = "application/json"
  request["Accept"]        = "application/json"

  request_body =
      case params.keys.sort
          when %i[intent amount currency transaction_id description].sort
          {
              "intent"                 => params[:intent],
              "amount"                 => params[:amount],
              "currency"               => params[:currency],
              "merchantTransactionId"  => params[:transaction_id],
              "description"            => params[:description]
          }
        when %i[intent amount currency transaction_id description customer].sort
          {
              "intent"                 => params[:intent],
              "amount"                 => params[:amount],
              "currency"               => params[:currency],
              "merchantTransactionId"  => params[:transaction_id],
              "description"            => params[:description],
              "customer" => {
                  "email"               => params[:customer].try(:[], :email),
                  "phone"               => params[:customer].try(:[], :phone),
                  "merchantCustomerId"  => params[:customer].try(:[], :customer_id),
                  "locale"              => params[:customer].try(:[], :locale),
                  "ip"                  => params[:customer].try(:[], :ip)
              }
          }
        when %i[intent amount currency transaction_id description customer shipping_address].sort
          {
              "intent"                 => params[:intent],
              "amount"                 => params[:amount],
              "currency"               => params[:currency],
              "merchantTransactionId"  => params[:transaction_id],
              "description"            => params[:description],

              "customer" => {
                  "email"               => params[:customer].try(:[], :email),
                  "phone"               => params[:customer].try(:[], :phone),
                  "merchantCustomerId"  => params[:customer].try(:[], :customer_id),
                  "locale"              => params[:customer].try(:[], :locale),
                  "ip"                  => params[:customer].try(:[], :ip)
              },

              "shippingAddress" => {
                  "line1"         => params[:shipping_address].try(:[], :line1),
                  "line2"         => params[:shipping_address].try(:[], :line2),
                  "city"          => params[:shipping_address].try(:[], :city),
                  "countryCode"   => params[:shipping_address].try(:[], :country_code),
                  "postalCode"    => params[:shipping_address].try(:[], :postal_code),
                  "state"         => params[:shipping_address].try(:[], :state),
                  "phone"         => params[:shipping_address].try(:[], :phone),
                  "recipientName" => params[:shipping_address].try(:[], :recipient_name)
              }
          }
        else
          return 'please check the keys provided in params Hash!'
      end
  request.body = JSON.dump(request_body)
  req_options = {
      use_ssl: request_uri.scheme == "https",
  }

  Net::HTTP.start(request_uri.hostname, request_uri.port, req_options) { |http| http.request(request) }
end
get_list(endpoint, token) click to toggle source
# File lib/naspay_rails/transactions.rb, line 6
def self.get_list(endpoint, token)
  route_suffix = '/api/v1/transactions'
  target_url   = "#{endpoint}#{route_suffix}"
  request_uri   = URI.parse(target_url)
  request       = Net::HTTP::Get.new(request_uri)
  request["Authorization"] = "Bearer #{token}"
  req_options = {
      use_ssl: request_uri.scheme == 'https'
  }
  Net::HTTP.start(request_uri.hostname, request_uri.port, req_options) {
      |http| JSON.parse(http.request(request).body)
  }
end