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