111 lines
3.1 KiB
Ruby
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
|