xforge · tài liệu FE

FE: module refund — hoàn tiền đơn hàng #

Phần chung (khởi tạo client, lỗi, danh sách, ngôn ngữ) ở tài liệu FE của Core: docs/fe/common.md (bản đọc: xforge-documentation, ADR-0102 của xforge-core). Sửa file này CÙNG PR khi đổi hành vi FE thấy được của module.

Phiếu hoàn ghi tiền trả lại khách cho một đơn đã trả. Chỉ hoàn phần tiền mặt / chuyển khoản, trần theo grandTotal của đơn. Phần đơn trả bằng thẻ quà hoàn riêng: refundOrderToGiftCard (module gift_card); hệ thống không tự chia một lần hoàn giữa tiền và thẻ, nhân viên quyết từng bên.

Vòng đời #

pending → completed | failed. Riêng cách momo: pending → processing (đã gửi cổng) → completed | failed.

Mỗi phiếu có actions: thao tác người gọi làm được lúc này. Bật / tắt nút theo đó, đừng tự suy từ status. Giá trị lạ thì bỏ qua.

actionsKhi nàoQuyềnMethod
sendmethod là momo và phiếu pendingrefund.sendsendRefund
completepending / processingrefund.completecompleteRefund
failpending / processing, trừ khi MoMo đã xác nhậnrefund.completefailRefund

CMS / admin (XforgeClient) #

Menu: key refund.refunds (quyền refund.read).

ViệcMethodQuyền
Danh sáchlistRefunds({ query }) (lọc status, order_id; q theo số phiếu)refund.read
Chi tiếtgetRefund({ params: { id } })refund.read
TạocreateRefund({ body: { orderId, amount, shippingAmount?, method, reason? } })refund.create
Hoàn tấtcompleteRefund({ params: { id }, body: { reference? } })refund.complete
Thất bạifailRefund({ params: { id }, body: { reason, gatewayChecked? } })refund.complete
Gửi MoMosendRefund({ params: { id } })refund.send

Webhook gửi đi #

Sự kiện refund.completed, đăng ký ở màn "Tích hợp" (docs/fe/cms.md §8), người đăng ký cần refund.read. Phát khi phiếu hoàn tất, cả hoàn tay lẫn qua MoMo. data là hợp đồng (thêm field được):

{ refundId, number, orderId, orderNumber, status, method, currency, amount, shippingAmount, refundedTotal, paymentStatus }

Không có lý do, mã giao dịch hay dữ liệu cá nhân; bên nhận đọc chi tiết qua API.

Lỗi cần xử lý #

codeStatusFE nên
refund_order_not_found404đơn không thuộc store
refund_order_not_paid409đơn chưa trả (details.paymentStatus)
refund_amount_exceeds409hiện details.available; phần đã trả bằng thẻ hoàn ở gift_card
refund_shipping_exceeds409hiện details.available
refund_shipping_over_amount400phần phí giao lớn hơn số tiền hoàn
refund_momo_unavailable409đơn không trả qua MoMo / store chưa cấu hình: chọn cách khác
refund_not_gateway409phiếu không phải momo: tải lại
refund_not_pending409phiếu đã đổi trạng thái: tải lại
refund_gateway_check_required409hỏi người đối soát đã kiểm MoMo chưa, gửi lại với gatewayChecked
refund_gateway_paid409MoMo đã hoàn: chỉ còn completeRefund
Nguồn: xforge-modules: modules/sales/refund/FE.md