|
@@ -4,12 +4,12 @@ const Redis = require('../../plugin/DataBase/Redis')
|
|
|
const { BaseStdResponse } = require("../../BaseStdResponse.js")
|
|
const { BaseStdResponse } = require("../../BaseStdResponse.js")
|
|
|
const AccessControl = require("../../lib/AccessControl.js")
|
|
const AccessControl = require("../../lib/AccessControl.js")
|
|
|
const crypto = require('crypto')
|
|
const crypto = require('crypto')
|
|
|
-const axios = require('axios')
|
|
|
|
|
const config = require('../../config.json')
|
|
const config = require('../../config.json')
|
|
|
const mq = require('../../plugin/mq')
|
|
const mq = require('../../plugin/mq')
|
|
|
const { mq: mqName } = require('../../plugin/mq/mqPrefix')
|
|
const { mq: mqName } = require('../../plugin/mq/mqPrefix')
|
|
|
const { insertLedgerRecord } = require('../../lib/Lepao/CountLedger')
|
|
const { insertLedgerRecord } = require('../../lib/Lepao/CountLedger')
|
|
|
const { validateCoupon, recordUsage, releaseUsageForOrder, roundMoney } = require('../../lib/CouponService')
|
|
const { validateCoupon, recordUsage, releaseUsageForOrder, roundMoney } = require('../../lib/CouponService')
|
|
|
|
|
+const { normalizePayBaseUrl, queryPaymentOrder } = require('../../lib/PaymentClient')
|
|
|
|
|
|
|
|
const ORDER_PAYMENT_QUEUE = mqName('order_payment_check')
|
|
const ORDER_PAYMENT_QUEUE = mqName('order_payment_check')
|
|
|
let orderPaymentWorkerStarted = false
|
|
let orderPaymentWorkerStarted = false
|
|
@@ -92,8 +92,6 @@ async function pollOrderPaymentStatus(orderId, logger) {
|
|
|
const MAX_RETRIES = 120 // 5分钟 / 5秒
|
|
const MAX_RETRIES = 120 // 5分钟 / 5秒
|
|
|
const DELAY = 2500 // 5秒
|
|
const DELAY = 2500 // 5秒
|
|
|
|
|
|
|
|
- const queryUrl = `${paymentConfig.url}/api.php?act=order&pid=${paymentConfig.pid}&key=${paymentConfig.key}&out_trade_no=${orderId}`
|
|
|
|
|
-
|
|
|
|
|
const pollOrderStatus = async (retry = 0) => {
|
|
const pollOrderStatus = async (retry = 0) => {
|
|
|
if (retry >= MAX_RETRIES) {
|
|
if (retry >= MAX_RETRIES) {
|
|
|
const closeRes = await db.query(
|
|
const closeRes = await db.query(
|
|
@@ -108,9 +106,8 @@ async function pollOrderPaymentStatus(orderId, logger) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- const queryRes = await axios.get(queryUrl)
|
|
|
|
|
- const queryData = queryRes.data
|
|
|
|
|
- console.log(`轮询订单支付状态,订单号:${orderId},尝试次数:${retry + 1},查询结果:${JSON.stringify(queryData)}`)
|
|
|
|
|
|
|
+ const queryData = await queryPaymentOrder(orderId, logger)
|
|
|
|
|
+ logger.info(`轮询订单支付状态,订单号:${orderId},尝试次数:${retry + 1},查询结果:${JSON.stringify(queryData)}`)
|
|
|
|
|
|
|
|
if (queryData.code == 1 && queryData.status == 1) {
|
|
if (queryData.code == 1 && queryData.status == 1) {
|
|
|
const { trade_no, out_trade_no, type } = queryData
|
|
const { trade_no, out_trade_no, type } = queryData
|
|
@@ -165,7 +162,7 @@ async function pollOrderPaymentStatus(orderId, logger) {
|
|
|
// 未支付,继续轮询
|
|
// 未支付,继续轮询
|
|
|
setTimeout(() => pollOrderStatus(retry + 1), DELAY)
|
|
setTimeout(() => pollOrderStatus(retry + 1), DELAY)
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
- logger.warn(`轮询支付状态失败:${error.stack || error}`)
|
|
|
|
|
|
|
+ logger.warn(`轮询支付状态失败,订单号:${orderId},原因:${error.message || error}`)
|
|
|
setTimeout(() => pollOrderStatus(retry + 1), DELAY)
|
|
setTimeout(() => pollOrderStatus(retry + 1), DELAY)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -337,6 +334,8 @@ class CreateOrder extends API {
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ const payBaseUrl = normalizePayBaseUrl(paymentConfig.url)
|
|
|
|
|
+
|
|
|
const deviceType = req.headers['device-type'] ?? '浏览器'
|
|
const deviceType = req.headers['device-type'] ?? '浏览器'
|
|
|
let return_url
|
|
let return_url
|
|
|
if(deviceType === 'RunForge Uniapp Client')
|
|
if(deviceType === 'RunForge Uniapp Client')
|
|
@@ -383,7 +382,7 @@ class CreateOrder extends API {
|
|
|
...BaseStdResponse.OK,
|
|
...BaseStdResponse.OK,
|
|
|
id: orderId,
|
|
id: orderId,
|
|
|
pay: {
|
|
pay: {
|
|
|
- payUrl: `${paymentConfig.url}/submit.php`,
|
|
|
|
|
|
|
+ payUrl: `${payBaseUrl}/submit.php`,
|
|
|
payData: payParams
|
|
payData: payParams
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|