Module: TinkoffClient::Payment

Extended by:
EncryptCardData
Included in:
TinkoffClient
Defined in:
lib/tinkoff_client/payment/payment.rb,
lib/tinkoff_client/payment/request.rb,
lib/tinkoff_client/payment/encrypt_card_data.rb

Defined Under Namespace

Modules: EncryptCardData Classes: Request

Class Method Summary collapse

Methods included from EncryptCardData

encrypt_data

Class Method Details

.cancel(keys) ⇒ Hash

Метод отменяет платеж.

Полный список параметров www.tinkoff.ru/kassa/develop/api/payments/cancel-description/

{
 "Success"=>true,
 "ErrorCode"=>"0",
 "Message"=>"OK",
 "TerminalKey"=>"TinkoffBankTest",
 "Status"=>"REFUNDED",
 "PaymentId"=>"2304882",
 "OrderId"=>"#419",
 "Amount"=>1000
 }

Examples:


#Order
{"id"=>5,
"user_id"=>1,
"product_id"=>22,
"paid"=>false,
"payment_id"=>"123456789"} #Payment id получен в методе init

def create
  order = order.find(params[:order_id]) #Объявляем наш order
  result = TinkoffClient::Payment.cancel(PaymentId: order.payment_id) #Вызываем наш cancel
end

Parameters:

  • PaymentId (Number)

Returns:

  • (Hash)

    *

See Also:



172
173
174
# File 'lib/tinkoff_client/payment/payment.rb', line 172

def self.cancel(keys)
  Request.request(path: "Cancel", keys: keys)
end

.check_order(keys) ⇒ Hash

Метод возвращает статус заказа.

Полный список параметров www.tinkoff.ru/kassa/develop/api/payments/checkorder-description/

{
 "Success": true,
 "ErrorCode": "0",
 "Message": "OK",
 "OrderId": "21057",
 "TerminalKey": "TinkoffBankTest",
 "Payments": [
  {
      "Status": "REJECTED",
      "PaymentId": 10063,
      "Rrn": 1234567,
      "Amount": 555,
      "Success": false,
      "ErrorCode": "1051",
      "Message": "Недостаточно средств на карте"
  },
  {
      "Status": "AUTH_FAIL",
      "PaymentId": 1005563,
      "Rrn": 1234567,
      "Amount": 555,
      "Success": false,
      "ErrorCode": "76",
      "Message": "Операция по иностранной карте недоступна."
  },
  {
      "Status": "NEW",
      "PaymentId": 100553363,
      "Rrn": 1234567,
      "Amount": 555,
      "Success": true,
      "ErrorCode": "0",
      "Message": "ok"
  }
 ]
}

Examples:


#Order
{"id"=>5,
"user_id"=>1,
"product_id"=>22,
"paid"=>false,
"payment_id"=>"123456789"}

def create
  order = order.find(params[:order_id]) #Объявляем наш order
  result = TinkoffClient::Payment.check_order(OrderId: order.id) #Вызываем наш check_order
end

Parameters:

  • OrderId (Number)

Returns:

  • (Hash)

    *

See Also:



235
236
237
# File 'lib/tinkoff_client/payment/payment.rb', line 235

def self.check_order(keys)
  Request.request(path: "CheckOrder", keys: keys)
end

.confirm(keys) ⇒ Hash

Метод подтверждает платеж передачей реквизитов, а также списывает средства с карты покупателя при одностадийной оплате и блокирует указанную сумму при двухстадийной. Используется, если у площадки есть сертификация PCI DSS и собственная платежная форма.

Полный список параметров www.tinkoff.ru/kassa/develop/api/payments/confirm-request/

Examples:


#Order
{"id"=>5,
"user_id"=>1,
"product_id"=>22,
"paid"=>false,
"payment_id"=>"123456789"} #Payment id получен в методе init

def create
  order = order.find(params[:order_id]) #Объявляем наш order
  result = TinkoffClient::Payment.confirm(PaymentId: order.payment_id) #Вызываем наш confirm
end

Parameters:

  • PaymentId (Number)

Returns:

  • (Hash)

    *

    {"Success"=>true,
    "ErrorCode"=>"0",
    "TerminalKey"=>"1111111111",
    "Status"=>"CONFIRMED",
    "PaymentId"=>"123456789",
    "OrderId"=>"3331"}
    

See Also:



97
98
99
# File 'lib/tinkoff_client/payment/payment.rb', line 97

def self.confirm(keys)
  Request.request(path: "Confirm", keys: keys)
end

.finish_authorize(keys) ⇒ Hash

Метод подтверждает платеж передачей реквизитов, а также списывает средства с карты покупателя при одностадийной оплате и блокирует указанную сумму при двухстадийной.

Используется, если у площадки есть сертификация PCI DSS и собственная платежная форма.

Полный список параметров www.tinkoff.ru/kassa/develop/api/payments/finish-authorize/

{
 "Success"=>true,
 "ErrorCode"=>"0",
 "Message"=>"null",
 }

Examples:


#Order
{"id"=>5,
"user_id"=>1,
"product_id"=>22,
"paid"=>false,
"payment_id"=>"123456789"} #Payment id получен в методе init

def create
  order = order.find(params[:order_id]) #Объявляем наш order
  params = { 
    PaymentId: order.payment_id,
    Card: { PAN: 5545454545454545, ExpDate: 4545, CardHolder: "IVAN PETROV", CVV: "111"}
  }
  result = TinkoffClient::Payment.finish_authorize(params) #Вызываем наш finish_authorize
