module Safecrow

Constants

VERSION

Attributes

configuration[RW]

Public Class Methods

add_card(user_id, url) click to toggle source

return “redirect_url”

# File lib/safecrow.rb, line 57
def self.add_card(user_id, url)
  endpoint = "/users/#{user_id}/cards"
  payload = { redirect_url: url }
  make_request(endpoint, payload, 'POST')['redirect_url']
end
annul_order(order_id, reason = 'Some reason') click to toggle source

return some hash with ids and etc…

# File lib/safecrow.rb, line 109
def self.annul_order(order_id, reason = 'Some reason')
  endpoint = "/orders/#{order_id}/annul"
  payload = { reason: reason }
  make_request(endpoint, payload, 'POST')
end
calculate(price) click to toggle source

return {“price”=>123, “supplier_service_cost”=>4, “consumer_service_cost”=>0}

# File lib/safecrow.rb, line 72
def self.calculate(price)
  endpoint = '/calculate'
  payload = {
      price: price,
      service_cost_payer: 'supplier',
      #consumer_cancellation_cost: 0
  }
  make_request(endpoint, payload, 'POST')
end
cancel_order(order_id, reason = 'Some reason') click to toggle source

return some hash with ids and etc…

# File lib/safecrow.rb, line 130
def self.cancel_order(order_id, reason = 'Some reason')
  endpoint = "/orders/#{order_id}/cancel"
  payload = { reason: reason }
  make_request(endpoint, payload, 'POST')
end
close_order(order_id, reason = 'Some reason', discount = 0) click to toggle source

return some hash with ids and etc…

# File lib/safecrow.rb, line 137
def self.close_order(order_id, reason = 'Some reason', discount = 0)
  endpoint = "/orders/#{order_id}/close"
  payload = {
      reason: reason,
      discount: discount*100
  }
  make_request(endpoint, payload, 'POST')
end
configure() { |configuration| ... } click to toggle source
# File lib/safecrow.rb, line 20
def self.configure
  yield(configuration)
end
confirm_preauth(order_id, reason = 'Some reason') click to toggle source
# File lib/safecrow.rb, line 160
def self.confirm_preauth(order_id, reason = 'Some reason')
  endpoint = "/orders/#{order_id}/preauth/confirm"
  payload = { reason: reason }
  make_request(endpoint, payload, 'POST')
end
create_order(consumer_id, supplier_id, price, delivery_cost, delivery_cost_payer = 'consumer') click to toggle source

return id

# File lib/safecrow.rb, line 83
def self.create_order(consumer_id, supplier_id, price, delivery_cost, delivery_cost_payer = 'consumer')
  endpoint = '/orders'
  payload = {
      consumer_id: consumer_id,
      supplier_id: supplier_id,
      price: price*100, # в копьях
      description: 'description',
      service_cost_payer: 'supplier',
      delivery_cost: delivery_cost*100,
      delivery_cost_payer: delivery_cost_payer,
  }
  make_request(endpoint, payload, 'POST')['id']
end
create_user(email, phone, name) click to toggle source

return id

# File lib/safecrow.rb, line 31
def self.create_user(email, phone, name)
  endpoint = '/users'
  payload = { email: email, phone: phone.delete('(').delete(')').delete('-').delete(' '), name: name }
  make_request(endpoint, payload, 'POST')['id']
end
edit_user(sc_id, phone, name) click to toggle source

return id

# File lib/safecrow.rb, line 49
def self.edit_user(sc_id, phone, name)
  endpoint = "/users/#{sc_id}"
  payload = { phone: phone.delete('(').delete(')').delete('-').delete(' '),
              name: name }
  make_request(endpoint, payload, 'POST')['id']
end
escalate_order(order_id, reason = 'Some reason') click to toggle source

return some hash with ids and etc…

# File lib/safecrow.rb, line 147
def self.escalate_order(order_id, reason = 'Some reason')
  endpoint = "/orders/#{order_id}/escalate"
  payload = { reason: reason }
  make_request(endpoint, payload, 'POST')
end
find_user(email) click to toggle source

return id

# File lib/safecrow.rb, line 38
def self.find_user(email)
  endpoint = "/users?email=#{email}"
  (make_request(endpoint, {}, 'GET').first || {})['id']
end
get_order(order_id) click to toggle source

