Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,30 @@ transaction.token
# => "a4e67841-abb0-42de-a364-d1d8f9f4b3c0"
```

## Kassa Receipt
CloudPayments Kassa API (https://cloudpayments.ru/docs/api/kassa)

```ruby
CloudPayments.client.kassa.receipt({
:account_id => "user@example.com",
:customer_receipt => {
:items => [
{
:amount => "13350.00",
:ean13 => nil,
:label => "Good Description",
:price => "13350.00",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Именно строкой надо?

:quantity => 1.0,
:vat => nil
}
]
},
:inn => "7708806666",
:invoice_id => "231312312",
:type => "Income"
})
```

## Webhooks

```ruby
Expand Down
1 change: 1 addition & 0 deletions lib/cloud_payments/models.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
require 'cloud_payments/models/on_recurrent'
require 'cloud_payments/models/on_pay'
require 'cloud_payments/models/on_fail'
require 'cloud_payments/models/on_kassa_receipt'
23 changes: 23 additions & 0 deletions lib/cloud_payments/models/on_kassa_receipt.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true
module CloudPayments
# @see https://cloudpayments.ru/Docs/Notifications#receipt CloudPayments API
class OnKassaReceipt < Model
property :id, required: true
property :document_number, required: true
property :session_number, required: true
property :fiscal_sign, required: true
property :device_number, required: true
property :reg_number, required: true
property :inn, required: true
property :type, required: true
property :ofd, required: true
property :url, required: true
property :qr_code_url, required: true
property :amount, transform_with: DecimalTransform, required: true
property :date_time, transform_with: DateTimeTransform
property :receipt
property :invoice_id
property :transaction_id
property :account_id
end
end
5 changes: 5 additions & 0 deletions lib/cloud_payments/namespaces.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,18 @@
require 'cloud_payments/namespaces/payments'
require 'cloud_payments/namespaces/subscriptions'
require 'cloud_payments/namespaces/orders'
require 'cloud_payments/namespaces/kassa'

module CloudPayments
module Namespaces
def payments
Payments.new(self)
end

def kassa
Kassa.new(self)
end

def subscriptions
Subscriptions.new(self)
end
Expand Down
22 changes: 22 additions & 0 deletions lib/cloud_payments/namespaces/kassa.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# frozen_string_literal: true
module CloudPayments
module Namespaces
class Kassa < Base
InnNotProvided = Class.new(StandardError)
TypeNotProvided = Class.new(StandardError)
CustomerReceiptNotProvided = Class.new(StandardError)

def self.resource_name
'kkt'
end

def receipt(attributes)
attributes.fetch(:inn) { raise InnNotProvided.new('inn attribute is required') }
attributes.fetch(:type) { raise TypeNotProvided.new('type attribute is required') }
attributes.fetch(:inn) { raise CustomerReceiptNotProvided.new('customer_receipt is required') }

request(:receipt, attributes)
end
end
end
end
4 changes: 4 additions & 0 deletions lib/cloud_payments/webhooks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ def validate_data!(data, hmac)
true
end

def kassa_receipt(data)
OnKassaReceipt.new(@serializer.load(data))
end

def on_recurrent(data)
OnRecurrent.new(@serializer.load(data))
end
Expand Down
42 changes: 42 additions & 0 deletions spec/cloud_payments/webhooks_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -227,4 +227,46 @@
specify { expect(subject.failed_transactions).to eq 22 }
specify { expect(subject.next_transaction_at).to eq DateTime.parse('2015-11-18 20:29:05') }
end

describe 'on_kassa_receipt' do
let(:raw_data) do
{"Id"=>"sc_a38ca02005d40db7d32b36a0097b0",
"DocumentNumber"=>"1234",
"SessionNumber"=>"12345",
"FiscalSign"=>"signsgin",
"DeviceNumber"=>"123465",
"RegNumber"=>"12345",
"Inn"=>"0",
"Type"=>"Type",
"Ofd"=>"Ofd",
"Url"=>"http://example.com/url/",
"QrCodeUrl"=>"http://example.com/url",
"Amount"=>"11.11",
"DateTime"=>"2015-11-18 20:29:05",
"Receipt"=>"{}",
"TransactionId" => "12321123",
"InvoiceId" => "123123",
"AccountId" => "3213213"}
end

subject { CloudPayments.webhooks.kassa_receipt(raw_data) }

specify { expect(subject.id).to eq "sc_a38ca02005d40db7d32b36a0097b0" }
specify { expect(subject.document_number).to eq '1234' }
specify { expect(subject.session_number).to eq '12345' }
specify { expect(subject.fiscal_sign).to eq 'signsgin' }
specify { expect(subject.device_number).to eq '123465' }
specify { expect(subject.reg_number).to eq '12345' }
specify { expect(subject.inn).to eq '0' }
specify { expect(subject.type).to eq 'Type' }
specify { expect(subject.ofd).to eq 'Ofd' }
specify { expect(subject.url).to eq 'http://example.com/url/' }
specify { expect(subject.qr_code_url).to eq 'http://example.com/url' }
specify { expect(subject.amount).to eq 11.11 }
specify { expect(subject.date_time).to eq DateTime.parse('2015-11-18 20:29:05') }
specify { expect(subject.receipt).to eq '{}' }
specify { expect(subject.transaction_id).to eq '12321123' }
specify { expect(subject.invoice_id).to eq '123123' }
specify { expect(subject.account_id).to eq '3213213' }
end
end