/** * CheckMacEncoder * * 負責產生和驗證 ECPay 物流 API 的 CheckMacValue(檢查碼)。 * * ECPay 物流 API 使用 MD5 雜湊演算法。 * * @example * ```typescript * const encoder = new CheckMacEncoder('your-hash-key', 'your-hash-iv') * * // 產生 CheckMacValue * const payload = encoder.encodePayload({ MerchantID: '123', ... }) * * // 驗證回應 * const isValid = encoder.verifyResponse(responseData) * ``` */ export declare class CheckMacEncoder { private readonly hashKey; private readonly hashIV; /** * 建立 CheckMacEncoder 實例 * * @param hashKey - ECPay 提供的 HashKey * @param hashIV - ECPay 提供的 HashIV * @throws {LogisticsError} 當 HashKey 或 HashIV 缺失時 */ constructor(hashKey: string, hashIV: string); /** * 為請求內容加入 CheckMacValue * * @param payload - 原始請求內容 * @returns 包含 CheckMacValue 的請求內容 */ encodePayload(payload: Record): Record; /** * 驗證回應資料的 CheckMacValue * * @param responseData - ECPay 回應資料 * @returns 驗證是否通過 */ verifyResponse(responseData: Record): boolean; /** * 驗證回應資料,若驗證失敗則拋出錯誤 * * @param responseData - ECPay 回應資料 * @returns 原始回應資料 * @throws {LogisticsError} 當 CheckMacValue 驗證失敗時 */ verifyOrFail(responseData: Record): Record; /** * 使用 MD5 產生 CheckMacValue * * 步驟: * 1. 將參數按照 key 字母順序排序(不區分大小寫) * 2. 組合成 query string 格式 * 3. 在前面加上 HashKey=xxx&,後面加上 &HashIV=xxx * 4. URL Encode 後轉小寫 * 5. 轉換特殊字元以符合 .NET 編碼規則 * 6. MD5 雜湊後轉大寫 * * @param data - 要計算 CheckMacValue 的資料 * @returns 大寫的 MD5 雜湊值 */ generateCheckMacValue(data: Record): string; /** * 轉換 URL 編碼以符合 .NET 規則 * * JavaScript 的 encodeURIComponent 與 .NET 的 UrlEncode 有些差異, * 需要手動轉換某些字元。 * * @private * @param str - URL 編碼後的字串 * @returns 符合 .NET 規則的字串 */ private dotNetUrlEncode; }