return {“id”=>9529, “consumer_id”=>4315, “supplier_id”=>4315, “price”=>45000, “consumer_service_cost”=>0, “supplier_service_cost”=>1800, “consumer_delivery_cost”=>0, “supplier_delivery_cost”=>0, “consumer_cancellation_cost”=>0, “discount”=>0, “description”=>“description”, “status”=>“pending”, “supplier_payout_method_id”=>1748, “supplier_payout_method_type”=>“CreditCard”, “created_at”=>“2018-07-13T11:18:25+03:00”, “updated_at”=>“2018-07-13T11:21:59+03:00”, “extra”=>{}}

# File lib/safecrow.rb, line 97
def self.get_order(order_id)
  endpoint = "/orders/#{order_id}"
  make_request(endpoint, {}, 'GET')
end
get_orders(user_id) click to toggle source

return some array with hashes with ids and etc…

# File lib/safecrow.rb, line 103
def self.get_orders(user_id)
  endpoint = "/users/#{user_id}/orders"
  make_request(endpoint, {}, 'GET')
end
get_user_by_id(sc_user_id) click to toggle source
# File lib/safecrow.rb, line 43
def self.get_user_by_id(sc_user_id)
  endpoint = "/users/#{sc_user_id}"
  make_request(endpoint, {}, 'GET')
end
get_user_cards(user_id) click to toggle source

return [{ number: '', id: '' }]

# File lib/safecrow.rb, line 64
def self.get_user_cards(user_id)
  endpoint = "/users/#{user_id}/cards"
  make_request(endpoint, {}, 'GET').map do |card|
    { number: card['card_number'], id: card['id'] }
  end
end
pay_order(order_id, redirect_url) click to toggle source

return payment_url

# File lib/safecrow.rb, line 116
def self.pay_order(order_id, redirect_url)
  endpoint = "/orders/#{order_id}/pay"
  payload = { redirect_url: redirect_url }
  make_request(endpoint, payload, 'POST')['payment_url']
end
payout_card(user_id, order_id, supplier_payout_card_id) click to toggle source

return “redirect_url”

# File lib/safecrow.rb, line 123
def self.payout_card(user_id, order_id, supplier_payout_card_id)
  endpoint = "/users/#{user_id}/orders/#{order_id}"
  payload = { supplier_payout_card_id: supplier_payout_card_id }
  make_request(endpoint, payload, 'POST')
end
preauth_order(order_id, redirect_url) click to toggle source

return {“redirect_url”=>“”, “consumer_pay”=>10000}

# File lib/safecrow.rb, line 154
def self.preauth_order(order_id, redirect_url)
  endpoint = "/orders/#{order_id}/preauth"
  payload = { redirect_url: redirect_url }
  make_request(endpoint, payload, 'POST')
end
release_preauth(order_id, reason = 'Some reason') click to toggle source
# File lib/safecrow.rb, line 166
def self.release_preauth(order_id, reason = 'Some reason')
  endpoint = "/orders/#{order_id}/preauth/release"
  payload = { reason: reason }
  make_request(endpoint, payload, 'POST')
end
reset() click to toggle source
# File lib/safecrow.rb, line 16
def self.reset
  @configuration = Configuration.new
end
set_settings(url) click to toggle source
# File lib/safecrow.rb, line 24
def self.set_settings(url)
  endpoint = '/settings'
  payload = {callback_url: url}
  make_request(endpoint, payload, 'POST')
end

Private Class Methods

auth(endpoint, data) click to toggle source
# File lib/safecrow.rb, line 178
def self.auth(endpoint, data)
  c = Curl::Easy.new(Safecrow.configuration.url + Safecrow.configuration.prefix + endpoint)
  c.headers['Content-Type'] = 'application/json'
  c.http_auth_types = :basic
  c.username = Safecrow.configuration.apikey
  c.password = OpenSSL::HMAC.hexdigest('SHA256', Safecrow.configuration.apisecret, data)
  c
end
log(data) click to toggle source
# File lib/safecrow.rb, line 174
def self.log(data)
  puts data
end
make_request(endpoint, payload, method) click to toggle source
# File lib/safecrow.rb, line 187
def self.make_request(endpoint, payload, method)
  data = Safecrow.configuration.apikey + method + Safecrow.configuration.prefix + endpoint + proceed_payload(payload)
  c = auth(endpoint, data)
  case method
  when 'GET'
    c.perform
  when 'POST'
    c.post(proceed_payload(payload))
  else
    raise ArgumentError, "undefined method #{method}"
  end
  log(endpoint)
  log(c.status)
  log(c.body)
  raise c.status + c.body if c.status != '200 OK'
  JSON.parse(c.body)
end
proceed_payload(payload) click to toggle source
# File lib/safecrow.rb, line 205
def self.proceed_payload(payload)
  if payload.empty?
    ''
  else
    payload.to_json
  end
end