diff --git a/dist.zip b/dist.zip new file mode 100644 index 0000000..7696b25 Binary files /dev/null and b/dist.zip differ diff --git a/src/pages/DigitalElectronics/index.tsx b/src/pages/DigitalElectronics/index.tsx index 5092956..56a86ac 100644 --- a/src/pages/DigitalElectronics/index.tsx +++ b/src/pages/DigitalElectronics/index.tsx @@ -607,7 +607,11 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => { language: "" }) } - let token = await handleGetForwardJDPJInterface(req) + let newreq: any = { + name: "", + value: encryptAES(JSON.stringify(req)) + } + let token = await handleGetForwardJDPJInterface(newreq) let tokenData = token ? JSON.parse(token as any) : "" console.log('tokenDatatokenDatatokenDatatokenDatadasdsa', tokenData); @@ -641,8 +645,15 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => { usertype: "" }) } - let accessTokenData = await handleGetForwardJDPJInterface(tokenReq) + + let newTokenReq: any = { + name: "", + value: encryptAES(JSON.stringify(tokenReq)) + } + let accessTokenData = await handleGetForwardJDPJInterface(newTokenReq) + let accessToken = JSON.parse(accessTokenData as any) + console.log('dajksdjaksd', accessToken); setAppToken(appToken) setAccessToken(accessToken.data.access_token) @@ -674,7 +685,12 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => { Access_token: accessToken.data.access_token, data: JSON.stringify(requestParams) } - let responseOld = await handleGetForwardJDPJInterface(reqResult) + + let newreqResult: any = { + name: "", + value: encryptAES(JSON.stringify(reqResult)) + } + let responseOld = await handleGetForwardJDPJInterface(newreqResult) console.log('responseOldresponseOldresponseOld', responseOld); responseOld = JSON.parse(responseOld as any) diff --git a/src/pages/DigitalElectronics/service.ts b/src/pages/DigitalElectronics/service.ts index 5ed0bda..3f798ed 100644 --- a/src/pages/DigitalElectronics/service.ts +++ b/src/pages/DigitalElectronics/service.ts @@ -1,4 +1,5 @@ import requestKaiPiao from "@/utils/requestKaiPiao" +import requestMemberApi from "@/utils/requestMemberApi" import requestOld from "@/utils/requestOld" @@ -112,7 +113,7 @@ export async function handleGetBILLDETAILList(params: any) { // 包一层的中转接口 用来解决金飘云的跨域问题 export async function handleGetForwardJDPJInterface(params: any) { - const data = await requestKaiPiao(`/Invoice/ForwardJDPJInterface`, { + const data = await requestMemberApi(`/ThirdInterface/ForwardJDPJInterface`, { method: 'POST', data: params }) diff --git a/src/pages/InvoiceInquiry/index.tsx b/src/pages/InvoiceInquiry/index.tsx index 7cff33a..6511d30 100644 --- a/src/pages/InvoiceInquiry/index.tsx +++ b/src/pages/InvoiceInquiry/index.tsx @@ -543,7 +543,11 @@ const InvoiceInquiry: React.FC<{ currentUser: any }> = (props) => { language: "" }) } - let token = await handleGetForwardJDPJInterface(req) + let newreq: any = { + name: "", + value: encryptAES(JSON.stringify(req)) + } + let token = await handleGetForwardJDPJInterface(newreq) let tokenData = token ? JSON.parse(token as any) : "" console.log('tokenDatatokenDatatokenDatatokenDatadasdsa', tokenData); @@ -577,7 +581,11 @@ const InvoiceInquiry: React.FC<{ currentUser: any }> = (props) => { usertype: "" }) } - let accessTokenData = await handleGetForwardJDPJInterface(tokenReq) + let newTokenReq: any = { + name: "", + value: encryptAES(JSON.stringify(tokenReq)) + } + let accessTokenData = await handleGetForwardJDPJInterface(newTokenReq) let accessToken = JSON.parse(accessTokenData as any) setAppToken(appToken) diff --git a/src/pages/redReversal/index.tsx b/src/pages/redReversal/index.tsx index aee9802..c2edd62 100644 --- a/src/pages/redReversal/index.tsx +++ b/src/pages/redReversal/index.tsx @@ -606,7 +606,11 @@ const RedReversal: React.FC<{ currentUser: any }> = (props) => { language: "" }) } - let token = await handleGetForwardJDPJInterface(req) + let newreq: any = { + name: "", + value: encryptAES(JSON.stringify(req)) + } + let token = await handleGetForwardJDPJInterface(newreq) let tokenData = token ? JSON.parse(token as any) : "" console.log('tokenDatatokenDatatokenDatatokenDatadasdsa', tokenData); @@ -640,7 +644,11 @@ const RedReversal: React.FC<{ currentUser: any }> = (props) => { usertype: "" }) } - let accessTokenData = await handleGetForwardJDPJInterface(tokenReq) + let newTokenReq: any = { + name: "", + value: encryptAES(JSON.stringify(tokenReq)) + } + let accessTokenData = await handleGetForwardJDPJInterface(newTokenReq) let accessToken = JSON.parse(accessTokenData as any) setAppToken(appToken) diff --git a/src/utils/requestKaiPiao.ts b/src/utils/requestKaiPiao.ts index 28464da..069558b 100644 --- a/src/utils/requestKaiPiao.ts +++ b/src/utils/requestKaiPiao.ts @@ -16,6 +16,7 @@ const { UMI_APP_BASEURL } = process.env; // const instance = axios.create({ baseURL: 'https://cosmic-sandbox.piaozone.com/jdpjykjyxgs' }); // 改为使用代理路径 +// const instance = axios.create({ baseURL: 'http://api.eshangtech.com/EShangApiMain' }); const instance = axios.create({ baseURL: 'http://api.eshangtech.com/EShangApiMain' }); diff --git a/src/utils/requestMemberApi.ts b/src/utils/requestMemberApi.ts new file mode 100644 index 0000000..5cc8803 --- /dev/null +++ b/src/utils/requestMemberApi.ts @@ -0,0 +1,149 @@ +import axios from 'axios'; +import { getDvaApp } from 'umi'; +import { notification } from 'antd'; +import type { AxiosRequestHeaders } from 'axios/index'; +import CryptoJS from "crypto-js"; + +const { UMI_APP_BASEURL } = process.env; + +// const instance = axios.create({ baseURL: UMI_APP_BASEURL }); +const instance = axios.create({ baseURL: 'https://api.eshangtech.com/MemberApi' }); +// const instance = axios.create({ baseURL: '/auth' }); + + + +instance.interceptors.request.use( + (config) => { + // 对data数据进行加密 + // if (config.data) { + // config.data = preprocessData(JSON.stringify(config.data)); // 调用预处理函数 + // } + + config.headers = { + ...config.headers, + Authorization: `Bearer ${localStorage.getItem('Authorization') || ''}`, + "Content-Type": "application/json;charset=utf-8" + } as AxiosRequestHeaders; + + return config; + }, + (error) => Promise.reject(error), +); + +instance.interceptors.response.use( + //状态码为2xx的时候执行 + (response) => { + const { data } = response; + + if (data.code !== 200 && data.Result_Code !== 100) { + + } + + const timestamp = getFormattedDate() + + return data + }, + //状态码不是2xx的时候执行 + (error) => { + const { response } = error; + + if (response && response.status === 401) { + // // 清除本地存储的token + // localStorage.removeItem('Authorization'); + // // 重定向到登录页 + // window.location.href = '/user/login'; + // notification.error({ + // message: response?.data?.message || '请求失败', + // description: error.message + // }); + } else { + notification.error({ + message: response?.data?.message || '请求失败', + description: error.message + }); + } + + return Promise.reject({ + code: response?.status || 500, + message: response?.data?.message || '请求失败' + }); + }, +); + + +// 加密 +const encryptAESECB = (data: string, key: string) => { + // const cipher = CryptoJS.createCipheriv('aes-128-ecb', key, null); // ECB 模式不需要 IV + const newKey = CryptoJS.enc.Utf8.parse(key); // 密钥必须是 16 字节 + const cipher = CryptoJS.AES.encrypt(data, newKey, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7 + }); + let encrypted = cipher.ciphertext.toString(CryptoJS.enc.Hex); + // let encrypted = cipher.update(data, 'utf8', 'hex'); + // encrypted += cipher.final('hex'); + return encrypted; +} + +// 解密 +const decryptAESECB = (data: string, key: string) => { + // const decipher = CryptoJS.createDecipheriv('aes-128-ecb', key, null); + // let decrypted = decipher.update(data, 'hex', 'utf8'); + // decrypted += decipher.final('utf8'); + const newKey = CryptoJS.enc.Utf8.parse(key); + + const encryptedData = CryptoJS.enc.Hex.parse(data); + + // 解密操作 + const decrypted = CryptoJS.AES.decrypt({ ciphertext: encryptedData }, newKey, { + mode: CryptoJS.mode.ECB, // ECB 模式 + padding: CryptoJS.pad.Pkcs7 // PKCS7 填充方式 + }); + // 将解密后的结果转为 UTF-8 字符串 + const decryptedText = decrypted.toString(CryptoJS.enc.Utf8); + return decryptedText; +} + +// md5 签名 +const md5 = (key: string, data: string, timestamp: string) => { + const text = "s" + key + data + timestamp; + return CryptoJS.MD5(text).toString(CryptoJS.enc.Hex); +} + +// 生成签名戳 +const getFormattedDate = () => { + const date = new Date(); + const year = date.getFullYear(); // 获取年份 (yyyy) + const month = String(date.getMonth() + 1).padStart(2, '0'); // 获取月份 (MM) + const day = String(date.getDate()).padStart(2, '0'); // 获取日期 (dd) + const hours = String(date.getHours()).padStart(2, '0'); // 获取小时 (HH) + return `es0${year}${month}${day}${hours}0es`; // 拼接成 yyyyMMddHH 格式 +} + +// 加密方法 +const preprocessData = (data: string) => { + console.log('data', data); + // YYYYMMDD + let timestamp = getFormattedDate() + console.log('timestamp', timestamp); + // 秒为单位的时间戳 + let timeSecond = parseInt((new Date().getTime() / 1000).toString()) + console.log('timeSecond', timeSecond); + // 数据的加密 + let encryptionData = encryptAESECB(data, timestamp) + console.log('encryptionData', encryptionData); + // md5签名方法 + let md5Data = md5(timestamp, encryptionData, timestamp) + console.log('md5Data', md5Data); + + let res = { + data: encryptionData, + timestamp: timeSecond, + sign: md5Data + } + console.log('res', res); + + return res +} + +export default instance; diff --git a/src/utils/requestOld.ts b/src/utils/requestOld.ts index ed5a5f9..17f0d5a 100644 --- a/src/utils/requestOld.ts +++ b/src/utils/requestOld.ts @@ -7,7 +7,8 @@ import CryptoJS from "crypto-js"; const { UMI_APP_BASEURL } = process.env; // const instance = axios.create({ baseURL: UMI_APP_BASEURL }); -const instance = axios.create({ baseURL: 'https://api.eshangtech.com/EShangApiMain' }); +// const instance = axios.create({ baseURL: 'https://api.eshangtech.com/EShangApiMain' }); +const instance = axios.create({ baseURL: 'https://samember.yciccloud.com:8999/EShangApiMain' }); // const instance = axios.create({ baseURL: '/auth' });