/** * Soul创业派对 - 代付详情页 * 好友打开后看到订单信息,点击「帮他付款」完成代付 */ const app = getApp() Page({ data: { statusBarHeight: 44, requestSn: '', detail: null, loading: true, paying: false, isInitiator: false // 是否发起人,发起人看到「分享给好友」UI,好友看到「帮他付款」 }, onLoad(options) { this.setData({ statusBarHeight: app.globalData.statusBarHeight || 44 }) const requestSn = (options.requestSn || '').trim() if (!requestSn) { wx.showToast({ title: '代付链接无效', icon: 'none' }) setTimeout(() => wx.switchTab({ url: '/pages/index/index' }), 1500) return } this.setData({ requestSn }) this.loadDetail() }, async loadDetail() { const { requestSn } = this.data if (!requestSn) return this.setData({ loading: true }) try { const res = await app.request(`/api/miniprogram/gift-pay/detail?requestSn=${encodeURIComponent(requestSn)}`) if (res && res.success) { const myId = app.globalData.userInfo?.id || '' const isInitiator = !!myId && res.initiatorUserId === myId this.setData({ detail: res, loading: false, isInitiator }) } else { this.setData({ loading: false }) wx.showToast({ title: res?.error || '加载失败', icon: 'none' }) } } catch (e) { this.setData({ loading: false }) wx.showToast({ title: '加载失败', icon: 'none' }) } }, async doPay() { if (!app.globalData.isLoggedIn || !app.globalData.userInfo) { wx.showToast({ title: '请先登录', icon: 'none' }) setTimeout(() => wx.switchTab({ url: '/pages/my/my' }), 1500) return } const openId = app.globalData.openId || '' if (!openId) { wx.showToast({ title: '请先完成微信授权', icon: 'none' }) return } const { requestSn, detail } = this.data if (!requestSn || !detail) return this.setData({ paying: true }) wx.showLoading({ title: '创建订单中...', mask: true }) try { const res = await app.request({ url: '/api/miniprogram/gift-pay/pay', method: 'POST', data: { requestSn, openId, userId: app.globalData.userInfo?.id || '' } }) wx.hideLoading() if (!res || !res.success || !res.data?.payParams) { throw new Error(res?.error || '创建订单失败') } const payParams = res.data.payParams payParams._orderSn = res.data.orderSn await new Promise((resolve, reject) => { wx.requestPayment({ ...payParams, signType: payParams.signType || 'MD5', success: resolve, fail: reject }) }) wx.showToast({ title: '代付成功', icon: 'success' }) this.setData({ paying: false }) setTimeout(() => { wx.navigateBack({ fail: () => wx.switchTab({ url: '/pages/index/index' }) }) }, 1500) } catch (e) { this.setData({ paying: false }) if (e.errMsg && e.errMsg.includes('cancel')) { wx.showToast({ title: '已取消支付', icon: 'none' }) } else { wx.showToast({ title: e.message || e.error || '支付失败', icon: 'none' }) } } }, goBack() { app.goBackOrToHome() }, onShareAppMessage() { const { requestSn } = this.data return { title: '好友请你帮忙代付 - Soul创业派对', path: requestSn ? `/pages/gift-pay/detail?requestSn=${requestSn}` : '/pages/gift-pay/detail' } } })