Module: Focas::Config

Included in:
Focas
Defined in:
lib/focas/config.rb

Constant Summary collapse

OPTIONS =
%w[
  token
  merID
  MerchantID
  TerminalID
  MerchantName
  customize
  lidm
  purchAmt
  CurrencyNote
  AutoCap
  AuthResURL
  frontFailUrl
  PayType
  PeriodNum
  LocalDate
  LocalTime
  reqToken
  subMerchID
  enCodeType
  timeoutDate
  timeoutTime
  timeoutSecs
  Currency
  lagSelect
  threeDSAuthInd
].freeze
MAPPING_TABLE =

標 **[必] 為必填,另外 threeDSAuthInd 是 3DS 驗證,需要時就必填 TradeInfo 參數

{
  token: 'token', # **[必] 驗證參數,於商店自行設定,然後請銀行人員人工放行
  merID: 'mer_id', # **[必] 網站特店自訂代碼(請注意 merID 與 MerchantID 不同), number <= 10
  MerchantID: 'merchant_id', # **[必] 收單銀行授權使用的特店代號(由收單銀行編製提供), number 固定 15
  TerminalID: 'terminal_id', # **[必] 收單銀行授權使用的機台代號(由收單銀行編製提供), number 固定 8
  MerchantName: 'merchant_name', # 特店名稱,僅供顯示
  customize: 'customize', # **[必] 客製化付款授權網頁辨識碼(0: 不客製;1-8 有 8 種客製化樣式可選擇)
  lidm: 'lidm', # * 交易訂單編號,建議訂單編號不可重複編號,且在 16 位以下最佳(如果是銀聯卡,則不能用 -、_ 符號)
  purchAmt: 'purch_amt', # **[必] 新台幣整數(10 位數內),如果是金融卡,最大交易為 200 萬
  CurrencyNote: 'currency_note', # 註記說明,50 字內
  AutoCap: 'auto_cap', # 是否自動轉入請款檔作業 (0: 預設不轉入 / 1: 自動轉入)
  AuthResURL: 'auth_res_url', # 授權結果回傳網址,最多 512 位元組
  frontFailUrl: 'front_fail_url', #  銀聯網路 UPOP 交易失敗,返回商戶跳轉網址
  PayType: 'pay_type', # 交易類別碼 (0: 預設一般交易 / 1: 分期 / 2: 紅利)
  PeriodNum: 'period_num', # 分期期數 (1-99)
  LocalDate: 'local_date', # 購買地交易日期(yyyymmdd)(預設為系統日期)
  LocalTime: 'local_time', # 購買地交易時間(HHMMSS) (預設為系統時間)
  reqToken: 'req_token', # 交易驗證碼,最大長度 64 位
  subMerchID: 'sub_merch_id', # 次特店代號,固定長度 8 位
  enCodeType: 'encode_type', # *[必] 網頁編碼格式(預設為 BIG5),所以必傳 "UTF-8"
  timeoutDate: 'timeout_date', # 設定交易逾時日期(yyyymmdd),固定長度 8 位
  timeoutTime: 'timeout_time', # 設定交易逾時起始時間(HHMMSS),固定長度 6 位
  timeoutSecs: 'timeout_secs', # 設定交易逾時秒數,固定長度 3 位 (最大值為 600 秒),先不設定,使用 600 會錯
  Currency: 'currency', # 交易幣別,固定長度 3 位 (901)
  lagSelect: 'lag_select', # 語言選擇,固定長度 1 位 (0: 繁 / 1: 簡 / 2: 英 / 3: 日 )
  threeDSAuthInd: 'three_ds_auth_ind', # 3D 交易驗證類型,若該特店設定支援 3D 交易,前端未帶此欄位,則預設為 0101 (0101 表示支付類交易驗證(PA)的 Payment transaction。 0204 表示非支付類交易驗證(NPA)的 Add card。0205 表示非支付類交易驗證(NPA)的 Maintain card。 註:綁卡驗證應使用 0204 或 0205)
}.freeze

Instance Method Summary collapse

Instance Method Details

#api_base_urlObject



89
90
91
92
93
94
# File 'lib/focas/config.rb', line 89

def api_base_url
  self.production_mode ||= 0
  self.api_base_url = self.production_mode == 0 ? 
    'https://www.focas-test.fisc.com.tw' : 
    'https://www.focas.fisc.com.tw'
end

#check_resp_token(data) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/focas/config.rb', line 104

def check_resp_token(data)
  # 資料錯誤的先 return
  return false if not data

  ret = data.transform_keys(&:to_sym)
  return false if not ret[:respToken]

  begin
    # to hash
    resp_token = ret[:respToken]

    options = Config.options
    settings = options.transform_keys(&:to_sym)

    # 檢查 ret[:status] 成功或失敗
    if ret[:status] == '0'
      # 成功
      tmp_arr = %W(
      #{ret[:status]}
      #{ret[:lidm]}
      #{settings[:token]}
      #{ret[:authCode]}
      #{ret[:authRespTime]}
      #{settings[:MerchantID]}
      #{settings[:TerminalID]}
      )

      hash_string = tmp_arr.join('&')
    else
      # 失敗
      tmp_arr = %W(
      #{ret[:status]}
      #{ret[:errcode]}
      #{ret[:lidm]}
      #{settings[:token]}
      #{ret[:authRespTime]}
      #{settings[:MerchantID]}
      #{settings[:TerminalID]}
      )
    end

    # 開始驗證 token
    hash_token = Digest::SHA256.hexdigest(hash_string).upcase
    return (resp_token.upcase == hash_token)
  rescue
    return false
  end
end

#configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Focas::Config)

    the object that the method was called on



85
86
87
# File 'lib/focas/config.rb', line 85

def configure
  yield self
end

#create_lidmObject



100
101
102
# File 'lib/focas/config.rb', line 100

def create_lidm
  lidm = "#{Time.now.strftime("%Y%m%d%H%M%S")}_#{SecureRandom.hex(2).upcase}"
end

#get_payment_urlObject



96
97
98
# File 'lib/focas/config.rb', line 96

def get_payment_url
  "#{self.api_base_url}/FOCAS_WEBPOS/online/"
end