class BanksApi::Shinsei::Session
Constants
- URL
Attributes
credentials[R]
session_id[R]
Public Class Methods
new(credentials)
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 12 def initialize(credentials) @credentials = CredentialSet.new(credentials) end
Public Instance Methods
fetch_accounts()
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 16 def fetch_accounts login data = connection.post(nil, accounts_data).body data["fldAccountID"].map.with_index do |account_id, index| BankAccount.new( id: account_id, type: data["fldAccountType"][index], description: data["fldAccountDesc"][index], currency: data["fldCurrCcy"][index], balance: data["fldCurrBalance"][index], base_balance: data["fldBaseBalance"][index], session: self ) end # logout end
fetch_transactions(account:, from:, to:)
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 35 def fetch_transactions(account:, from:, to:) login fetch_accounts post_data = transactions_data(account: account, from: from, to: to, step: 1) connection.post(nil, post_data) post_data = transactions_data(account: account, from: from, to: to, step: 2) csv = connection.post(nil, post_data).body.lines[9..-1].join headers = [:date, :ref_no, :description, :debit, :credit, :balance] CSV.parse(csv, col_sep: "\t", headers: headers).map do |csv_line| Transaction.from_csv_line(csv_line, currency: account.currency) end.reverse end
Private Instance Methods
accounts_data()
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 112 def accounts_data { "MfcISAPICommand" => "EntryFunc", "fldAppID" => "RT", "fldTxnID" => "ACS", "fldScrSeqNo" => "00", "fldRequestorID" => "23", "fldSessionID" => session_id, "fldAcctID" => "", "fldAcctType" => "CHECKING", "fldIncludeBal" => "Y", "fldPeriod" => "", "fldCurDef" => "JPY" } end
connection()
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 64 def connection @_connection ||= initialize_connection end
initialize_connection()
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 68 def initialize_connection Faraday.new(url: URL) do |faraday| faraday.request(:url_encoded) faraday.use(FaradayMiddleware) faraday.adapter(Faraday.default_adapter) end end
login()
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 55 def login data = connection.post(nil, login_phase1_data).body @session_id = data["fldSessionID"] connection.post(nil, login_phase2_data(data)) end
login_phase1_data()
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 76 def login_phase1_data { "MfcISAPICommand" => "EntryFunc", "fldAppID" => "RT", "fldTxnID" => "LGN", "fldScrSeqNo" => "01", "fldRequestorID" => "41", "fldDeviceID" => "01", "fldUserID" => credentials.account, "fldUserNumId" => credentials.pin, "fldUserPass" => credentials.password, "fldLangID" => "ENG", # or JPN "fldRegAuthFlag" => "A" } end
login_phase2_data(data)
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 92 def login_phase2_data(data) { "MfcISAPICommand" => "EntryFunc", "fldAppID" => "RT", "fldTxnID" => "LGN", "fldScrSeqNo" => "41", "fldRequestorID" => "55", "fldSessionID" => session_id, "fldDeviceID" => "01", "fldGridChallange1" => credentials.get_grid_value(data["fldGridChallange1"]), "fldGridChallange2" => credentials.get_grid_value(data["fldGridChallange2"]), "fldGridChallange3" => credentials.get_grid_value(data["fldGridChallange3"]), "fldUserID" => "", "fldUserNumId" => "", "fldNumSeq" => "1", "fldLangID" => "ENG", "fldRegAuthFlag" => data["fldRegAuthFlag"] } end
logout()
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 61 def logout end
transactions_data(account:, from:, to:, step:)
click to toggle source
# File lib/banks_api/shinsei/session.rb, line 128 def transactions_data(account:, from:, to:, step:) { "MfcISAPICommand" => "EntryFunc", "fldScrSeqNo" => "01", "fldAppID" => "RT", 'fldSessionID'=> session_id, "fldTxnID" => %w(ACA DAA)[step-1], "fldRequestorID" => "9", "fldAcctID" => account.id, "fldAcctType" => account.type, "fldIncludeBal" => "N", "fldStartDate" => from.strftime("%Y%m%d"), "fldEndDate" => to.strftime("%Y%m%d"), "fldStartNum" => "0", "fldEndNum" => "0", "fldCurDef" => "JPY", "fldPeriod" => (from ? "2" : "1") } end