| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- const cloud = require('wx-server-sdk');
- cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
- const db = cloud.database();
- // 提现申请(Phase 1:记录申请,平台手动打款)
- exports.main = async (event) => {
- const { amount } = event;
- const { OPENID } = cloud.getWXContext();
- if (!amount || amount <= 0) {
- return { code: 400, error: '无效金额' };
- }
- try {
- const userRes = await db.collection('users').where({
- _openid: OPENID,
- }).get();
- if (userRes.data.length === 0) {
- return { code: 401, error: '用户不存在' };
- }
- // 检查可提现金额
- const commRes = await db.collection('commissions').where({
- toUser: OPENID,
- status: 'available',
- }).get();
- const availableTotal = (commRes.data || []).reduce((sum, c) => sum + (c.amount || 0), 0);
- if (amount > availableTotal) {
- return { code: 400, error: '可提现金额不足' };
- }
- if (amount < 10000) { // 单位:分,最低 ¥100
- return { code: 400, error: '未达到最低提现金额 ¥100' };
- }
- // 创建提现申请
- const applyRes = await db.collection('withdrawals').add({
- data: {
- userId: OPENID,
- amount,
- status: 'pending',
- createdAt: db.serverDate(),
- updatedAt: db.serverDate(),
- },
- });
- // 将佣金状态改为 processing
- let remaining = amount;
- const availableComms = commRes.data.sort((a, b) => a.createdAt - b.createdAt);
- for (const c of availableComms) {
- if (remaining <= 0) break;
- const deductAmount = Math.min(remaining, c.amount);
- remaining -= deductAmount;
- await db.collection('commissions').doc(c._id).update({
- data: {
- status: 'processing',
- withdrawId: applyRes._id,
- updatedAt: db.serverDate(),
- },
- });
- }
- return { code: 0, withdrawId: applyRes._id };
- } catch (err) {
- return { code: 500, error: err.message };
- }
- };
|