end

Parameters:

  • PaymentId (Number)
  • Card (Hash)
  • PAN (Number)

    (Card)

  • ExpDate (Number)

    (Card)

  • CardHolder (String)

    (Card)

  • CardHolder (CVV)

    (Card)

Returns:

  • (Hash)

    *

See Also:



335
336
337
338
339
# File 'lib/tinkoff_client/payment/payment.rb', line 335

def self.finish_authorize(keys)
  card_data = encrypt_data(keys)
  keys[:CardData] = card_data
  Request.request(path: "FinishAuthorize", keys: keys.except(:Card))
end

.get_state(keys) ⇒ Hash

Метод возвращает текущий статус платежа.

Полный список параметров www.tinkoff.ru/kassa/develop/api/payments/getstate-description/

{
 "Success"=>true,
 "ErrorCode"=>"0",
 "Message"=>"OK",
 "TerminalKey"=>"TinkoffBankTest",
 "Status"=>"CONFIRMED",
 "PaymentId"=>"2304882",
 "OrderId"=>"#419",
 "Amount"=>1000
 }

Examples:


#Order
{"id"=>5,
"user_id"=>1,
"product_id"=>22,
"paid"=>false,
"payment_id"=>"123456789"} #Payment id получен в методе init

def create
  order = order.find(params[:order_id]) #Объявляем наш order
  result = TinkoffClient::Payment.get_state(PaymentId: order.payment_id) #Вызываем наш get_state
end

Parameters:

  • PaymentId (Number)

Returns:

  • (Hash)

    *

See Also:



135
136
137
# File 'lib/tinkoff_client/payment/payment.rb', line 135

def self.get_state(keys)
  Request.request(path: "GetState", keys: keys)
end

.init(keys) ⇒ Hash

Метод создает платеж: продавец получает ссылку на платежную форму и должен перенаправить по ней покупателя

Полный список параметров www.tinkoff.ru/kassa/develop/api/payments/init-request/

Examples:

#Предположим, что у нас есть User, Product и Order

#User
{"id"=>1,
"email"=>"[email protected]",
"phone"=>"+79031234567"}

#Product
{"id"=>22,
"name"=>"Наименование товара",
"price"=>1000,
"quantity"=>10}

#Order
{"id"=>5,
"user_id"=>1,
"product_id"=>22,
"paid"=>false,
"payment_id"=>nil}

#Простая реализация логики получения платежной ссылки
def create
  order = order.find(params[:order_id]) #Объявляем наш order
  product = order.product #Объявляем продукт
  result = TinkoffClient::Payment.init(Amount: product.amount, OrderId: order.id) #Вызываем наш init метод
  if result["Success"] #в случае, если Success (boolean) вернет true
    order.update(:order_params)
    redirect_to result["PaymentURL"] #Отправляем пользователя по ссылке на форму оплаты
  end
end

private
def order_params
 params.transform_keys(&:underscore).permit(:payment_id)#Трансформируем ответ из Snake в Camel и пермитим его
end

Parameters:

  • Amount (Number)
  • OrderId (String)

Returns:

  • (Hash)

    *

    {"Success"=>true,
    "ErrorCode"=>"0",
    "TerminalKey"=>"1111111111",
    "Status"=>"NEW",
    "PaymentId"=>"123456789",
    "OrderId"=>"3331",
    "Amount"=>1000,
    "PaymentURL"=>"https://securepayments.tinkoff.ru/q2wER3t0"}
    

See Also:



63
64
65
# File 'lib/tinkoff_client/payment/payment.rb', line 63

def self.init(keys)      
  Request.request(path: "Init", keys: keys)
end

.send_closing_receipt(keys) ⇒ Hash

Метод позволяет отправить закрывающий чек в кассу. Условия работы метода: Закрывающий чек может быть отправлен если платежная сессия по первому чеку находится в статусе CONFIRMED. В платежной сессии был передан объект Receipt. В объекте Receipt был передан хотя бы один объект Receipt.Items.PaymentMethod = “full_prepayment” или “prepayment” или “advance”

Полный список параметров www.tinkoff.ru/kassa/develop/api/payments/SendClosingReceipt-description/

{
 "Success"=>true,
 "ErrorCode"=>"0",
 "Message"=>"null",
 }

Examples:


#User
{"id"=>1,
"email"=>"[email protected]",
"phone"=>"+79031234567"}

#Product
{"id"=>22,
"name"=>"Наименование товара",
"price"=>1000,
"quantity"=>10}

#Order
{"id"=>5,
"user_id"=>1,
"product_id"=>22,
"paid"=>false,
"payment_id"=>"123456789"} #Payment id получен в методе init

def create
  order = order.find(params[:order_id]) #Объявляем наш order
  params = { 
    PaymentId: order.payment_id,
    Receipt: { Email: order.user.email, Taxation: "osn",
    Items: [{ Name: order.product.title, Quantity: "1",
    Amount: order.product.price, Price: order.product.price,
    Tax: "vat20", PaymentMethod: "full_payment",
    PaymentObject: "lottery_prize" }] } 
  }
  result = TinkoffClient::Payment.send_closing_receipt(params) #Вызываем наш send_closing_receipt
end

Parameters:

  • PaymentId (Number)
  • Receipt (Hash)
  • Items (Hash)

Returns:

  • (Hash)

    *

See Also:



292
293
294
# File 'lib/tinkoff_client/payment/payment.rb', line 292

def self.send_closing_receipt(keys)
  Request.request(path: "SendClosingReceipt", keys: keys)
end