class Listo::Invoicing
Public Class Methods
cancel(id)
click to toggle source
# File lib/listo/invoicing.rb, line 50 def cancel(id) params = { passcode: client.pkey_passphrase, certificate_der: cert.to_der64, private_key_der: pkey.base64, } response = client.connection.post("invoicing/cancel/invoice/#{id}/", params).body success_codes = [ 201, # returned after the cancellation request 202 # returned after a cancellation request for an already requested cancellation invoice ] if success_codes.exclude? response.dig('code') raise Listo::Error::CancelError, response.dig('message') end response end
certify_xml(xml, original_chain, data)
click to toggle source
# File lib/listo/invoicing.rb, line 30 def certify_xml(xml, original_chain, data) params = { xml: xml, certificate_num: certificate_num, certificate: certificate, signature: signature(original_chain), data: data, } response = client.connection.post('invoicing/certify_xml', params).body # warning: listo reponds stamp errors with HTTP 200 if response.dig('status') == 'error' raise Listo::Error::StampError, response.dig('error_description') end response end
export_json(params = [])
click to toggle source
# File lib/listo/invoicing.rb, line 22 def export_json(params = []) client.connection.get('invoices/export_json', params) end
generate_xml(params = [])
click to toggle source
# File lib/listo/invoicing.rb, line 26 def generate_xml(params = []) client.connection.post('invoicing/generate_xml', params).body end
pay(id, params = [])
click to toggle source
# File lib/listo/invoicing.rb, line 11 def pay(id, params = []) client.connection.post do |request| request.url "invoices/#{id}/payments/" request.body = params end.body end
search()
click to toggle source
# File lib/listo/invoicing.rb, line 18 def search client.connection.get('invoices/search') end
Private Class Methods
certificate()
click to toggle source
# File lib/listo/invoicing.rb, line 77 def certificate cert.to_der64.delete("\n") end
certificate_num()
click to toggle source
# File lib/listo/invoicing.rb, line 81 def certificate_num cert.serial.to_s(2) end
client()
click to toggle source
# File lib/listo/invoicing.rb, line 73 def client Listo::Client.current end
signature(original_chain)
click to toggle source
# File lib/listo/invoicing.rb, line 85 def signature(original_chain) original_chain.gsub!("|#{'0' * 20}|", "|#{certificate_num}|") signature = pkey.sign(OpenSSL::Digest::SHA256.new, original_chain) Base64.encode64(signature).delete("\n") end