Initial commit
This commit is contained in:
110
app/services/jibit_service.rb
Normal file
110
app/services/jibit_service.rb
Normal file
@@ -0,0 +1,110 @@
|
||||
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
|
||||
Reference in New Issue
Block a user