|
@@ -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({
|