Browse Source

启动订单轮询

Pchen. 8 months ago
parent
commit
fe86f26e22
1 changed files with 84 additions and 84 deletions
  1. 84 84
      apis/Order/CreateOrder.js

+ 84 - 84
apis/Order/CreateOrder.js

@@ -128,90 +128,90 @@ class CreateOrder extends API {
                     }
                     }
                 })
                 })
 
 
-                // 定时器轮询订单状态
-                // try {
-                //     // 定时轮询订单状态,最多持续5分钟(300秒),每次间隔5秒
-                //     const MAX_RETRIES = 60 // 5分钟 / 5秒
-                //     const DELAY = 5000 // 5秒
-
-                //     const queryUrl = `${paymentConfig.url}/api.php?act=order&pid=${paymentConfig.pid}&key=${paymentConfig.key}&out_trade_no=${orderId}`
-
-                //     const pollOrderStatus = async (retry = 0) => {
-                //         if (retry >= MAX_RETRIES) {
-                //             this.logger.info(`订单超时未支付,订单号:${orderId}`)
-                //             await db.query('UPDATE orders SET state = 3 WHERE orderId = ?', [orderId]);
-                //             return
-                //         }
-
-                //         try {
-                //             const queryRes = await axios.get(queryUrl)
-                //             const queryData = queryRes.data
-
-                //             if (queryData.code === 1 && queryData.status === 1) {
-                //                 const { trade_no, out_trade_no, type } = queryData
-                //                 const time = Date.now()
-
-                //                 let sql = 'UPDATE orders SET state = 1, pay_type = ?, pay_id = ?, pay_time = ? WHERE orderId = ? AND state = 0'
-                //                 const result = await db.query(sql, [type, trade_no, time, out_trade_no])
-
-                //                 if (result.affectedRows > 0) {
-                //                     // 查询订单与商品信息
-                //                     sql = `
-                //                     SELECT 
-                //                         g.lepao_count,
-                //                         g.ic_count,
-                //                         g.vip,
-                //                         a.create_user
-                //                     FROM 
-                //                         orders a
-                //                     LEFT JOIN 
-                //                         goods g 
-                //                     ON 
-                //                         a.goods_id = g.id
-                //                     WHERE 
-                //                         a.orderId = ?
-                //                 `
-                //                     const rows = await db.query(sql, [out_trade_no])
-                //                     if (!rows || rows.length !== 1) {
-                //                         this.logger.error(`订单商品信息异常,订单号:${out_trade_no}`)
-                //                         await db.query('UPDATE orders SET state = 4 WHERE orderId = ?', [out_trade_no])
-                //                         return
-                //                     }
-
-                //                     const { lepao_count, ic_count, vip, create_user } = rows[0]
-                //                     sql = 'UPDATE users SET lepao_count = lepao_count + ?, ic_count = ic_count + ?, vip = ? WHERE uuid = ?'
-                //                     const updateUser = await db.query(sql, [lepao_count, ic_count, vip, create_user])
-
-                //                     if (!updateUser || updateUser.affectedRows !== 1) {
-                //                         this.logger.error(`更新用户失败,UUID: ${create_user}`)
-                //                         await db.query('UPDATE orders SET state = 4 WHERE orderId = ?', [out_trade_no])
-                //                     }
-
-                //                     sql = 'UPDATE orders SET state = 2 WHERE orderId = ?'
-                //                     await db.query(sql, [out_trade_no])
-
-                //                     this.logger.info(`订单处理成功:${out_trade_no}`)
-                //                     return // 成功处理后终止轮询
-                //                 } else {
-                //                     this.logger.warn(`订单不存在或已处理:${out_trade_no}`)
-                //                 }
-                //             }
-
-                //             // 未支付,继续轮询
-                //             setTimeout(() => pollOrderStatus(retry + 1), DELAY)
-
-                //         } catch (error) {
-                //             this.logger.warn(`轮询支付状态失败:${error.stack}`)
-                //             setTimeout(() => pollOrderStatus(retry + 1), DELAY)
-                //         }
-                    // }
-
-                    // // 启动轮询
-                    // pollOrderStatus()
-
-                // } catch {
-                //     this.logger.info(`获取订单支付状态失败!${error.stack}`)
-                // }
+                定时器轮询订单状态
+                try {
+                    // 定时轮询订单状态,最多持续5分钟(300秒),每次间隔5秒
+                    const MAX_RETRIES = 60 // 5分钟 / 5秒
+                    const DELAY = 5000 // 5秒
+
+                    const queryUrl = `${paymentConfig.url}/api.php?act=order&pid=${paymentConfig.pid}&key=${paymentConfig.key}&out_trade_no=${orderId}`
+
+                    const pollOrderStatus = async (retry = 0) => {
+                        if (retry >= MAX_RETRIES) {
+                            this.logger.info(`订单超时未支付,订单号:${orderId}`)
+                            await db.query('UPDATE orders SET state = 3 WHERE orderId = ?', [orderId]);
+                            return
+                        }
+
+                        try {
+                            const queryRes = await axios.get(queryUrl)
+                            const queryData = queryRes.data
+
+                            if (queryData.code === 1 && queryData.status === 1) {
+                                const { trade_no, out_trade_no, type } = queryData
+                                const time = Date.now()
+
+                                let sql = 'UPDATE orders SET state = 1, pay_type = ?, pay_id = ?, pay_time = ? WHERE orderId = ? AND state = 0'
+                                const result = await db.query(sql, [type, trade_no, time, out_trade_no])
+
+                                if (result.affectedRows > 0) {
+                                    // 查询订单与商品信息
+                                    sql = `
+                                    SELECT 
+                                        g.lepao_count,
+                                        g.ic_count,
+                                        g.vip,
+                                        a.create_user
+                                    FROM 
+                                        orders a
+                                    LEFT JOIN 
+                                        goods g 
+                                    ON 
+                                        a.goods_id = g.id
+                                    WHERE 
+                                        a.orderId = ?
+                                `
+                                    const rows = await db.query(sql, [out_trade_no])
+                                    if (!rows || rows.length !== 1) {
+                                        this.logger.error(`订单商品信息异常,订单号:${out_trade_no}`)
+                                        await db.query('UPDATE orders SET state = 4 WHERE orderId = ?', [out_trade_no])
+                                        return
+                                    }
+
+                                    const { lepao_count, ic_count, vip, create_user } = rows[0]
+                                    sql = 'UPDATE users SET lepao_count = lepao_count + ?, ic_count = ic_count + ?, vip = ? WHERE uuid = ?'
+                                    const updateUser = await db.query(sql, [lepao_count, ic_count, vip, create_user])
+
+                                    if (!updateUser || updateUser.affectedRows !== 1) {
+                                        this.logger.error(`更新用户失败,UUID: ${create_user}`)
+                                        await db.query('UPDATE orders SET state = 4 WHERE orderId = ?', [out_trade_no])
+                                    }
+
+                                    sql = 'UPDATE orders SET state = 2 WHERE orderId = ?'
+                                    await db.query(sql, [out_trade_no])
+
+                                    this.logger.info(`订单处理成功:${out_trade_no}`)
+                                    return // 成功处理后终止轮询
+                                } else {
+                                    this.logger.warn(`订单不存在或已处理:${out_trade_no}`)
+                                }
+                            }
+
+                            // 未支付,继续轮询
+                            setTimeout(() => pollOrderStatus(retry + 1), DELAY)
+
+                        } catch (error) {
+                            this.logger.warn(`轮询支付状态失败:${error.stack}`)
+                            setTimeout(() => pollOrderStatus(retry + 1), DELAY)
+                        }
+                    }
+
+                    // 启动轮询
+                    pollOrderStatus()
+
+                } catch {
+                    this.logger.info(`获取订单支付状态失败!${error.stack}`)
+                }
 
 
             } else {
             } else {
                 return res.json({
                 return res.json({