1
0
зеркало из https://github.com/glebtv/yookassa.git synced 2026-09-04 02:05:51 +03:00

Paouts and Deals endpoints support (#26)

Этот коммит содержится в:
Ivan Shamatov
2021-11-20 14:57:38 +03:00
коммит произвёл GitHub
родитель a61bbaf461
Коммит 11762e3c40
8 изменённых файлов: 209 добавлений и 12 удалений

24
lib/yookassa/deals.rb Обычный файл
Просмотреть файл

@@ -0,0 +1,24 @@
# frozen_string_literal: true
require_relative "./client"
require_relative "./entity/deal"
require_relative "./entity/collection"
module Yookassa
class Deals < Client
def find(deal_id:)
data = get("deals/#{deal_id}")
Entity::Deal.new(**data)
end
def create(payload:, idempotency_key: SecureRandom.hex(10))
data = post("deals", payload: payload, idempotency_key: idempotency_key)
Entity::Deal.new(**data.merge(idempotency_key: idempotency_key))
end
def list
data = get("deals")
Entity::DealCollection.new(**data)
end
end
end

Просмотреть файл

@@ -17,11 +17,11 @@ module Yookassa
# expiry_month [string, required]
# Expiration date, month, MM.
attribute :expiry_month, Types::Coercible::Integer
attribute? :expiry_month, Types::Coercible::Integer
# expiry_year [string, required]
# Expiration date, year, YYYY.
attribute :expiry_year, Types::Coercible::Integer
attribute? :expiry_year, Types::Coercible::Integer
# card_type [string, required]
# Type of bank card. Possible values: MasterCard (for Mastercard and Maestro cards), Visa (for Visa and Visa Electron cards),

Просмотреть файл

@@ -5,6 +5,7 @@ require_relative "./payment"
require_relative "./receipt"
require_relative "./refund"
require_relative "./webhook"
require_relative "./deal"
module Yookassa
module Entity
@@ -25,8 +26,8 @@ module Yookassa
attribute :items, Types::Array.of(Receipt)
end
class WebhookCollection < Collection
attribute :items, Types::Array.of(Webhook)
class DealsCollection < Collection
attribute :items, Types::Array.of(Deal)
end
end
end

56
lib/yookassa/entity/deal.rb Обычный файл
Просмотреть файл

@@ -0,0 +1,56 @@
# frozen_string_literal: true
require_relative "./types"
require_relative "./amount"
module Yookassa
module Entity
class Deal < Dry::Struct
attribute? :idempotency_key, Types::String
# id [string, required]
# Deals's ID in YooMoney
attribute :id, Types::String
# Момент перечисления вам вознаграждения платформы. Возможные значения:
# payment_succeeded — после успешной оплаты;
# deal_closed — при закрытии сделки после успешной выплаты.
attribute :fee_moment, Types::String.enum("payment_succeeded", "deal_closed")
# Описание сделки (не более 128 символов). Используется для фильтрации при получении списка сделок.
attribute? :description, Types::String.constrained(max_size: 128)
# Баланс сделки.
attribute :balance, Amount
# Сумма вознаграждения продавца.
attribute :payout_balance, Amount
# Статус сделки. Возможные значения:
# opened — сделка открыта; можно выполнять платежи, возвраты и выплаты в составе сделки;
# closed — сделка закрыта — вознаграждение перечислено продавцу и платформе или оплата возвращена покупателю;
# нельзя выполнять платежи, возвраты и выплаты в составе сделки.
attribute :status, Types::String.enum("opened", "closed")
# Время создания сделки. Указывается по UTC и передается в формате ISO 8601. Пример: 2017-11-03T11:52:31.827Z
attribute :created_at, Types::JSON::DateTime
# Время автоматического закрытия сделки. Если в указанное время сделка всё еще в статусе opened,
# ЮKassa вернет деньги покупателю и закроет сделку. По умолчанию время жизни сделки составляет 90 дней.
# Время указывается по UTC и передается в формате ISO 8601. Пример: 2017-11-03T11:52:31.827Z
attribute :expires_at, Types::JSON::DateTime
# metadata [object, optional]
# Any additional data you might require for processing payments (for example, order number), specified as a “key-value” pair
# and returned in response from YooMoney.
# Limitations:
# - no more than 16 keys,
# - no more than 32 characters in the keys title,
# - no more than 512 characters in the keys value,
# - data type is a string in the UTF-8 format.
attribute? :metadata, Types::Hash
# Признак тестовой операции.
attribute :test, Types::Bool
end
end
end

Просмотреть файл

@@ -25,13 +25,13 @@ module Yookassa
# amount [object, required]
# Payment amount. Sometimes YooMoney's partners charge additional commission from the users that is not included in this amount.
attribute :amount, Entity::Amount
attribute :amount, Amount
# income_amount [object, optional]
# Amount of payment to be received by the store: the amount value minus the YooMoney commission.
# If you're a partner using an OAuth token for request authentication, make a request to the store for a right
# to get information about commissions on payments.
attribute? :income_amount, Entity::Amount
attribute? :income_amount, Amount
# description [string, optional]
# Description of the transaction (maximum 128 characters) displayed in your YooMoney Merchant Profile,
@@ -40,11 +40,11 @@ module Yookassa
# recipient [object, required]
# Payment recipient.
attribute :recipient, Entity::Recipient
attribute :recipient, Recipient
# payment_method [object, optional]
# Payment method used for this payment.
attribute? :payment_method, Entity::PaymentMethods
attribute? :payment_method, PaymentMethods
# captured_at [datetime, optional]
# Time of payment capture, based on UTC and specified in the ISO 8601 format. "2018-07-18T10:51:18.139Z"
@@ -62,7 +62,7 @@ module Yookassa
# confirmation [object, optional]
# Selected payment confirmation scenario. For payments requiring confirmation from the user.
# More about confirmation scenarios https://yookassa.ru/en/developers/api#:~:text=confirmation,from%20the%20user.%20More%20about%20confirmation%20scenarios%C2%A0
attribute? :confirmation, Entity::Confirmations
attribute? :confirmation, Confirmations
# test [boolean, required]
# The attribute of a test transaction.
@@ -70,7 +70,7 @@ module Yookassa
# refunded_amount [object, optional]
# The amount refunded to the user. Specified if the payment has successful refunds.
attribute? :refunded_amount, Entity::Amount
attribute? :refunded_amount, Amount
# paid [boolean, required]
# The attribute of a paid order.
@@ -97,11 +97,11 @@ module Yookassa
# cancellation_details [object, optional]
# Commentary to the canceled status: who and why canceled the payment.
# More about canceled payments https://yookassa.ru/en/developers/api#:~:text=cancellation_details,about%20canceled%20payments%C2%A0
attribute? :cancellation_details, Entity::CancellationDetails
attribute? :cancellation_details, CancellationDetails
# authorization_details [object, optional]
# Payment authorization details.
attribute? :authorization_details, Entity::AuthorizationDetails
attribute? :authorization_details, AuthorizationDetails
# transfers [array, optional]
# Information about money distribution: the amounts of transfers and the stores to be transferred to.

71
lib/yookassa/entity/payout.rb Обычный файл
Просмотреть файл

@@ -0,0 +1,71 @@
# frozen_string_literal: true
require_relative "./types"
require_relative "./amount"
require_relative "./payout_destinations"
module Yookassa
module Entity
class Payout < Dry::Struct
attribute? :idempotency_key, Types::String
# id [string, required]
# Deals's ID in YooMoney
attribute :id, Types::String
# Сумма выплаты
attribute :amount, Amount
# Статус выплаты. Возможные значения:
# pending — только для выплат на банковские карты: выплата создана и ожидает подтверждения от эмитента,
# что деньги можно перевести на указанную банковскую карту;
# succeeded — выплата успешно завершена, оплата переведена на платежное средство продавца
# (финальный и неизменяемый статус);
# canceled — выплата отменена, инициатор и причина отмены указаны в объекте cancellation_details
# (финальный и неизменяемый статус).
attribute :status, Types::String.enum("pending", "succeeded", "canceled")
attribute :payout_destination, PayoutDestinations
# Описание сделки (не более 128 символов). Используется для фильтрации при получении списка сделок.
attribute? :description, Types::String.constrained(max_size: 128)
# Время создания сделки. Указывается по UTC и передается в формате ISO 8601. Пример: 2017-11-03T11:52:31.827Z
attribute :created_at, Types::JSON::DateTime
# Сделка, в рамках которой нужно провести выплату. Присутствует, если вы проводите Безопасную сделку
attribute? :deal do
# Идентификатор сделки.
attribute :id, Types::String
end
# Комментарий к статусу canceled: кто отменил выплату и по какой причине.
attribute? :cancellation_details do
# Участник процесса выплаты, который принял решение об отмене транзакции. Может принимать значения
# yoo_money, payment_network и merchant https://yookassa.ru/developers/solutions-for-platforms/safe-deal/integration/payouts#declined-payouts-cancellation-details-party
attribute? :party, Types::String.enum("yoo_money", "payment_network", "merchant")
# Причина отмены выплаты
# fraud_suspected Выплата заблокирована из-за подозрения в мошенничестве
# general_decline Причина не детализирована. Пользователю следует обратиться к инициатору отмены выплаты за уточнением подробностей
# one_time_limit_exceeded Превышен лимит на разовое зачисление. Подробнее о лимитах
# periodic_limit_exceeded Превышен лимит выплат за период времени (сутки, месяц). Подробнее о лимитах
# rejected_by_payee Эмитент отклонил выплату по неизвестным причинам
attribute :reason,
Types::String.enum("fraud_suspected", "general_decline", "one_time_limit_exceeded", "periodic_limit_exceeded", "rejected_by_payee")
end
# metadata [object, optional]
# Any additional data you might require for processing payments (for example, order number), specified as a “key-value” pair
# and returned in response from YooMoney.
# Limitations:
# - no more than 16 keys,
# - no more than 32 characters in the keys title,
# - no more than 512 characters in the keys value,
# - data type is a string in the UTF-8 format.
attribute? :metadata, Types::Hash
# Признак тестовой операции.
attribute :test, Types::Bool
end
end
end

26
lib/yookassa/entity/payout_destinations.rb Обычный файл
Просмотреть файл

@@ -0,0 +1,26 @@
# frozen_string_literal: true
require_relative "./types"
require_relative "./card"
module Yookassa
module Entity
module PayoutDestination
class BankCard < Base
attribute :type, Types.Value("bank_card")
attribute? :card, Card
end
class YooMoney < Base
attribute :type, Types.Value("yoo_money")
# account_number [string, optional]
# The number of the YooMoney wallet used for making the payment.
attribute? :account_number, Types::String.constrained(min_size: 11, max_size: 33)
end
end
PayoutDestinations = PayoutDestination::BankCard | PayoutDestination::YooMoney
end
end

19
lib/yookassa/payouts.rb Обычный файл
Просмотреть файл

@@ -0,0 +1,19 @@
# frozen_string_literal: true
require_relative "./client"
require_relative "./entity/payout"
require_relative "./entity/collection"
module Yookassa
class Payouts < Client
def find(payout_id:)
data = get("payouts/#{payout_id}")
Entity::Payout.new(**data)
end
def create(payload:, idempotency_key: SecureRandom.hex(10))
data = post("payouts", payload: payload, idempotency_key: idempotency_key)
Entity::Payout.new(**data.merge(idempotency_key: idempotency_key))
end
end
end