Payment Notification
Xử lý kết quả thanh toán
Khi việc xử lý thanh toán hoàn tất, MoMo sẽ thông báo cho đối tác ngay cả khi giao dịch này có thành công hay không.
Giao diện (Redirect)
Sau khi luồng thanh toán hoàn tất, khách hàng được điều hướng đến redirectUrl
mà bên đối tác đã cung cấp trong create
request. Một vài thông số sẽ được thêm vào URL theo dạng sau:
Method: GET
redirectUrl ?{parameters}
IPN - Instant Payment Notification
Hệ thống của MoMo sử dụng API được khai báo trong ipnUrl
để gửi HTTP request với cấu hình bên dưới đến hệ thống đối tác.
Method: POST
Attribute | Value | Description |
---|---|---|
URL | ipnUrl | URL |
Method | POST | Phương thức của HTTP request |
Headers | Content-type: application/json | HTTP Headers |
Payload | Result Transaction | Nội dung của HTTP body |
Mẫu Request IPN
curl --location 'https://example.com/momo_ip' \
--header 'Content-Type: application/json' \
--data '{
"orderType": "momo_wallet",
"amount": 1000,
"partnerCode": "MOMOT5BZ20231213_TEST",
"orderId": "Partner_Transaction_ID_1721720620078",
"extraData": "eyJza3VzIjoiIn0=",
"signature": "7b9f4ca728076c32f16041cbc917ebf5e6e7359f0bde343dde3add69a518cf0d",
"transId": 4088878653,
"responseTime": 1721720663942,
"resultCode": 0,
"message": "Successful.",
"payType": "qr",
"requestId": "Request_ID_1721720620078",
"orderInfo": "Thank you for your purchase at MoMo_test"
}'
Reponse của đối tác sẽ đến MoMo sau khi MoMo gửi HTTP request đến địa chỉ ipnUrl
.
Bên đối tác cần phản hồi với HTTP code 204 (không cần gửi thêm nội dung)!
Lưu ý: Đối tác cần phản hồi lại trong vòng 15 giây.
Đối tác cần kiểm tra tính hợp lệ của chữ ký trong IPN để đảm bảo kết quả của giao dịch. PartnerCode
, OrderId
& Amount
,... trong notification phải khớp với PartnerCode
, OrderId
& Amount
,... đối tác lưu trong database bên đó!
Field resultCode
và message
do đối tác xử lý. Tham chiếu đến result code mà MoMo trả về.
MoMo sẽ dùng những thông tin này để phản hồi lại khách hàng nếu có bất cứ lỗi nào xảy ra trong quá trình xử lý thanh toán bên nhà đối tác.
Trạng Thái Giao Dịch
Sử dụng field resultCode
để xác định trạng thái của giao dịch:
resultCode = 0
: giao dịch thành công.resultCode = 9000
: giao dịch được cấp quyền (authorization) thành công .resultCode <> 0
: giao dịch thất bại.
Tham khảo Result code để xác định chi tiết lỗi của giao dịch.
Trong một số trường hợp khi kiểm tra chéo số dư và dòng tiền, MoMo sẽ không sử dụng kết quả IPN từ đối tác để hoàn tiền giao dịch!
Instant Payment Notification
Instant Payment Notification (IPN) là thông điệp được gửi từ Nhà Cung Cấp Dịch Vụ Thanh Toán - Payment Service Provider (PSP) đến Bên Sử Dụng Dịch Vụ Thanh Toán - Payment Service Consumer (PSC). Việc này sử dụng giao thức HTTP và quy trình này là bất đồng bộ.
Tại sao sử dụng IPN
Instant Payment Notification (IPN) được sử dụng để thông báo (notify) kết quả giao dịch ngay lâp tức dến PSC:
- Thanh Toán: Web, SmartTv.
- Thanh Toán Trực Tuyến
- Thanh Toán Định Kỳ
Đối tác có thể sử dụng hệ thống của mình để xử lý thông tin nhận được từ PSP:
- Cập nhật trạng thái giao dịch (khuyên dùng)
- Cập nhật số dư tài khoản (nạo tiền), xuất sản phẩm, thông báo kết quả giao dịch đến ứng dụng di động,...
- Gửi hóa đơn điện tử
Sử dụng IPN để khắc phục trường hợp thanh toán thành công nhưng người dùng không nhận được sản phẩm.
Lý do:
- Người dùng đóng trình duyệt
- Không thể điều hướng đến trang ban đầu của đối tác: do đường truyền, hệ thông quá tải,...
Cách thực thi IPN
Đối tác cần tạo API phía backend để 'lắng nghe' kết quả từ MoMo và cung cấp URL của API đó trong field ipnUrl
.
Sau khi người dùng sử dụng thanh toán trên MoMo (web hoặc app), MoMo sẽ thông báo kết quả giao dịch ngay lập tức đến URL này. API của đối tác nhận kết quả thanh toán và tiếp tực xử lý trong hệ thông bên họ.
Xây dựng API
HTTP Produces Header: Sử dụng để MoMo gửi HTTP Request Content-Type: application/json
HTTP Consumers Header: Đối tác phản hồi lại MoMo: HTTP code 204 (không cần gửi thêm nội dung)
Endpoint: URL chỉ nên bao gồm đường dẫn, tham số và không chứa ký tự đặc biệt, unicode hoặc khoảng cách.