- 将支付流程统一至礼品支付页面,禁止从阅读页面进行支付,以优化用户体验。 - 更新了礼物支付详情页面,为发起人和朋友展示了不同的用户界面元素,包括为发起人提供的分享按钮和为朋友提供的支付按钮。 - 增强了后端逻辑,以确保在支付处理过程中正确将收益归因于发起人。 - 增加了每日章节更新,并改进了章节页面的加载状态,以提升用户交互体验。 - 更新了文档,以反映新的支付流程和相关变更。
118 lines
3.5 KiB
JavaScript
118 lines
3.5 KiB
JavaScript
/**
|
||
* 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'
|
||
}
|
||
}
|
||
})
|