payment-result
Trang kết quả thanh toán — nơi cổng thanh toán trả trình duyệt của khách về. CHỈ BÁO CÁO, không ghi gì: IPN (máy chủ gọi máy chủ) mới là nguồn quyết định và nó chạy đua với cú chuyển hướng này. Bộ biến giống checkout: không có menus/customer, store chỉ có name.
- Tệp giao diện:
payment-result.html - Đường dẫn:
/thanh-toan/ket-qua - Controller:
App\Modules\Checkout\CheckoutController::paymentResult
Ngoài những biến dưới đây, slot này còn nhận toàn bộ biến toàn cục.
Biến của trang
| Biến | Kiểu | Mô tả | Từ phiên bản |
|---|---|---|---|
payment |
PaymentResult |
Kết quả thanh toán: state (paid | pending | failed), code, amount. pending nghĩa là chưa thấy xác nhận từ cổng — KHÔNG PHẢI thất bại, và không bao giờ được hiển thị như thất bại. |
1.2 |
Mã đầy đủ
Toàn bộ tệp payment-result.html của bộ giao diện mặc định. Chép về templates/<bộ giao diện của bạn>/payment-result.html rồi sửa theo ý muốn.
{%- comment -%}
Trang kết quả thanh toán (/thanh-toan/ket-qua).
CheckoutController::paymentResult cấp: store, nav_categories, payment.
payment = { state, code, amount } với state ∈ paid | pending | failed.
⚠️ CHỈ BÁO CÁO, KHÔNG GHI GÌ. IPN mới là nguồn quyết định và nó chạy đua với
cú chuyển hướng này, nên `pending` là chuyện bình thường với một giao dịch đã
thành công — không bao giờ hiển thị nó như một thất bại.
{%- endcomment -%}
{%- assign pr_order = payment.code | default: '' -%}
<div class="container page-content">
{% if payment.state == 'paid' %}
<h1 class="page-title">Thanh toán thành công</h1>
<p>Cảm ơn bạn. Chúng tôi đã nhận được thanh toán
{% if pr_order != '' %}cho đơn hàng <strong>{{ pr_order }}</strong>{% endif %}.</p>
<p>Biên nhận đã được gửi tới email của bạn.</p>
{% elsif payment.state == 'pending' %}
<h1 class="page-title">Đang xác nhận thanh toán</h1>
<p>Chúng tôi đang chờ xác nhận từ cổng thanh toán. Việc này thường mất vài giây.</p>
<p><strong>Vui lòng không thanh toán lại.</strong>
{% if pr_order != '' %}Đơn hàng <strong>{{ pr_order }}</strong> của bạn{% else %}Đơn hàng của bạn{% endif %}
sẽ được cập nhật ngay khi có xác nhận.</p>
{% else %}
<h1 class="page-title">Thanh toán chưa hoàn tất</h1>
<p>Giao dịch không thành công hoặc đã bị huỷ. Đơn hàng của bạn vẫn được giữ nguyên.</p>
<p><a class="btn btn--primary" href="/thanh-toan">Thử thanh toán lại</a></p>
{% endif %}
<p><a href="/">Tiếp tục mua sắm</a></p>
</div>