aslan-h5/src/utils/http.js
2025-08-15 10:30:12 +08:00

171 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// HTTP请求配置
const API_BASE_URL = 'https://api.likeichat.com'
// 默认公共请求头配置
let COMMON_HEADERS = {
'authorization': 'Bearer F77126B08E13987C3AD88B6015C5B777.djIlM0ExOTU0MDU5NzkzOTYzMzkzMDI1JTNBTElLRUklM0ExNzU3NzYzODU5NzE1JTNBMTc1NTE3MTg1OTcxNQ==',
'req-app-intel': 'version=1.0.0;build=1;model=SM-G9550;sysVersion=9;channel=Google',
'req-client': 'Android',
'req-imei': '8fa54d728ab449e04f9292329ed44bda',
'req-lang': 'id-ID',
'req-sys-origin': 'origin=LIKEI;originChild=LIKEI',
'req-version': 'V2',
'req-zone': 'Asia/Shanghai',
}
/**
* 更新公共请求头
* @param {object} headers - 要更新的请求头
*/
export function updateCommonHeaders(headers) {
COMMON_HEADERS = {
...COMMON_HEADERS,
...headers
}
console.log('🔄 Updated common headers:', COMMON_HEADERS)
}
/**
* 从APP头部信息设置HTTP请求头
* @param {object} headerInfo - APP传递的头部信息
*/
export function setHeadersFromApp(headerInfo) {
const updatedHeaders = {}
// 设置Authorization
if (headerInfo.authorization) {
updatedHeaders.authorization = headerInfo.authorization
}
// 设置语言
if (headerInfo.reqLang) {
updatedHeaders['req-lang'] = headerInfo.reqLang
}
// 设置APP信息
if (headerInfo.appVersion || headerInfo.buildVersion || headerInfo.appChannel) {
const appIntelParts = []
if (headerInfo.appVersion) appIntelParts.push(`version=${headerInfo.appVersion}`)
if (headerInfo.buildVersion) appIntelParts.push(`build=${headerInfo.buildVersion}`)
if (headerInfo.appChannel) appIntelParts.push(`channel=${headerInfo.appChannel}`)
if (appIntelParts.length > 0) {
updatedHeaders['req-app-intel'] = appIntelParts.join(';')
}
}
// 设置设备信息
if (headerInfo.reqImei) {
updatedHeaders['req-imei'] = headerInfo.reqImei
}
// 设置系统来源
if (headerInfo.sysOrigin) {
const sysOriginParts = [`origin=${headerInfo.sysOrigin}`]
if (headerInfo.sysOriginChild) {
sysOriginParts.push(`child=${headerInfo.sysOriginChild}`)
}
updatedHeaders['req-sys-origin'] = sysOriginParts.join(';')
}
updateCommonHeaders(updatedHeaders)
}
/**
* 通用HTTP请求函数
* @param {string} url - 请求URL
* @param {object} options - 请求选项
* @returns {Promise} - 返回Promise对象
*/
export async function request(url, options = {}) {
const {
method = 'GET',
data = null,
headers = {},
...otherOptions
} = options
const fullUrl = url.startsWith('http') ? url : `${API_BASE_URL}${url}`
const config = {
method,
headers: {
'Content-Type': 'application/json',
...COMMON_HEADERS,
...headers
},
...otherOptions
}
// 如果是POST、PUT等方法且有数据添加body
if (data && ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())) {
config.body = JSON.stringify(data)
}
try {
console.log('🚀 API Request:', fullUrl, config)
const response = await fetch(fullUrl, config)
if (!response.ok) {
throw new Error(`HTTP Error: ${response.status} ${response.statusText}`)
}
const result = await response.json()
console.log('✅ API Response:', result)
// 检查业务状态
if (result.status === false) {
throw new Error(result.message || `API Error: ${result.errorCode}`)
}
return result
} catch (error) {
console.error('❌ API Error:', error)
throw error
}
}
/**
* GET请求
* @param {string} url - 请求URL
* @param {object} options - 请求选项
* @returns {Promise}
*/
export function get(url, options = {}) {
return request(url, { ...options, method: 'GET' })
}
/**
* POST请求
* @param {string} url - 请求URL
* @param {object} data - 请求数据
* @param {object} options - 请求选项
* @returns {Promise}
*/
export function post(url, data, options = {}) {
return request(url, { ...options, method: 'POST', data })
}
/**
* PUT请求
* @param {string} url - 请求URL
* @param {object} data - 请求数据
* @param {object} options - 请求选项
* @returns {Promise}
*/
export function put(url, data, options = {}) {
return request(url, { ...options, method: 'PUT', data })
}
/**
* DELETE请求
* @param {string} url - 请求URL
* @param {object} options - 请求选项
* @returns {Promise}
*/
export function del(url, options = {}) {
return request(url, { ...options, method: 'DELETE' })
}