From 44481a5801e092c5fe97dd8b0fd051a212cac06e Mon Sep 17 00:00:00 2001 From: Wen-Hong Huang Date: Tue, 18 Feb 2025 09:37:47 +0800 Subject: [PATCH] fix: fix queryTradeInfo buildCheckValue issue --- package.json | 2 +- src/__tests__/test-refund-ewallet.ts | 14 ++++++++++++-- src/newebpay.client.ts | 22 ++++++++++++++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2759be4..104e3a7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "newebpay-mpg-sdk", - "version": "2.0.2", + "version": "2.0.3", "description": "藍新金流 幕前支付(MPG) SDK", "main": "./build/index.js", "types": "./build/index.d.ts", diff --git a/src/__tests__/test-refund-ewallet.ts b/src/__tests__/test-refund-ewallet.ts index 6c67e86..f1a4709 100644 --- a/src/__tests__/test-refund-ewallet.ts +++ b/src/__tests__/test-refund-ewallet.ts @@ -18,12 +18,22 @@ describe("MPG API", () => { test("should refund eWallet", async () => { const data = await client.refundEWallet({ - MerchantOrderNo: "1739512946019534", - Amount: 1500, + MerchantOrderNo: "17395115177210224", + Amount: 3000, PaymentType: "LINEPAY", }); console.log(data); expect(data).toBeDefined(); }); + + test("should query trade info", async () => { + const data = await client.queryTradeInfo({ + MerchantOrderNo: "17395115177210224", + Amt: 3000, + }); + + console.log(data); + expect(data).toBeDefined(); + }); }); diff --git a/src/newebpay.client.ts b/src/newebpay.client.ts index 102cc1c..fac169e 100644 --- a/src/newebpay.client.ts +++ b/src/newebpay.client.ts @@ -122,13 +122,13 @@ export class NewebpayClient { const MerchantID = this.merchantId; const Version = "1.3"; const TimeStamp = this.getTimeStamp(); - const CheckCode = this.buildCheckCode({ Amt, MerchantID, MerchantOrderNo }); + const CheckValue = this.buildCheckValue({ Amt, MerchantID, MerchantOrderNo }); const formData = new FormData(); formData.append("MerchantID", MerchantID); formData.append("Version", Version); formData.append("RespondType", "JSON"); - formData.append("CheckValue", CheckCode); + formData.append("CheckValue", CheckValue); formData.append("TimeStamp", TimeStamp); formData.append("MerchantOrderNo", MerchantOrderNo); formData.append("Amt", Amt); @@ -532,6 +532,24 @@ export class NewebpayClient { .toUpperCase(); } + public buildCheckValue(params: { [key: string]: any }) { + const data = Object.keys(params) + .sort() + .reduce((obj, key) => { + obj[key] = params[key]; + return obj; + }, {} as { [key: string]: any }); + + const paramsStr = new URLSearchParams(data).toString(); + const checkStr = `IV=${this.hashIV}&${paramsStr}&Key=${this.hashKey}`; + + return crypto + .createHash("sha256") + .update(checkStr) + .digest("hex") + .toUpperCase(); + } + public sendApiRequest = async (params: { apiPath: string; data: any }) => { const headers: AxiosRequestHeaders = {}; headers["Content-Type"] = "multipart/form-data";