Posts

Showing posts with the label python3

shop_platform - 串接藍新金流:TradeSha

Image
(本文使用的語言為 python 3) 文件:藍新金流 > API 文件下載 > 多功能收款 MPG。我下載時,版本是 1.6 TradeSha 是什麼 根據文件第 33 頁的第一個表格,需要傳送給藍新金流的參數共有四個,其中一個就是 TradeSha: 根據文件第 70 頁,得到 TradeSha 的方法,是把 TradeInfo 前面加上 HashKey,後面加上 HashIV,然後用 SHA256 做雜湊,接著把所有英文字母轉成大寫。這樣就是合格的 TradeSha。 test case 為: trade_info = 'ff91c8aa01379e4de621a44e5f11f72e4d25bdb1a18242db6cef9ef07d80b0165e476fd1d9acaa53170272c82d122961e1a0700a7427cfa1cf90db7f6d6593bbc93102a4d4b9b66d9974c13c31a7ab4bba1d4e0790f0cbbbd7ad64c6d3c8012a601ceaa808bff70f94a8efa5a4f984b9d41304ffd879612177c622f75f4214fa' key = '12345678901234567890123456789012' iv = '1234567890123456' expect_output = 'EA0A6CC37F40C1EA5692E7CBB8AE097653DF3E91365E6A9CD7E91312413C7BB8' TradeSha 的作用,我猜是藍新金流用來檢查他們收到的 TradeInfo 是否有被篡改。如果有被篡改,他們自己對 TradeInfo 雜湊後的結果,會跟我們傳過去的 TradeSha 值不同。 實作 from Crypto.Hash import SHA256 def get_trade_sha(trade_info: str, key: str = HashKey, iv: str = HashIV) -> str: # 串接 HashKey、TradeSha、HashKey msg = f'H...

shop_platform - 串接藍新金流:TradeInfo

Image
(本文使用的語言為 python 3) 文件:藍新金流 > API 文件下載 > 多功能收款 MPG。我下載時,版本是 1.6 TradeInfo 是什麼 根據文件第 33 頁的第一個表格,需要傳送給藍新金流的參數共有四個,其中一個就是 TradeInfo: 需要放進 TradeInfo 裡的參數欄位,如文件第 33~37 頁所列。準備好這些參數欄位後,要幫這些參數欄位加密,加密後的結果,才是要傳送給藍新金流的 TradeInfo。 加密 根據文件第 65~66 頁,可以看到,要先把參數欄位整理成 query string 的格式,才進行 AES 加密。AES 加密採用 CBC 模式,padding 的 blocksize 是 32。然後把加密後的結果轉成 16 進位。test case 為: data = { 'MerchantID': 3430112, 'RespondType': 'JSON', 'TimeStamp': 1485232229, 'Version': 1.4, 'MerchantOrderNo': 'S_1485232229', 'Amt': 40, 'ItemDesc': 'UnitTest' } Key = '12345678901234567890123456789012' IV = '1234567890123456' expect_output = 'ff91c8aa01379e4de621a44e5f11f72e4d25bdb1a18242db6cef9ef07d80b0165e476fd1d9acaa53170272c82d122961e1a0700a7427cfa1cf90db7f6d6593bbc93102a4d4b9b66d9974c13c31a7ab4bba1d4e0790f0cbbbd7ad64c6d3c8012a601ceaa808bff70f94a8efa5a4f984b9d41304ffd879612177c622f75f4214...

flask 小抄(pip + virtualenv 版)(Flask 2.0.1)

初始化專案 建立並移動到專案資料夾 建立虛擬環境: pyenv exec python -m venv .venv 啟動虛擬環境: . .venv/bin/activate ,或 source .venv/bin/activate 安裝 Flask 套件: pip install Flask 在根目錄建立 app.py 設定環境變數: export FLASK_APP=app.py export FLASK_ENV=development (存擋後會自動重啟 app) .gitignore: Python.gitignore Application Factories  起手式: # app.py from flask import Flask, render_template, request def create_app():     app = Flask(__name__)     # do something     return app 執行專案 flask run 在瀏覽器網址列輸入 http://127.0.0.1:5000/ Jinja2 Builtin Filter 套件管理 requirements.txt 格式: Requirement Specifiers 、 Version specifiers 範例: EXAMPLE REQUIREMENTS FILE 列出已安裝的套件: pip freeze 連接資料庫 mongodb 安裝套件(先確定有啟動 venv): pip install pymongo or support for mongodb+srv:// URIs requires dnspython: pip install pymongo[srv] PyMongo 3.12....

[Udemy] Python 3: Deep Dive 系列課程備忘錄

Part 1 - Functional Section 6 影片編號:85 dir([object]):查詢物件屬性 inspect module 影片編號:90、91 functools.reduce(function, iterable[, initializer]) min(iterable), max(iterable), sum(iterable), any(iterable), all(iterable) 把遞迴改寫成 reduce:程式碼在影片 #91 時間 18:29 處 影片編號:92 functools.partial(func, /, *args, **keywords) 回傳某些參數已經被固定了的 func 可能的坑:呼叫「某些參數已經被固定了的 func」時,仍可以覆寫被固定住的參數值 def power(base, exponent):     return base ** exponent     square = partial(power, exponent=2)     print(square(5, exponent=3)) 影片編號:93 partial 可能的應用場合: sorted(iterable, *, key=None, reverse=False)、list.sort(*, key=None, reverse=False) 的 key 只能放一個參數的函式 影片編號:94 operator module :getitem(a, b)、 itemgetter(item)、attrgetter(attr) Section 7 影片編號:97 宣告 global 變數 when python encounters a function definition at compilt-time when function is...