Files
Dalan/app/services/jibit_service.rb
2026-08-13 19:56:46 +03:30

111 lines
3.1 KiB
Ruby

class JibitService
attr_reader :base_url
attr_reader :api_key
attr_reader :api_secret
attr_reader :conn
attr_accessor :response
attr_accessor :access_token
attr_accessor :refresh_token
attr_accessor :called_method
# one day
JIBIT_EXPIRE_TIME = 86400
def initialize
@base_url = Barong::App.config.jibit_api_url
@api_key = Barong::App.config.jibit_api_key
@api_secret = Barong::App.config.jibit_api_secret
@conn = Faraday.new(base_url)
conn.headers['Content-Type'] = 'application/json'
@access_token = read_access_token
end
def retry_options
{ max: 5,
retry_statuses: [401, 409, 500] }
end
def read_access_token
return Rails.cache.read('jibit_access_token') if Rails.cache.read('jibit_access_token').present?
generate_access_token
raise 'please try again(jibit not create token)' unless access_token.present?
Rails.cache.write('jibit_access_token', access_token, expires_in: JIBIT_EXPIRE_TIME)
access_token
end
def generate_access_token
@called_method = __method__.to_s
@response = conn.post('tokens/generate') do |req|
req.body = { apiKey: api_key, secretKey: api_secret }.to_json
end
@access_token, @refresh_token = parse('accessToken', 'refreshToken')
end
def generate_refresh_token
@called_method = __method__.to_s
@response = conn.post('tokens/refresh') do |req|
req.body = { accessToken: access_token, refreshToken: refresh_token }.to_json
end
@access_token, @refresh_token = parse('accessToken', 'refreshToken')
end
def old_iban_info(iban)
@called_method = __method__.to_s
conn.authorization :Bearer, access_token
@response = conn.post('services/ibanInfo') do |req|
req.body = { iban: iban }.to_json
end
end
def iban_info(iban)
@called_method = __method__.to_s
conn.authorization :Bearer, access_token
@response = conn.get('ibans') do |req|
req.params[:value] = iban
end
end
def old_card_info(card_number)
@called_method = __method__.to_s
conn.authorization :Bearer, access_token
@response = conn.post('services/cardInfo') do |req|
req.body = { cardNumber: card_number }.to_json
end
end
def card_info(card_number)
@called_method = __method__.to_s
conn.authorization :Bearer, access_token
@response = conn.get('cards') do |req|
req.params[:number] = card_number
end
end
def old_mobile_info(number, national_code)
@called_method = __method__.to_s
conn.authorization :Bearer, access_token
@response = conn.post('services/matchNationalCodeAndMobileNumber') do |req|
req.body = { nationalCode: national_code, mobile: number }.to_json
end
end
def mobile_info(number, national_code)
@called_method = __method__.to_s
conn.authorization :Bearer, access_token
@response = conn.get('services/matching') do |req|
req.params[:nationalCode] = national_code
req.params[:mobileNumber] = number
end
end
private
def parse(*keys)
parsed_data = JSON.parse(response.body)
keys.map { |key| parsed_data.dig(key) }
end
end