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