feat: 小程序真实微信支付功能
新增: 1. /api/miniprogram/pay - 创建预支付订单API 2. /api/miniprogram/pay/notify - 支付回调处理 3. /api/miniprogram/login - 小程序登录获取openId 配置: - 小程序AppID: wxb8bbb2b10dec74aa - 商户号: 1318592501 - 回调地址: https://soul.cunbao.net/api/miniprogram/pay/notify 更新: - app.js: 添加getOpenId方法,支付前获取openId - read.js: processPayment调用真实支付接口 - 支持API不可用时回退到测试模式
This commit is contained in:
@@ -6,10 +6,14 @@
|
||||
App({
|
||||
globalData: {
|
||||
// API基础地址
|
||||
baseUrl: 'https://soul.ckb.fit',
|
||||
baseUrl: 'https://soul.cunbao.net',
|
||||
|
||||
// 小程序配置
|
||||
appId: 'wxb8bbb2b10dec74aa',
|
||||
|
||||
// 用户信息
|
||||
userInfo: null,
|
||||
openId: null, // 微信openId,支付必需
|
||||
isLoggedIn: false,
|
||||
|
||||
// 书籍数据
|
||||
@@ -170,7 +174,7 @@ App({
|
||||
})
|
||||
},
|
||||
|
||||
// 登录方法 - 支持模拟登录回退
|
||||
// 登录方法 - 获取openId用于支付
|
||||
async login() {
|
||||
try {
|
||||
// 获取微信登录code
|
||||
@@ -181,37 +185,80 @@ App({
|
||||
})
|
||||
})
|
||||
|
||||
console.log('[App] 获取登录code成功')
|
||||
|
||||
try {
|
||||
// 尝试发送code到服务器
|
||||
const res = await this.request('/api/wechat/login', {
|
||||
// 发送code到服务器获取openId
|
||||
const res = await this.request('/api/miniprogram/login', {
|
||||
method: 'POST',
|
||||
data: { code: loginRes.code }
|
||||
})
|
||||
|
||||
if (res.success && res.data) {
|
||||
// 保存用户信息
|
||||
this.globalData.userInfo = res.data.user
|
||||
this.globalData.isLoggedIn = true
|
||||
this.globalData.purchasedSections = res.data.user.purchasedSections || []
|
||||
this.globalData.hasFullBook = res.data.user.hasFullBook || false
|
||||
// 保存openId
|
||||
if (res.data.openId) {
|
||||
this.globalData.openId = res.data.openId
|
||||
wx.setStorageSync('openId', res.data.openId)
|
||||
console.log('[App] 获取openId成功')
|
||||
}
|
||||
|
||||
wx.setStorageSync('userInfo', res.data.user)
|
||||
wx.setStorageSync('token', res.data.token)
|
||||
// 保存用户信息
|
||||
if (res.data.user) {
|
||||
this.globalData.userInfo = res.data.user
|
||||
this.globalData.isLoggedIn = true
|
||||
this.globalData.purchasedSections = res.data.user.purchasedSections || []
|
||||
this.globalData.hasFullBook = res.data.user.hasFullBook || false
|
||||
|
||||
wx.setStorageSync('userInfo', res.data.user)
|
||||
wx.setStorageSync('token', res.data.token || '')
|
||||
}
|
||||
|
||||
return res.data
|
||||
}
|
||||
} catch (apiError) {
|
||||
console.log('API登录失败,使用模拟登录:', apiError)
|
||||
console.log('[App] API登录失败,使用模拟登录:', apiError.message)
|
||||
}
|
||||
|
||||
// API不可用时使用模拟登录
|
||||
return this.mockLogin()
|
||||
} catch (e) {
|
||||
console.error('登录失败:', e)
|
||||
console.error('[App] 登录失败:', e)
|
||||
// 最后尝试模拟登录
|
||||
return this.mockLogin()
|
||||
}
|
||||
},
|
||||
|
||||
// 获取openId (支付必需)
|
||||
async getOpenId() {
|
||||
// 先检查缓存
|
||||
const cachedOpenId = wx.getStorageSync('openId')
|
||||
if (cachedOpenId) {
|
||||
this.globalData.openId = cachedOpenId
|
||||
return cachedOpenId
|
||||
}
|
||||
|
||||
// 没有缓存则登录获取
|
||||
try {
|
||||
const loginRes = await new Promise((resolve, reject) => {
|
||||
wx.login({ success: resolve, fail: reject })
|
||||
})
|
||||
|
||||
const res = await this.request('/api/miniprogram/login', {
|
||||
method: 'POST',
|
||||
data: { code: loginRes.code }
|
||||
})
|
||||
|
||||
if (res.success && res.data?.openId) {
|
||||
this.globalData.openId = res.data.openId
|
||||
wx.setStorageSync('openId', res.data.openId)
|
||||
return res.data.openId
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[App] 获取openId失败:', e)
|
||||
}
|
||||
|
||||
return null
|
||||
},
|
||||
|
||||
// 模拟登录(后端不可用时使用)
|
||||
mockLogin() {
|
||||
|
||||
Reference in New Issue
Block a user