class Tinkoff::Request

Constants

BASE_URL

Public Class Methods

new(path, params = {}) click to toggle source
# File lib/tinkoff/request.rb, line 5
def initialize(path, params = {})
  @url = BASE_URL + path
  @params = params
end

Public Instance Methods

perform() click to toggle source
# File lib/tinkoff/request.rb, line 10
def perform
  prepare_params

  response = HTTParty.post(
    @url,
    body: @params.to_json,
    # debug_output: $stdout,
    :headers => {'Content-Type' => 'application/json'}
  )

  Tinkoff::Payment.new(response.parsed_response)
end

Private Instance Methods

prepare_data() click to toggle source

Ключ=значение дополнительных параметров через “|”, например Email=a@test.ru|Phone=+71234567890

# File lib/tinkoff/request.rb, line 45
def prepare_data
  return unless @params[:DATA].present?
  @params[:DATA] = @params[:DATA].to_query.tr('&', '|')
end
prepare_params() click to toggle source
# File lib/tinkoff/request.rb, line 25
def prepare_params
  # Encode and join DATA hash
  # prepare_data
  #
  # Add terminal key and password
  @params.merge!({TerminalKey: Tinkoff.tinkoff_params[:TerminalKey]})
  # Sort params by key
  @params = @params.sort.to_h
  # Add token (signature)
  @params[:Token] = token
end
token() click to toggle source

Params signature: oplata.tinkoff.ru/landing/develop/documentation/request_sign

# File lib/tinkoff/request.rb, line 38
def token
  values = @params.except(:DATA, :Receipt).merge({Password: Tinkoff.tinkoff_params[:Password]})
             .stringify_keys.sort.to_h.values.join
  Digest::SHA256.hexdigest(values)
end