Files
qipai/miniapp/utils/api.js
T
2026-06-25 12:07:09 +08:00

94 lines
2.3 KiB
JavaScript

const { APP_API_BASE_URL, WECHAT_APP_ID } = require('../config/env.js')
const TOKEN_KEY = 'qipai_access_token'
function request(path, options = {}) {
return new Promise((resolve, reject) => {
const token = wx.getStorageSync(TOKEN_KEY)
wx.request({
url: `${APP_API_BASE_URL}${path}`,
method: options.method || 'GET',
data: options.data,
header: {
'x-wechat-appid': WECHAT_APP_ID,
...(token ? { authorization: `Bearer ${token}` } : {}),
...(options.headers || {}),
},
success(response) {
if (response.statusCode >= 200 && response.statusCode < 300) {
resolve(response.data)
return
}
reject(new Error(response.data?.message || `请求失败:${response.statusCode}`))
},
fail: reject,
})
})
}
function login() {
return new Promise((resolve, reject) => {
wx.login({
success: async ({ code }) => {
try {
const response = await request('/auth/wechat-login', {
method: 'POST',
data: { code },
})
wx.setStorageSync(TOKEN_KEY, response.data.accessToken)
resolve(response.data)
} catch (error) {
reject(error)
}
},
fail: reject,
})
})
}
function ensureLogin() {
const token = wx.getStorageSync(TOKEN_KEY)
if (token) return Promise.resolve({ accessToken: token })
return login()
}
function clearSession() {
wx.removeStorageSync(TOKEN_KEY)
}
function cents(value) {
return `${((Number(value || 0)) / 100).toFixed(2)}`
}
function clientRequestId(prefix) {
return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`
}
function requestWechatPayment(params) {
return new Promise((resolve, reject) => {
if (!params || !params.timeStamp || !params.nonceStr || !params.package || !params.paySign) {
reject(new Error('微信支付参数不完整'))
return
}
wx.requestPayment({
timeStamp: String(params.timeStamp),
nonceStr: params.nonceStr,
package: params.package,
signType: params.signType || 'RSA',
paySign: params.paySign,
success: resolve,
fail: reject,
})
})
}
module.exports = {
request,
login,
ensureLogin,
clearSession,
cents,
clientRequestId,
requestWechatPayment,
}