【Flask 教學】Python 綠界金流 API 信用卡串接

ecpay_photo

詳細記錄了當時使用 Flask 串接綠界金流 API 的過程,目前 Python 串接綠界支付的文章不多,希望此篇對您有幫助!

  • 撰寫此篇時間為 2020-2-14,綠界 API 文件版本 V 5.1.38
  • 資料庫使用 flask_sqlalchemy (2.4.0) – ORM
  • 語言 Python (3.7.2) – flask (1.1.1)

此篇完整程式碼放置於 GitHub,歡迎 git clone 使用。

本篇參考的綠界支付官方文件如下:

大綱

本篇分成四個部分:

  1. 環境參數:將正式站和測試站的環境參數寫於此處
  2. 跳轉至綠界前:建立訂單後跳轉至 ECpay 頁面
  3. 綠界回傳:ReturnURL 綠界 Server 端回傳 (POST)
  4. 綠界回傳:OrderResultURL 綠界 Client 端 (POST)

第二部分對應到流程第 2 點,建立訂單
第三部分對應到流程第 13 點,背景接收付款結果 ReturnURL
第四部分對應到流程第 15 點,顯示結果畫面 OrderResultURL

第一部分:環境參數設定

方便用於正式和測試站的 Hashkey 參數轉換,以及檢查碼 [CheckMacValue] 的驗證計算

關於綠界檢查碼 [CheckMacValue] 的驗證方式:

  1. 將傳遞參數依照字母排序
  2. 參數最前面加上 HashKey、最後面加上 HashIV
  3. 進行 URL encode
  4. 轉為小寫
  5. 以 SHA256 加密方式來產生雜凑值
  6. 再轉大寫產生 CheckMacValue

第二部分:跳轉至綠界前

  1. 先從 session 取得使用者id (uid),以及購物車頁面 POST 的收件人資訊
  2. 建立訂單資訊
  3. 將交易商品 & 金額寫進參數,並呼叫綠界 SDK,跳轉至綠界

第三部分:綠界回傳交易資訊

ECpay 回傳結果有三種:

  1. ReturnURL : 綠界 Server端 POST 付款完成通知至指定網址
    • 因資安關係限制 443 port & 合法的 domain 才能正確接收成功
  2. OrderResultURL: 綠界 Client端 POST,回傳付款結果至指定網址
  3. ClientBackURL : 綠界 Client端 GET,使用者點選按鈕後返回連結
    • 如果有同時使用 OrderResultURL,使用者在付款成功後,會直接跳轉到 OrderResultURL 指定頁面 (POST)
    • 如果只有使用 ClientBackURL,使用者在付款成功後,會停留在綠界支付的交易成功頁面 ( 適用於方便 debug )

一. 設定 ReturnURL 接收頁面

  1. 限制於 443 port & 合法的 domain 才能正確接收成功,如果是測試 locahost 並沒有 https 的話,建議可以使用 ngrox 來獲得 https 進行測試
  2. 如有接收成功,官方要求回應 ‘1|OK’

二. 設定 OrderResultURL 接收頁面

  1. 先檢驗綠界傳送的 check_mac_value 是否為正確
  2. 判斷回傳資訊,交易成功則修改修資料庫並且跳轉至交易成功頁面
  3. 判斷回傳資訊,失敗則跳轉至失敗頁面

最後:

此篇完整程式碼放置於 GitHub,歡迎 git clone 使用。

關於更多 Python Flask 教學的延伸閱讀:

▍關於 Flask 教學系列目錄:

▍其他 Flask 相關教學:

有關Max行銷誌的最新文章,都會發佈在Max的Facebook粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!

在〈【Flask 教學】Python 綠界金流 API 信用卡串接〉中有 1 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *