|
@@ -129,89 +129,89 @@ 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({
|