Thanh Toán Liên Kết Ví
Với khách hàng thường xuyên thanh toán trên wesite hoặc ứng dụng của bạn, thanh toán trở nên nhanh và dễ hơn khi người dùng không cần xác thực lại thông tin ở những lần sau. Để làm được điều này, khách hàng của bạn cần liên kết tài khoản ví MoMo của họ với ứng dụng của bạn (ràng buộc) và sau đó tận hưởng thanh toán nhanh chóng mọi lúc.
Luồng Xử Lý
Liên kết (và thanh toán)
- URL phục vụ nhu cầu liên kết, hoặc phục vụ cả liên kết và thanh toán cùng một lúc. Nếu đối tác chỉ muốn thực hiện riêng luồng liên kết, số tiền (amount) - một trường dữ liệu trong URL được để là 0 VNĐ. Trường hợp bao gồm cả liên kết và thanh toán, số tiền (amount) cần để ở mức cao hơn 1000 VNĐ.
- Thiết lập thời hạn cho URL này là 15 phút (có thể điều chỉnh được tùy theo mong muốn của doanh nghiệp).
Thanh toán bằng token
Cấu Hình API
Phương thức thiết lập liên kết
HTTP RequestPOST /v2/gateway/api/create
Attribute | Type | Required | Description |
---|---|---|---|
partnerCode | String(20) | Merchant ID Thông tin tích hợp | |
partnerName | String | Tên đối tác | |
storeId | String | Mã cửa hàng | |
requestId | String(50) | Định danh duy nhất cho mỗi yêu cầu Đối tác sử dụng requestId để xử lý idempotency | |
amount | Long | Số tiền cần thanh toán Nhỏ Nhất: 0 VND Tối đa: 20.000.000 VND Tiền tệ: VND Kiểu dữ liệu: Long | |
orderId | String | Mã đơn hàng của đối tác | |
orderInfo | String | Thông tin đơn hàng | |
orderGroupId | Long | orderGroupId được MoMo cung cấp để phân nhóm đơn hàng cho các hoạt động vận hành sau này. Vui lòng liên hệ với MoMo để biết chi tiết cách sử dụng | |
redirectUrl | String | Một URL của đối tác. URL này được sử dụng để chuyển trang (redirect) từ MoMo về trang mua hàng của đối tác sau khi khách hàng thanh toán. Hỗ trợ: AppLink and WebLink | |
ipnUrl | String | API của đối tác. Được MoMo sử dụng để gửi kết quả thanh toán theo phương thức IPN (server-to-server) | |
partnerClientId | String | Định danh của mỗi user (e.g.: user ID hoặc email). Id này sẽ được dùng để liên kết với user của MoMo | |
extraData | String | Giá trị mặc định là rỗng"" Encode base64 theo định dạng Json: {"key": "value"} Ví dụ với dữ liệu: {"username": "momo"} thì data extraData : eyJ1c2VybmFtZSI6ICJtb21vIn0= | |
requestType | String(20) | linkWallet | |
userInfo | Object | Thông tin người dùng Ví dụ: {"partnerClientAlias": "abc@gmail.com" } | |
lang | String | Ngôn ngữ của message được trả về (vi hoặc en ) | |
signature | String | Chữ ký để xác nhận giao dịch. Sử dụng thuật toán Hmac_SHA256 với data theo định dạng được sort từ a-z : accessKey=$accessKey&amount=$amount&extraData=$extraData &ipnUrl=$ipnUrl&orderId=$orderId&orderInfo=$orderInfo &partnerClientId=$partnerClientId&partnerCode= $partnerCode&redirectUrl=$redirectUrl&requestId= $requestId&requestType=$requestType |
Chi tiết nội dung của userInfo
Attribute | Type | Required | Description |
---|---|---|---|
partnerClientAlias | String | Một thông tin để định danh tài khoản dịch vụ của người dùng (thường là số điện thoại, email, tên hoặc nickname,...), hỗ trợ người dùng nhận biết khi liên kết hoặc kiểm tra giao dịch phát sinh. |
Ngoài ra, nếu đối tác muốn liên kết 1 partnerClientId với nhiều ví MoMo (theo quy tắc 1 : nhiều), đối tác có thể thêm vào mã số để đánh dấu: nxxx_partnerClientId
với xxx được xem như số thứ tự liên kết. Ví dụ, lần liên kết đầu tiên cho user A có thể dùng partnerClientId là n000_abc@gmail.com
và truyền partnerclientId là n0001_abc@gmail.com
ở lần liên kết thứ 2.
Mẫu Request
{
"partnerCode": "MOMOIQA420180417",
"accessKey": "SvDmj2cOTYZmQQ3H",
"requestId": "1516771499398",
"amount": "0",
"orderId": "1516771499398",
"ipnUrl": "http://localhost:1001",
"redirectUrl": "http://localhost:8081",
"partnerClientId": "abc@gmail.com",
"requestType": "linkWallet",
"userInfo": {
"partnerClientAlias": "abc@gmail.com"
},
"lang": "vi",
"signature": "ca3c203f0c16873e688fada17…ee116b636ff407d6fe39"
}
Attribute | Type | Required | Description |
---|---|---|---|
partnerCode | String | Thông tin tích hợp | |
requestId | String | Giống với yêu cầu ban đầu | |
orderId | String | Mã đơn hàng của đối tác | |
amount | Long | Giống với số tiền yêu cầu ban đầu | |
responseTime | Long | Thời gian trả kết quả thanh toán về đối tác Định dạng: timestamp | |
message | String | Mô tả lỗi, ngôn ngữ dựa trên lang | |
resultCode | int | Result Code | |
payUrl | String | URL để chuyển từ trang mua hàng của đối tác sang trang thanh toán của MoMo | |
deeplink | String | URL để mở ứng dụng trực tiếp MoMo (Khách hàng phải cài đặt ứng dụng MoMo trước) và trang xác nhận thanh toán | |
qrCodeUrl | String | Dữ liệu để tạo mã QR nếu bạn muốn khách hàng quét mã QR trực tiếp trên trang mua hàng hoặc in mã lên hoá đơn. Note : Đây không phải URL chứa hình ảnh của mã QR, bạn cần sử dụng thư viện ngoài để tạo mã QR. | |
deeplinkMiniApp | String | URL mở màn hình xác nhận thanh toán của ứng dụng MoMo. Áp dụng khi đối tác sử dụng mini app nhúng vào trong ứng dụng MoMo. | |
partnerClientId | String(50) | Định danh của mỗi user (e.g.: user ID hoặc email) Id này sẽ được dùng để liên kết với user của MoMo |
Mẫu Response
{
"partnerCode": "MOMOIOLD20190129",
"requestId": "1616577794003",
"orderId": "1616577794003:0123456778",
"amount": 10000,
"responseTime": 1616577795018,
"message": "Thành công",
"resultCode": 0,
"payUrl": "https://test-payment.momo.vn/gateway/pay?t=TU9NT...NTY3Nzg=",
"qrCodeUrl": "https://test-payment.momo.vn/gateway/pay?t=TU9NT...NTY3Nzg=",
"deeplink": "momo://?action=link&amount=1...25c&source=websdk&type=sale&v=1.1",
"partnerClientId": "932024090117"
}
Xử lý kết quả thanh toán
Tìm hiểu thêm về Payment Notification.
Mô tả tham số
Bảng mô tả các tham số được MoMo đính kèm trong trong URL redirectUrl
và nội dung body của ipnUrl
.
Attribute | Type | Required | Description |
---|---|---|---|
partnerCode | String | Thông tin tích hợp | |
orderId | String | Mã đơn hàng của đối tác Regex: ^[0-9a-zA-Z]([-_.]*[0-9a-zA-Z]+)*$ | |
requestId | String | requestId của đối tác | |
amount | Long | Số tiền thanh toán | |
orderInfo | String | Thông tin đơn hàng | |
orderType | String | momo_wallet | |
partnerClientId | String(50) | Định danh của mỗi user (e.g.: user ID hoặc email). Id này sẽ được dùng để liên kết với user của MoMo | |
callbackToken | String | token được sử dụng gọi bind để lấy được token thanh toán | |
transId | Long | Mã giao dịch của MoMo | |
resultCode | Integer | Trạng thái giao dịch của đơn hàng Mã Kết Quả | |
message | String | Mô tả lỗi ngôn ngữ dựa trên lang | |
payType | String | Hình thức thanh toán: webApp , app ,qr hoặc miniapp | |
responseTime | Long | Thời gian trả kết quả thanh toán về đối tác Định dạng:: timestamp | |
extraData | String | Thông tin thêm | |
signature | String | Chữ ký để xác nhận giao dịch. Sử dụng thuật toán Hmac_SHA256 với data theo định dạng được sort từ a-z : accessKey=$accessKey&amount=$amount&callbackToken= $callbackToken&extraData=$extraData&message=$message &orderId=$orderId&orderInfo=$orderInfo&orderType= $orderType&partnerClientId=$partnerClientId &partnerCode=$partnerCode&payType=$payType&requestId= $requestId&responseTime=$responseTime&resultCode= $resultCode&transId=$transId |
Lấy token thanh toán (recurring token)
Sau khi nhận callbackToken
từ kết quả giao dịch, đối tác gửi yêu cầu đến MoMo lấy thông tin token của user.
POST /v2/gateway/api/tokenization/bind
Parameter | Type | Required | Description |
---|---|---|---|
partnerCode | String | Thông tin tích hợp | |
callbackToken | String | callbackToken như được xem như access token, được nhận từ kết quả thanh toán | |
requestId | String(50) | Định danh duy nhất cho mỗi yêu cầu, Đối tác sử dụng requestId cho xử lý idempotency | |
orderId | String | Phải trùng với orderId gọi linkWallet | |
partnerClientId | String | Phải trùng với partnerClientId gọi linkWallet | |
lang | String | Ngôn ngữ của message trả về (vi hoặc en ) | |
signature | String | Chữ ký để xác nhận giao dịch. Sử dụng thuật toán Hmac_SHA256 với data theo định dạng được sort từ a-z : accessKey=$accessKey&callbackToken=$callbackToken&orderId= $orderId&partnerClientId=$partnerClientId&partnerCode= $partnerCode&requestId=$requestId |
Mẫu request
{
"partnerCode": "MOMO_ATM_DEV",
"requestId": "03dc5a00-b37c-11e9-b3a3-2f10f50d933d",
"callbackToken": "v2/qml0PbOlrBYjFlZv…8StiawfZPiKoUGvywNHV",
"orderId": "03dc32f0-b37c-11e9-b3a3-2f10f50d933d",
"partnerClientId": "user@momo.vn",
"signature": "fa8b66df31cc7045783323f1e4492d7b71c1de4c9e1b71002f95a1aa869e885a",
"lang": "vi"
}
Attribute | Type | Required | Description |
---|---|---|---|
partnerCode | String | Thông tin tích hợp | |
requestId | String | Định danh duy nhất cho mỗi yêu cầu. Đối tác sử dụng requestId cho xử lý idempotency | |
orderId | String | Mã đơn hàng của đối tác | |
aesToken | String | JSON object của token được mã hóa bằng AES | |
resultCode | Integer | Trạng thái của đơn hàng | |
partnerClientId | String | Định danh của mỗi user (e.g.: user ID hoặc email). Id này sẽ được dùng để liên kết với user của MoMo | |
responseTime | Long | Thời gian trả kết quả thanh toán về đối tác. Định dạng: timestamp | |
message | String | Mô tả trạng thái của đơn hàng dựa trên lang |
Dữ liệu token sau khi giải mã
Attribute | Type | Required | Description |
---|---|---|---|
value | String | dùng để thanh toán bằng token | |
userAlias | String | MoMo masked wallet ID (only show last 4 digits) ID ví MoMo đã được che (chỉ số 4 số cuối) | |
profileId | String | ID ví MoMo đã được hash |
Mẫu response
{
"partnerCode": "MOMO_ATM_DEV",
"requestId": "03dc5a00-b37c-11e9-b3a3-2f10f50d933d",
"orderId": "03dc32f0-b37c-11e9-b3a3-2f10f50d933d",
"partnerClientId": "user@momo.vn",
"resultCode": 0,
"responseTime": 145784525,
"message": "Success",
"aesToken": "NplHKEhGuFoo5o5vbMeJwrsk7wXEPnCjSZv6DgivW1a8JKw1gdXq2WS7UsPwoJv0yf6rbGiVV6nOKAxU8kTNg4SZraqJnf7GAq9OSE2LiNs="
}
Sau khi nhận aesToken từ MoMo, Server đối tác phải giải mã aesToken để lấy giá trị ban đầu của token và lưu trữ nó trong hệ thống bên phía đối tác. Việc giải mã token thanh toán bằng thuật toán AES cần có secrect key
có thể được tìm thấy ở https://business.momo.vn
Ví dụ
private static String decrypt_AES(String sercretKey, String encryptData) {
try {
IvParameterSpec iv = new IvParameterSpec(new byte[16]);
SecretKeySpec skeySpec = new SecretKeySpec(sercretKey.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(Base64.decodeBase64(encryptData));
return new String(original);
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
Thanh toán bằng token
Đối tác có thể dùng token đã lấy trước đó để thực hiện thanh toán
HTTP RequestPOST /v2/gateway/api/tokenization/pay
Parameter | Type | Required | Description |
---|---|---|---|
partnerCode | String | Thông tin tích hợp | |
partnerName | String | Tên đối tác | |
storeId | String | Định danh cửa hàng | |
orderId | String | Mã đơn hàng của đối tác Regex: ^[0-9a-zA-Z]([-_.]*[0-9a-zA-Z]+)*$ | |
amount | Long | Số tiền cần thanh toán Nhỏ Nhất: 1.000 VND Tối đa: 30.000.000 VND Tiền tệ: VND Kiểu dữ liệu: Long | |
requestId | String(50) | Định danh duy nhất cho mỗi yêu cầu, Đối tác sử dụng requestId cho xử lý idempotency | |
token | String | Token Json object đã được mã hóa bằng RSA sử dụng public Key RSA Encryption | |
partnerClientId | String | Định danh của mỗi user (e.g.: user ID hoặc email). Id này sẽ được dùng để liên kết với user của MoMo | |
orderInfo | String | Mô tả chi tiết | |
autoCapture | Boolean | Nếu giá trị là false thì cần bên đối tác gọi api confirm để thực hiện capture cho việc thanh toán. | |
redirectUrl | String | Một URL của đối tác. URL này là bắt buộc khi áp dụng 2in1, để chuyển trang (redirect) từ MoMo về trang mua hàng của đối tác sau khi khách hàng trực tiếp thanh toán qua màn hình thanh toán an toàn. Hỗ trợ: AppLink and WebLink | |
ipnUrl | String | API của đối tác, bắt buộc gửi khi áp dụng 2in1, được MoMo sử dụng để gửi kết quả thanh toán theo phương thức IPN đối với các thanh toán trực tiếp thực hiện bởi khách hàng. | |
extraData | String | Giá trị mặc định "" Encode base64 theo Jsonformat: {"key": "value"} Ví dụ với data: {"username": "momo"} => được encode sang extraData : eyJ1c2VybmFtZSI6ICJtb21vIn0= | |
userInfo | Object | Thông tin người dùng Ví dụ: `{"partnerClientAlias": "abc@gmail.com" } | |
lang | String | Ngôn ngữ của message (vi or en ) | |
signature | String | Chữ ký dùng để đảm bảo độ tin cậy của thông tin giao dịch. Là 1 chuỗi được mã hóa bằng thuật toán Hmac_SHA256 theo format: một chuỗi gồm key name và giá trị của các field sắp xếp theo thứ tự của key name từ a-z: accessKey=$accessKey&amount=$amount&extraData=$extraData &orderId=$orderId&orderInfo=$orderInfo&partnerClientId= $partnerClientId&partnerCode=$partnerCode&requestId= $requestId&token=$token |
Dữ liệu token trước khi được mã hõa
Attribute | Type | Required | Description |
---|---|---|---|
value | String | giá trị của token | |
requireSecurityCode | Boolean | Nếu giá trị là false khi tham số security code không được dùng: thanh toán được gửi trực tiếp đến bên cung cấp thay vì điều hướng đến trang chứa form để điền security code |
Chi tiết nội dung của userInfo
Attribute | Type | Required | Description |
---|---|---|---|
partnerClientAlias | String | Một thông tin để định danh tài khoản dịch vụ của người dùng (thường là số điện thoại, email, tên hoặc nickname,...), hỗ trợ người dùng nhận biết khi liên kết hoặc kiểm tra giao dịch phát sinh. |
Ngoài ra, nếu đối tác muốn liên kết 1 partnerClientId với nhiều ví MoMo (theo quy tắc 1 : nhiều), đối tác có thể thêm vào mã số để đánh dấu: nxxx_partnerClientId
với xxx được xem như số thứ tự liên kết. Ví dụ, lần liên kết đầu tiên cho user A có thể dùng partnerClientId là n000_abc@gmail.com
và truyền partnerclientId là n0001_abc@gmail.com
ở lần liên kết thứ 2.
Với resultCode 8000
, cung cấp payUrl ở kết quả trả về. PayUrl này sẽ dùng để điều hướng khách hàng đến trang thanh toán.
Request mẫu
{
"token": "sa5s4a54s5a4s5a4s5",
"partnerCode": "MOMO_ATM_DEV",
"partnerName": "Test",
"storeId": "MoMo test store",
"ipnUrl": "abc.com",
"redirectUrl": "abc.com",
"orderId": "12545465654656",
"amount": "20000",
"lang": "vi",
"autoCapture": true,
"orderInfo": "Thanh toan MoMo",
"requestId": "365656d56sd",
"extraData": "",
"partnerClientId": "test@momo.vn",
"signature": "2512s1d2s1ds21d2s1d1ce5d1a251#@"
}
Attribute | Type | Required | Description |
---|---|---|---|
partnerCode | String | Thông tin tích hợp | |
orderId | String | ã đơn hàng thanh toán của đối tác | |
requestId | String | Định danh duy nhất cho mỗi yêu cầu, Đối tác sử dụng requestId cho xử lý idempotency | |
amount | Long | Amount to pay | |
transId | Long | Mã giao dịch của MoMo | |
responseTime | Long | Thời gian phản hồi kết quả thanh toán đến đối tác Format: timestamp | |
partnerClientId | String | Định danh của mỗi user (e.g.: user ID hoặc email). Id này sẽ được dùng để liên kết với user của MoMo | |
resultCode | Integer | Result Code | |
message | String | Mô tả lỗi, ngôn ngữ dựa trên lang | |
payUrl | String | URL để chuyển từ trang mua hàng của đối tác sang trang thanh toán của MoMo | |
deeplink | String | URL để mở ứng dụng trực tiếp MoMo (Khách hàng phải cài đặt ứng dụng MoMo trước) và trang xác nhận thanh toán. | |
qrCodeUrl | String | URL mở màn hình xác nhận thanh toán của ứng dụng MoMo. Áp dụng khi đối tác sử dụng mini app nhúng vào trong ứng dụng MoMo. |
Mẫu Response
{
"partnerCode": "MOMO_ATM_DEV",
"requestId": "1599645548172",
"orderId": "1599645548172:0123456778",
"amount": 50000,
"responseTime": 145758545,
"partnerClientId": "user@momo.vn",
"resultCode": 0,
"message": "Success"
}
Xóa token
Đối tác có thể tạo request để xóa token đã lưu.
HTTP RequestPOST /v2/gateway/api/tokenization/delete
Parameter | Type | Required | Description |
---|---|---|---|
partnerCode | String | Thông tin tích hợp | |
requestId | String(50) | Định danh duy nhất cho mỗi yêu cầu, Đối tác sử dụng requestId cho xử lý idempotency | |
orderId | String | Mã đơn hàng của đối tác | |
storeId | String | Mã cửa hàng | |
token | String | Json Object Token được mã hóa bằng thuật toán RSA sử dụng public Key RSA Encryption | |
partnerClientId | String | Định danh của mỗi user (e.g.: user ID hoặc email). Id này sẽ được dùng để liên kết với user của MoMo | |
lang | String | ngôn ngữ của message (vi or en ) | |
signature | String | Chữ ký để xác nhận giao dịch. Sử dụng thuật toán Hmac_SHA256 với data theo định dạng được sort từ a-z accessKey=$accessKey&orderId=$orderId&partnerClientId= $partnerClientId&partnerCode=$partnerCode&requestId= $requestId&token=$token |
Mẫu Request
{
"partnerCode": "MOMO_ATM_DEV",
"requestId": "15454561",
"orderId": "sa1s5a1",
"lang": "en",
"partnerClientId": "test@momo.vn",
"token": "sa1a25s1a21s2a1asasa21s2a1s2",
"signature": "xmznmznxkakajdkkcbkscbkbcs@#dczcxz"
}
Attribute | Type | Required | Description |
---|---|---|---|
partnerCode | String | Thông tin tích hợp | |
requestId | String | Định danh duy nhất cho mỗi yêu cầu, Đối tác sử dụng requestId cho xử lý idempotency | |
message | String | Mô tả lỗi, ngôn ngữ dựa trên lang | |
resultCode | Integer | Result Code | |
partnerClientId | String | Định danh của mỗi user (e.g.: user ID hoặc email) Id này sẽ được dùng để liên kết với user của MoMo | |
responseTime | Long | Thời gian phản hồi kết quả về đối tác. Định dạng: timestamp |
Mẫu Response
{
"partnerCode": "MOMO_ATM_DEV",
"orderId": "1600838954650:0123456778",
"requestId": "1600838954650",
"resultCode": 0,
"message": "Success",
"partnerClientId": "test@momo.vn",
"responseTime": 14548754653232
}
Hủy liên kết
Request header:
application/jsonResponse header:
application/json
MoMo cho phép hủy liên kết từ MoMo App.
Đối tác phải cung cấp endpoint để nhận thông báo về liên kết được hủy từ MoMo, sử dụng HTTP POST.
HTTP RequestAttribute | Type | Required | Description |
---|---|---|---|
partnerCode | String | Mã đối tác | |
requestId | String | Định danh duy nhất cho mỗi yêu cầu, Đối tác sử dụng requestId cho xử lý | |
orderId | String | Định danh của order của MoMo, giá trị duy nhất cho mỗi request | |
partnerClientId | String | Định danh của mỗi user (e.g.: user ID hoặc email). Id này sẽ được dùng để liên kết với user của MoMo | |
tokenType | String | wallet | |
requestType | String | unbind | |
signature | String | Chữ ký để xác nhận giao dịch. Sử dụng thuật toán Hmac_SHA256 với data theo định dạng được sort từ a-z : accessKey=$accessKey&orderId=$orderId&partnerClientId=$partnerClientId &partnerCode=$partnerCode&requestId=$requestId &requestType=$requestType&tokenType=$tokenType |
Ví dụ
{
"partnerCode": "MOMOIQA420180417",
"requestId": "0e0ceb2a-ea06-4ca7-b63a-e5c8948a5bfc",
"orderId": "012457855:231454545",
"partnerClientId": "sang@momo.com.vn",
"requestType": "unbind",
"tokenType": "wallet",
"signature": "bd4df3f3bad6815a9a7be1f1f5c8576f3f97eab25327247425f12a3fb4a78873"
}
Bạn cần phản hồi với HTTP code 204 (No Content)!
Truy vấn CallbackToken
Khi không thể nhận hoặc lưu callbackToken, Hệ thống đối tác có thể gửi yêu cầu đến MoMo để truy vấn callbackToken. Lưu ý rằng callbackToken sẽ bị vô hiệu sau 10 phút tính từ khi được khởi tạo.
Request header:
application/json - Response header:
application/json
POST /v2/gateway/api/tokenization/cbQuery
Attribute | Type | Required | Description |
---|---|---|---|
partnerCode | String | Mã đối tác | |
requestId | String | Định danh duy nhất cho mỗi yêu cầu, Đối tác sử dụng requestId cho xử lý idempotency | |
orderId | String | Phải trùng với orderId gọi linkWallet | |
partnerClientId | String | phải trùng với partnerClientId gọi linkWallet | |
lang | String | vi hoặc en | |
signature | String | Chữ ký để xác nhận giao dịch. Sử dụng thuật toán Hmac_SHA256 với data theo định dạng được sort từ a-z : accessKey=$accessKey&orderId=$orderId &partnerClientId=$partnerClientId&partnerCode=$partnerCode &requestId=$requestId |
Ví dụ
{
"partnerCode": "123456",
"requestId": "1527246504579",
"orderId": "1527246478428",
"partnerClientId": "MoMoAccountTest",
"lang": "vi",
"signature": "13be80957a5ee32107198920fa26aa85a4ca238a29f46e292e8c33dd9186142a"
}
Attribute | Type | Description |
---|---|---|
partnerCode | String | Mã đối tác |
requestId | String | Định danh duy nhất cho mỗi yêu cầu, Đối tác sử dụng requestId cho xử lý idempotency |
orderId | String | Mã đơn hàng của đối tác |
callbackToken | String | Callback token được khởi tạo bởi MoMo |
resultCode | int | Mã trạng thái giao dịch |
message | String | Mô tả kết quả giao dịch dựa trên lang |
responseTime | long | Thời gian phản hồi |
Ví dụ
{
"partnerCode": "123456",
"requestId": "1527246504579",
"orderId": "1527246478428",
"callbackToken ": "u7YYQZnAbLQivB0p5SHT9LIhjshqarXyobE_WzCCa4vDt58r",
"resultCode": 0,
"message": "Success",
"responseTime": 127264428
}
Result Codes & Messages
Các result codes và thông báo tương ứng này được chỉ định riêng cho luồng Liên kết Tài khoản của thanh toán Liên kết Ví. Ngoài ra, vui lòng tìm kiếm những mã khác trong danh sách result codes tổng hợp ở đây.
Result code | Description | Final Status | Recommended actions | Type |
---|---|---|---|---|
0 | Thành công. | Yes | ||
2001 | Giao dịch thất bại do sai thông tin liên kết. | Yes | Token liên kết không tồn tại hoặc đã bị xóa, vui lòng cập nhật dữ liệu của bạn. | Merchant error |
2007 | Giao dịch thất bại do liên kết hiện đang bị tạm khóa. | Yes | Token liên kết hiện đang ở trạng thái không hoạt động, do người dùng đã chủ động tạm khóa liên kết. | User error |
2012 | Yêu cầu bị từ chối vì token không khả dụng. | Yes | Token không tồn tại hoặc đã bị xóa. Không thể cập nhật trạng thái token. | Merchant error |
3001 | Liên kết thất bại do người dùng từ chối xác nhận. | Yes | User error | |
3002 | Liên kết bị từ chối do không thỏa quy tắc liên kết. | Yes | Từ chối này thường xảy ra khi partnerClientId dùng trong yêu cầu đã được liên kết với một hoặc nhiều tài khoản MoMo trước đó. Vui lòng liên hệ MoMo để biết thêm chi tiết. | System error |
3003 | Hủy liên kết bị từ chối do đã vượt quá số lần hủy. | Yes | Vui lòng liên hệ MoMo để biết thêm chi tiết. | System error |
3004 | Liên kết này không thể hủy do có giao dịch đang chờ xử lý. | Yes | Vui lòng kiểm tra nếu có bất kỳ giao dịch chờ liên quan đến token này chưa được yêu cầu capture hoặc cancel (hủy). | System error |
4010 | Quá trình xác minh OTP thất bại. | Yes | Quá trình xác minh người dùng thất bại. Vui lòng gửi một yêu cầu xác minh người dùng khác để thử lại. | User error |
4011 | OTP chưa được gửi hoặc hết hạn. | Yes | Vui lòng yêu cầu gửi một mã OTP khác. | User error |
4016 | Không thể thực hiện vì xác thực sai quá nhiều lần. Vui lòng thử lại sau một ngày. | Yes | User error | |
4017 | Xác thực thất bại. Vui lòng gửi lại mã xác thực đúng. | Yes | User error | |
4018 | Xác thực thất bại. Vui lòng gửi lại mã xác thực mới nhất. | Yes | User error | |
4019 | Mã xác thực đã hết hạn. Vui lòng tạo yêu cầu thanh toán khác để được gửi mã xác thực mới. | Yes | User error | |
4020 | Không gửi được mã xác thực . Vui lòng thử lại với yêu cầu mới. | Yes | Please contact MoMo for the restriction details. | System error |
8000 | Giao dịch đang ở trạng thái cần được người dùng xác nhận thanh toán lại. | No | Giao vẫn đang chờ người dùng xác nhận thanh toán; trạng thái của giao dịch sẽ được tự động thay đổi ngay sau khi người dùng xác nhận hoặc hủy thanh toán. | User error |
8200 | Giao dịch đang ở trạng thái cần xác nhận 2FA. | No | Đối tác cần gửi kết quả xác nhận 2FA để giao dịch được tiếp tục xử lý. | User error |
9000 | Giao dịch đã được xác nhận thành công. | No | Đối với thanh toán 1 bước (autoCapture=1), đây có thể xem như giao dịch thanh toán đã thành công. Đối với thanh toán 2 bước (autoCapture=0), vui lòng thực hiện tiếp yêu cầu capture hoặc cancel. Đối với liên kết, vui lòng tiến hành yêu cầu lấy recurring token. | Pending |