修复支付状态问题

This commit is contained in:
kate522 committed 2026-08-24 17:21:06 +08:00
1 parent 406fb8d6a6
commit 85a124b886
21 files changed
+198 -308

No files matched your search

+11 -21
View File
@@ -64,7 +64,7 @@ class UserOrders {
'total_pages' => $total_pages,
'page' => $page,
'query' => array_merge($query->url_values(), ['order_page' => $page]),
'stats' => is_array($summary['stats'] ?? null) ? $summary['stats'] : ['total' => 0, 'pending' => 0, 'completed' => 0],
'stats' => is_array($summary['stats'] ?? null) ? $summary['stats'] : ['total' => 0, 'pending' => 0, 'paid' => 0],
'invalidation_tags' => ['orders'],
'product_types' => $this->product_type_filter_options(),
];
@@ -109,13 +109,13 @@ class UserOrders {
/** @return array<string, int> */
public function get_user_order_stats(int $user_id): array {
if ($user_id <= 0 || !class_exists(OrderRepository::class)) {
return ['total' => 0, 'pending' => 0, 'completed' => 0];
return ['total' => 0, 'pending' => 0, 'paid' => 0];
}
$summary = OrderRepository::get_instance()->get_user_order_center_summary($user_id);
return is_array($summary['stats'] ?? null)
? $summary['stats']
: ['total' => 0, 'pending' => 0, 'completed' => 0];
: ['total' => 0, 'pending' => 0, 'paid' => 0];
}
/** @return array<string, string> */
@@ -192,7 +192,7 @@ class UserOrders {
$payment_method = sanitize_key((string) ($order['payment_method'] ?? ''));
$can_pay = $group === OrderCenterQuery::STATUS_PENDING && $payment_method !== 'manual_review';
$can_cancel = $group === OrderCenterQuery::STATUS_PENDING;
$can_open = $group === OrderCenterQuery::STATUS_COMPLETED && $permalink !== '';
$can_open = $group === OrderCenterQuery::STATUS_PAID && $permalink !== '';
$order_number = (string) ($order['order_number'] ?? '');
$updated_at = $this->resolve_updated_at($order);
@@ -249,7 +249,7 @@ class UserOrders {
'total_pages' => 1,
'page' => 1,
'query' => $query->url_values(),
'stats' => ['total' => 0, 'pending' => 0, 'completed' => 0],
'stats' => ['total' => 0, 'pending' => 0, 'paid' => 0],
'invalidation_tags' => ['orders'],
'product_types' => $this->product_type_filter_options(),
];
@@ -259,7 +259,7 @@ class UserOrders {
private function resolve_updated_at(array $order): string {
$latest = '';
$latest_timestamp = 0;
foreach (['created_at', 'paid_at', 'delivered_at', 'completed_at', 'cancelled_at', 'refunded_at'] as $field) {
foreach (['created_at', 'paid_at', 'cancelled_at', 'refunded_at'] as $field) {
$value = trim((string) ($order[$field] ?? ''));
if ($value === '') {
continue;
@@ -284,20 +284,11 @@ class UserOrders {
}
private function status_group(string $status): string {
return match ($status) {
Order::STATUS_CREATED, Order::STATUS_PENDING => OrderCenterQuery::STATUS_PENDING,
Order::STATUS_PAID, Order::STATUS_DELIVERED, Order::STATUS_COMPLETED, Order::STATUS_PENDING_REVIEW => OrderCenterQuery::STATUS_COMPLETED,
Order::STATUS_CANCELLED, Order::STATUS_EXPIRED, Order::STATUS_REFUNDING, Order::STATUS_REFUNDED => OrderCenterQuery::STATUS_CLOSED,
default => OrderCenterQuery::STATUS_CLOSED,
};
return isset(DomainModel::order_status_labels()[$status]) ? $status : '';
}
private function status_label(string $group): string {
return match ($group) {
OrderCenterQuery::STATUS_PENDING => __('待支付', 'aksrt'),
OrderCenterQuery::STATUS_COMPLETED => __('权益已生效', 'aksrt'),
default => __('已关闭', 'aksrt'),
};
return DomainModel::order_status_labels()[$group] ?? __('未知状态', 'aksrt');
}
/** @param array<string, mixed> $meta */
@@ -389,7 +380,7 @@ class UserOrders {
}
private function get_order_countdown(string $expires_at, string $status): int {
if (!in_array($status, [Order::STATUS_CREATED, Order::STATUS_PENDING], true) || $expires_at === '') {
if ($status !== Order::STATUS_PENDING || $expires_at === '') {
return 0;
}
$expires = strtotime($expires_at);
@@ -406,8 +397,7 @@ class UserOrders {
if (!$order || $this->status_group((string) ($order['status'] ?? '')) !== OrderCenterQuery::STATUS_PENDING) {
return ['success' => false, 'message' => __('当前订单不可关闭。', 'aksrt')];
}
if (!$repo->update_status($order_number, Order::STATUS_CANCELLED, [
'force' => true,
if (!$repo->update_status($order_number, Order::STATUS_CLOSED, [
'note' => __('用户在前台关闭订单。', 'aksrt'),
])) {
return ['success' => false, 'message' => __('关闭订单失败,请稍后重试。', 'aksrt')];
@@ -425,7 +415,7 @@ class UserOrders {
if (!$order) {
return ['success' => false, 'message' => __('当前订单状态不可支付。', 'aksrt')];
}
if ($this->status_group((string) ($order['status'] ?? '')) === OrderCenterQuery::STATUS_COMPLETED) {
if ($this->status_group((string) ($order['status'] ?? '')) === OrderCenterQuery::STATUS_PAID) {
$ledger_key = \AKSRT\Ledger\OperationKey::deterministic('order-payment', [$order_number]);
$history = \AKSRT\Ledger\LedgerQuery::get_instance()->history(['operation_key' => $ledger_key, 'page' => 1, 'per_page' => 1]);
if (!empty($history['items'][0])) {