fix(epay): 补发 /pay/submit 请求触发插件 submit() 写入 usdtpro 金额

This commit is contained in:
testadmin
2026-04-16 23:53:00 +08:00
parent 9ca6c646db
commit ffc77b4f3f
@@ -175,19 +175,33 @@ trait epayPay
'uid:' . $user_id
);
if (!is_array($apiResult) || empty($apiResult['url'])) {
// mapi.php 返回格式:
// {code:0, trade_no, pay_type:'jump', pay_info:'/pay/submit/TRADE_NO/'} 或
// {code:0, trade_no, payurl:'/pay/submit/TRADE_NO/'} (default 分支)
// {code:1, trade_no, payurl:'...'} (部分旧版)
$submitUrl = '';
$trade_no = '';
if (is_array($apiResult)) {
if (!empty($apiResult['trade_no'])) $trade_no = strval($apiResult['trade_no']);
if (!empty($apiResult['payurl'])) $submitUrl = $apiResult['payurl'];
elseif (!empty($apiResult['pay_info'])) $submitUrl = $apiResult['pay_info'];
elseif (!empty($apiResult['url'])) $submitUrl = $apiResult['url'];
}
if (!$submitUrl || !$trade_no) {
$errMsg = is_array($apiResult) ? (isset($apiResult['msg']) ? $apiResult['msg'] : json_encode($apiResult, JSON_UNESCAPED_UNICODE)) : 'mapi 无响应';
addLogToFile('epay mapi 下单失败:order=' . $pay_orderid . ' err=' . $errMsg, 'epay_error', 'epay');
$data = encrypt_data(['status' => 0, 'message' => 'Khởi tạo thanh toán thất bại: ' . $errMsg]);
return json(['Success' => 1, 'Data' => $data]);
}
// epay 的 jump url 形如 https://pay.g7g7.top/pay/leader/2026041623400011168/
$payUrl = $apiResult['url'];
$trade_no = '';
if (preg_match('#/pay/leader/(\d+)/?#', $payUrl, $m)) {
$trade_no = $m[1];
}
// 触发 plugin::submit() 把 usdtpro 指纹金额写入 pre_order
// mapi 模式 Plugin::loadForSubmit 只调 mapi() 方法,usdtpro 插件没这个方法,
// 所以 usdtpro 不会被写入。必须再访问一次 /pay/submit/TRADE_NO/ 让插件 submit() 跑一次
$this->epay_trigger_plugin_submit($submitUrl);
// 跳转到用户看的页面(pay/leader/TRADE_NO/
$payUrl = str_replace('/pay/submit/', '/pay/leader/', $submitUrl);
// 默认返回结构(若后续读取 usdtpro 失败仍可回退跳转)
$qrcode = null;
@@ -238,6 +252,30 @@ trait epayPay
}
}
/**
* 触发 epay plugin::submit() 写入 usdtpro 指纹金额
* 只请求不处理响应(epay 会返回 302 或 HTML,我们只要副作用)
*/
private function epay_trigger_plugin_submit($submitUrl)
{
try {
$ch = curl_init($submitUrl);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_TIMEOUT => 6,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_USERAGENT => 'OG-EpayInternal/1.0',
]);
curl_exec($ch);
curl_close($ch);
} catch (\Exception $e) {
addLogToFile('epay_trigger_plugin_submit 异常:' . $e->getMessage(), 'epay_error', 'epay');
}
}
/**
* 易支付 - 订单状态轮询
*