Please read Onboarding first!!
OVERVIEW
Payment from Parner site

Using methods:
METHODS
1. INIT PAYMENT
The following endpoint init a transaction.
| SERVER | CLIENT | END POINT | METHOD | HEADERS |
|---|---|---|---|---|
| MOMO | PARTNER | /api/gw_payment/init | POST | Reference to Headers |
SAMPLE
Sample request
{
"requestId": "LetsChangeItForEachRequest",
"reference1": "OrderID",
"reference2": "",
"client": "webinapp",
"callbackUrl": "https://sample.partner.url/callback",
"notifyUrl": "https://sample.partner.url/notify",
"description": "",
"totalAmount": 100000,
"checksumKey": "ChecksumKey",
"accountInfo": {
"id": "",
"name": "What Your Name",
"email": "",
"personalId": "",
"dob": "",
"address": "",
"companyName": "",
"phoneNumber": ""
},
"billList": [
{
"billId": "OrderID",
"totalAmount": 100000,
"description": "",
"extras": {}
}
],
"extras": {}
}
Sample response
{
"requestId": "1615261513",
"referenceId": "1210744185270711_5295",
"resultCode": 0,
"message": "Success",
"data": {
"target": "https://testing.momo.vn:22447/fi/authorize?r=1615261513&s=gwpayment_dev_1615261513&t=1210744185270711_5295",
"qrCode": "https://testing.momo.vn:22447/fi/gw_payment/authorize/s?r=1615261513&s=gwpayment_dev_1615261513&t=1210744185270711_5295"
}
}
TRY IT
curl without PGP encrypt
curl -L -X POST 'https://testing.momo.vn:22446/api/gw_payment/init' -H 'Accept: application/pgp-encrypted' -H 'Content-Type: application/pgp-encrypted' -H 'partner-code: gwpayment_dev' --data-raw '{
"requestId": "LetsChangeItForEachRequest",
"reference1": "OrderID",
"reference2": "",
"client": "webinapp",
"callbackUrl": "https://sample.partner.url/callback",
"notifyUrl": "https://sample.partner.url/notify",
"description": "",
"totalAmount": 100000,
"checksumKey": "ChecksumKey",
"accountInfo": {
"id": "",
"name": "What Your Name",
"email": "",
"personalId": "",
"dob": "",
"address": "",
"companyName": "",
"phoneNumber": ""
},
"billList": [
{
"billId": "OrderID",
"totalAmount": 100000,
"description": "",
"extras": {}
}
],
"extras": {}
}'
$response:
{
"requestId": "LetsChangeItForEachRequest_1615878006714",
"referenceId": "1826709321828577_6887",
"resultCode": 0,
"message": "Success",
"data": {
"target": "https://testing.momo.vn:22447/fi/authorize?r=LetsChangeItForEachRequest&s=gwpayment_dev_LetsChangeItForEachRequest_1615878006714&t=1826709321828577_6887",
"qrCode": "https://testing.momo.vn:22447/fi/gw_payment/authorize/s?r=LetsChangeItForEachRequest&s=gwpayment_dev_LetsChangeItForEachRequest_1615878006714&t=1826709321828577_6887",
"storeUrl": ""
}
}
curl with PGP encrypt
curl -L -X POST 'https://testing.momo.vn:22446/api/gw_payment/init' -H 'Accept: application/pgp-encrypted' -H 'Content-Type: application/pgp-encrypted' -H 'partner-code: gwpayment' --data-raw '-----BEGIN PGP MESSAGE-----
Version: BCPG v1.65
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
+NxjHA==
=3DFl
-----END PGP MESSAGE-----'
$response:
-----BEGIN PGP MESSAGE-----
Version: BCPG v1.65
hQEMA+3PmYCXiyI4AQf+MjhPF45SHzJV6h4eLVYC6bvqDFWkbKXFqochPnF9NdVy
lOWn8/atAKZHhCTJqGQPxAyLW8jfblx2lbKElPRaouYY0YCcziS7sBEvnSK1DcBl
sSUBCI7qiv5iRV+F7FAKgt1bA/TPL6MKHTquT3AsoGgyDDRt7iLQbuI3AtLJQfrG
z7+H5GhJ9mXnaY/XbjMq29w8kN4fEWiJGf1qQ5eM0b1Eo6NVocdNUXhqI4pumRDZ
Bc5NvjZfgFYkOuMaag7MrPUqwUt19+MsYa+KkSFb7967rPHwlapwI2RGNN23qIBl
MJwBKUDYRmSQK1ui5qrnKadIGn9ntfA9SDMF63+HTIUBDANRmJMq4kZPPQEH/3zf
VF73FjY2oAkrquRxLjpq06h3MCmYQaUWBtYo4xPw/PZye5ltY8MLRPKxOvq9eqrI
Taz/G+AGxTGoMIgvkNBAnLE1WIZts3JvoGQeHxOsj31sGk28bSqrqIQQf1/f2IYB
AkbnM+dH8sw3+LRBEyU0/ChtUT6VlMqR5EiGJXqw4dwXEEIF0+B4QgxilQFWOopY
IwLRF12EuRu7Uu3ijkZI7t3Ju8EQJ5jeWoOpsNqFDuEKp8I4HtoFFEixdOS97gna
xterkiI6nJ3eype/q85T9SLmykkhADYnkvp7rtFQzX1Ms9agoPpQ5Y4Jvn1Yc1m2
ExG0RliOICP7BgSJa6yFAQwDrP2jbteVgPIBB/40tc/6tzzURs8XJpv2h5ELb4Jl
S9r99agRqTUJKnujcXDYkms/VtZHkMhyzbdQPe7/IA6Fp4dlW108HcaRjfvGBgse
GmYGPrpcapZoktcxoEhc0qxXg8kNU1gLTPqTAvXpxqT4t9xMN2DK41MqvDFThkSz
YafVNY6etOHyiSawlx3K7u2UnTz+bsqSSEYjF3dOSAU009XokodTUDd26K7sGeEE
7uRQnboXcrYyDHW2QpxX2cW0f6J55uvDRq/ia6DSyA7m7YLFhmxzUY4BWhSSvOXj
gXHeHPIpZHX0wanxABVX2RelwZiEVfAK0wyazk0aFP/tRBnX1VZ9eppp9+16ycGr
fmemrHgrAMqOYEoYGLqxJ7d5/UorrHoTx2OEmSyZ9VwsLOR5/lAodckOLlzb5QTh
PitnCoge3jjkqUBlnB2ExhT1t9dghau34kaSSZQ6yxQA0aGFc6Fr5eJU6dLaugmq
6euZ7ZeiDdXlpKqJiuGaAko8VoobzD14UxkTn+680Ptlp1xdtkmihg+cM0G5IIzk
UyPn/CtNy5GqHJnCgsdK4GS5KaQWmTWYtXqbEYYibexsL6PTE+2fXT1ODmTlgQow
70PvAoIwXqz+c4Ga0aEMVPVAvgXjqjsayp7p3Y7XtGvNegIYe58cVYbByiGaKPqc
8jPDhgz5aoUFfmRE12i8GlxheL3CxwTPPO0w5hc8QpoZaAyYXTlF6a9S5ajoS/xY
syl+5BAU4TPVrRPEr2VN2clVKgtR2hTMRVKM1/IwMv8fM7uYdgh+SuRRtrkMyly+
c+IMJKJ0YXEeJ3HRNWofDDiw+iEFsYh5DPAd93LmKzqRSMWoM8Q09HoJ32febVyE
JA20EUrBOb1ENtWnRqvfnjo4O0LufIR3zHzJQNcvt7BLhVZw3h0P4b/tzHkEjudb
9/Vj+SRsJYuy0x8HEnp+ePDAWXDUC7Wwo3ybzYqtR6veyu4a0kJnvdgdZYkxrZXG
QquXQ6FcGIA4gOx7XBDjhR1DWkR5R3J0Yap32pwhDJrU5PPQJ49EA6IfYJNb0i7u
glXt2R/w2Dx3wkOmlBLU7136EUaGbD1NHvx8i8b97tBYNwtx0hEHP4ONgvNtftxZ
xt/0+ERfcTRMvyEQY0bse9e3D2oFpVYMlDsl9adz5tVlFyBvJP83HCGN3w==
=TPLu
-----END PGP MESSAGE-----
Abtributes
Request Parameters
| Name | Type | R | L | Description | Error |
|---|---|---|---|---|---|
| requestId | String(50) | R | L1 | Unique string for each request | 2003 |
| client | String(20) | R | L1 | webinapp open Momo App by web android_app open Momo App by Android App ios_app open Momo App by iOS App |
2001 |
| debitor | String(20) | L1 | The MoMo Wallet ID do the payment, used to cross-check for the special flow | ||
| callbackUrl | String(100) | L1 | Momo will redirect to it from the MoMo Web/App to push the payment result. | ||
| notifyUrl | String(100) | L1 | Momo will invoke Notification Method from MoMo Backend, otherwise leave it blank | ||
| reference1 | String(50) | R | L1 | It's contract id / bill id etc. (depends on the partner) It's related to the Callback and Notification Method. Info displayed on the Momo App |
2001 |
| reference2 | String(50) | L1 | Extra info for support reference1 (depends on the partner) It's related to the Callback and Notification Method. |
||
| description | String(100) | L1 | Description for this transaction. Info displayed on the Momo App |
||
| totalAmount | Number | R | L2 | Total of totalAmount in billListInfo displayed on the Momo App |
|
| checksumKey | String(50) | R | L1 | Used to check data when Callback | |
| extras | JsonObject | L1 | Used to store extras information | ||
| accountInfo | JsonObject | R | L1 | The contract owner information | 2005 |
| id | String | L2 | Id, depend on partner | ||
| name | String | R | L2 | Holder bill | |
| String | L2 | ||||
| personalId | String | L2 | Personal Id | ||
| dob | String | L2 | Date of birth, format dd-mm-yyyy |
||
| address | String | L2 | Address | ||
| companyName | String | L2 | Company name | ||
| phoneNumber | String | L2 | Phone number | ||
| billList | JsonArray | R | L1 | Used to store bills | |
| billId | String | R | L2 | Bill id | |
| totalAmount | Number | R | L2 | Total Amount of this bill | |
| repaymentPeriod | Number | L2 | Repayment peroid, default -1 |
||
| description | String | L2 | Bill description | ||
| extras | JsonObject | L2 | Bill extras infomation |
Response Params
| Name | Type | R | L | Description |
|---|---|---|---|---|
| requestId | String | R | L1 | Same with request |
| referenceId | String | R | L1 | Unique for each response |
| resultCode | Number | R | L1 | The result code of transaction |
| message | String | R | L1 | The result message, which describes the code |
| data | JsonObject | R | L1 | data exist when resultCode is 0 |
| target | String | R | L2 | Target link, use for redirect to MoMo App/Web |
| qrCode | String | R | L2 | MoMo QR code, use camera scan it to open MoMo App. |
2. Check info
The following endpoint check status of payment request by request id
| SERVER | CLIENT | END POINT | METHOD | HEADERS |
|---|---|---|---|---|
| MOMO | PARTNER | /api/gw_payment/info | POST | Reference to Headers |
TRY IT
curl without PGP encrypt
curl -L -X POST 'https://testing.momo.vn:22446/api/gw_payment/info' -H 'Accept: application/pgp-encrypted' -H 'Content-Type: application/pgp-encrypted' -H 'partner-code: gwpayment_dev' --data-raw '{
"requestId": "LetsChangeItForEachRequest",
"requestIdCheck": "1614927872"
}'
{
"requestId": "1615263370",
"resultCode": 0,
"message": "Success",
"data": {
"requestId": "1614927872",
"reference1": "OrderId",
"reference2": "",
"resultCode": 0,
"resultMessage": "Success",
"totalAmount": 80000,
"amount": 80000,
"creditAmount": 0,
"paymentId": 1234567890,
"paymentDate": "01-01-1970",
"paymentMillisTime": 0,
"billList": [
{
"billId": "OrderId",
"description": "",
"totalAmount": 80000,
"repaymentPeriod": 0,
"extras": {},
"required": []
}
]
}
}
curl with PGP encrypt
curl -L -X POST 'https://testing.momo.vn:22446/api/gw_payment/info' -H 'Accept: application/pgp-encrypted' -H 'Content-Type: application/pgp-encrypted' -H 'partner-code: gwpayment' --data-raw '-----BEGIN PGP MESSAGE-----
Version: BCPG v1.65
hQEMAy0qeEWFdvPfAQgAzgQQQMk0Hgeo85iEKHWPPG02SZk+jLgKLI+48aQsSITu
Q9WnuBljn9jHeryCliv9+lOScrLkuQNt5rmRleMLoRay/EHqZHr7DLTiWzjfQQMB
jiuaGtybrjTZuzcJnFn0bjVkaDoVVRJq1in/3CoV6Ntt2BHc0NdwTzY2XUMrDv28
OI/P0fwaAx9LSQaT4PDHCdgXmxTAtC8hVRV0NYl/8ZbAY2CN+l3vXsyYz8JxIFha
yak0JAeiNk5kFR+JS44tzdSmY5RpSsIA77+rCLVqtvUERlMoWYwoLHLvZVp3c5Px
+wnWlCjX6E9vB5XogA+okBXVRnSXyoyvtnGqWA27IIUBDAOpz8P95mmetAEH/2L9
F7LaqH7U2TysVS+djdrmMe7mumqqbi0kREeMuvf6o7pjcZCdG7aMsUuHozAIiFMx
0wWov8Otqi4Kqmn1aITf+6TC+mvz3HSdjjsRqJM8CnB64313CeXBWeXSRLcNrjhA
2FGTqq/qrYaygVtPAoIu3Z/fu+/xzP+XDaoXLDHf771vJh9W5H/oQfBV+U182u8k
SN4WtNttoQtpGw0XuuWJhxH4lCTByJaWvaQfV67EiqOSjUxM6GtlVm5LTD/Vl+2Z
ptJngkLN/fMdY0NQjSbvxDkgX0VuwyukK7mUi8s5L0KiuGi5oSXyyhznYsIE5BJe
1MHlCbxPrYzmVXW9Q5SFAQwDI7kt/H2R/0MBB/wJCMghLJoLm8PpeCoXnLmvOaBR
51QXnuLpX/Gu92X6+xMxP9Qxs3kGFLIAsSlYEljo6g3JDIo/kc0pl8ZULKIlI2da
gumd5FhBMV5r8bLAmod+vi3zduPoFkmr0PweSKdPLAOeuTJidPdnNdIyTw612m/9
tacr9Xnuy+/OGyhbFKToGCaIdyBi2H+slyDXZq4UvJIhMfEyYasTUY22wZ/w9PfB
K8Vyo9wqi52Mud34DPINiOkOSbvlVgj0EHsGHsXQQv3wNVPpANRkwhjeb1GHPVPW
unBHmDiTrwwucuoK2r2ARHO3MgnoDjA9uZpjKXbETOqwNXA1sWvs9Oh9yXECycD7
tqKQvTqipfttTsB8g7sJ2GtzWP3CI5j9JL0z+nUlq4HTURQTSOwqC8VfppOYTOsg
46qqZ//WnZU2iUCctKzdkW2HP1dTlv+P5GNClnj5jG96ErRz3OjcqB/khBl3rKvr
BZA7yMPf4Qu8l9ux9Hhg3P7aNbjIcUR/m62yjKfuZuEuXlU2fD0H4+IMzrE5iW83
3ourSl8u9HxcwIOc+BPKkhhRQcEX7wgVPSTcJ+MAdeK+VP2NR5Kljwze1BzIEKdA
4s1JtHWBxxQfu+TygPV3QH4n1R/PqQZAbKK0htUV63Q+eFLO/CpHfKnZMiDGcxq3
eZRh9/RYsGfdCUu1k1CNAvHU1gXGIqcVP4vz2QLzmyh07S/XAwjvoKlHfMXG6lYj
iugVwJmrBX7nivedqInzSXv9FABtN7SfBFrfDkb9EQDtLDAMWu0nvfzJZJkucWiZ
7otWHqjlrRqKlaGt4JE9uGvIeRJ/t9YmMPgHPYsmali6/eDGGQ/3qJXVcztZZ9m4
/XRcLVouIot86ea0iGCb3ZV0NVzhIpeQVv4AW+SGZ6oiVh6EfvvGQHSxlqrcniDx
qSINy4EEb2mr94M=
=RRuT
-----END PGP MESSAGE-----'
$response
-----BEGIN PGP MESSAGE-----
Version: BCPG v1.65
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
=/oYH
-----END PGP MESSAGE-----
Attributes
Request params
| Name | Type | R | L | Description | Error code |
|---|---|---|---|---|---|
| requestId | String(50) | R | L1 | Unique string for each request | 2003 |
| requestIdCheck | String(50) | R | L1 | This is the requestId to check, it's the same as the requestId in INIT API |
2008 |
Response params
| Name | Type | R | L | Description |
|---|---|---|---|---|
| requestId | String | R | L1 | Same with request |
| referenceId | String | R | L1 | Unique for each response |
| resultCode | String | R | L1 | Request's result code |
| message | String | R | L1 | Result message |
| data | Object | R | L1 | Object include below information |
| requestId | String | R | L2 | The same with requestId in INIT API |
| reference1 | String | R | L2 | The same with reference1 in INIT API |
| reference2 | String | L2 | The same with reference2 in INIT API |
|
| totalAmount | Number | R | L2 | The same with totalAmount in INIT API |
| amount | Number | R | L2 | Paid amount in MoMo app |
| creditAmount | Number | R | L2 | Total credit amount user has payment (Depend on partner) |
| paymentId | Number | R | L2 | Payment transaction id |
| paymentDate | String | R | L2 | Payment time in MService system |
| paymentMillisTime | Number | R | L2 | Current milli second of payment date |
| billList | Json Object | R | L1 | |
| billId | String | R | L2 | Bill id, in multi-bill case billId is 1 reference1 has multi billId |
| amount | Number | R | L2 | Amount Momo money source |
| creditAmount | Number | R | L2 | Credit amount |
| extras | Json Object | L2 | Extras info |
3. Callback
The following endpoint sends the payment results to the partner via URL, please validate the encryptedData param to
make sure the info received is correct.
| SERVER | CLIENT | END POINT | METHOD |
|---|---|---|---|
| PARTNER | MoMo app/web | PARTNER-CALLBACK-URL?data=QUERY-STRING-BASED64 |
GET |
Sample request
https://sample.partner.url/callback?data=VGhpcyBpcyBzYW1wbGUgYmFzZWQ2NA==
This data param will encrypted Base64 before send to partner in query string
{
"requestId": "1511347353577",
"referenceId": "1511347353577",
"reference1": "REF1_INFOISPLAYINMOOMOAPP",
"reference2": "REF2_OPTIONALBILLID",
"resultCode": 0,
"paymentId": 1511347353577,
"amount": 10000,
"creditAmount": 0,
"encryptedData": "B3ABE5D8C69B38733AD57EA75E83BCAE42BBBBAC75E3A5445862ED2F8A2CD677"
}
Query string with these parameters:
| Name | Type | R | L | Description |
|---|---|---|---|---|
| requestId | String | R | L1 | Same with requestId in Init Payment request |
| reference1 | String | R | L1 | Same with reference1 inInit Payment request |
| reference2 | String | L1 | Same with reference2 in Init Payment request | |
| resultCode | Number | R | L1 | Payment Result code |
| paymentId | Number | R | L1 | Payment ID in MoMo |
| amount | Number | R | L1 | Payment amount |
| creditAmount | Number | R | L1 | Payment credit amount |
| encryptedData | String | R | L1 | All field's values will be encryted by SHA256. Notes: all fields values are appended together without space. |
The encryptedData is:
SHA256(
<value_of_requestId_field>
<value_of_reference1_field>
<value_of_reference2_field>
<value_of_resultCode_field>
<value_of_paymentId_field>
<value_of_amount_field>
<value_of_creditAmount_field>
<value_of_checksumKey_field>
)
4. Payment Notification
The following endpoint push the payment results to partner.
Partner returns the HTTP Status 200 to ensure received payment info.
| SERVER | CLIENT | END POINT | METHOD | HEADERS |
|---|---|---|---|---|
| PARTNER | MOMO | notifyUrl in Init Payment request |
POST | Content-Type application/pgp-encryptedAccept application/pgp-encrypted |
Sample
Sample Request
{
"requestId": "2300699797",
"referenceId": "REF1_EACTJNDPWP",
"reference1": "REF1_EACTJNDPWP",
"reference2": "REF2_WRATJNDPWP",
"amount": 999000,
"creditAmount": 0,
"resultCode": 0,
"resultMessage": "Success",
"paymentId": 2300699797,
"paymentDate": "2019-04-01T10:49:45+07:00",
"paymentMillisTime": 1560233760000
}
Sample response
{
"requestId": "2300699797",
"resultCode": 0,
"resultMessage": "Success",
"referenceId": "MS_12375894762"
}
Attributes
Request Params
| Name | Type | R | L | Description |
|---|---|---|---|---|
| requestId | String(50) | R | L1 | Unique String for each request |
| reference1 | String(50) | R | L1 | It depends on partner |
| reference2 | String(50) | L1 | It depends on partner | |
| amount | Number | R | L1 | Total paid amount |
| creditAmount | Number | R | L1 | Credit amount |
| resultCode | Number | R | L1 | Result of payment transaction |
| resultMessage | String(50) | L1 | Result message, description for resultCode |
|
| paymentId | Number | R | L1 | Unique number for each payment request |
| paymentDate | String(50) | R | L1 | Payment date, format: YYYY-MM-DDThh:mm:ssTZD |
| paymentMillisTime | Number | R | L1 | UNIX time for payment date |
Response Params
| Name | Type | R | L | Description |
|---|---|---|---|---|
| requestId | String(50) | R | L1 | Same with request |
| referenceId | String(50) | R | L1 | Unique for each response |
| resultCode | Number | R | L1 | Result code, partner return it based on Result Code |
| resultMessage | String(100) | R | L1 | Result message |
5. Result Code
Payment Gateway uses conventional MoMo result code to indicate the success or failure of an API request.
| Code | Result message | API | Description |
|---|---|---|---|
| 0 | SUCCESS | All |
The request perform success |
| 2 | INVALID_ENCRYPT_DATA | All |
Error when encrypt data |
| 4 | INVALID_WALLET_ID | PAYMENT-NOTIFY |
|
| 8 | DUPLICATE_REQUEST_ID | All |
The requestId field for each transaction is unique. |
| 9 | INVALID_PARTNER_CODE | All |
The partner-code in Request Header, MoMo will be provide. |
| 1001 | INSUFFICIENT_FUNDS | PAYMENT-NOTIFY CHECK-INFO |
Error when payment in MoMo app, the wallet is insufficient funds |
| 1004 | WALLET_CAP_EXCEEDED | PAYMENT-NOTIFY CHECK-INFO |
Error when payment in MoMo app, the wallet cap exceeded |
| 2001 | INVALID_CLIENT | INIT CHECK-INFO |
The client field invalid |
| 2002 | INVALID_REFERENCE_1 | INIT CHECK-INFO |
The reference1 field invalid |
| 2003 | INVALID_REQUEST_ID | INIT CHECK-INFO |
The requestId field invalid |
| 2004 | INVALID_CHECKSUM_KEY | INIT CHECK-INFO |
The checksumKey field invalid |
| 2005 | INVALID_ACCOUNT_INFO | INIT CHECK-INFO |
The accountInfo field invalid |
| 2006 | INVALID_TOTAL_AMOUNT | INIT CHECK-INFO PAYMENT |
The totalAmount value invalid |
| 2007 | INVALID_BILL_TOTAL_AMOUNT | INIT CHECK-INFO |
The totalAmount in bill info not equal totalAmount outside |
| 2008 | INVALID_CHECK_REQUEST_ID | CHECK-INFO |
The requestIdCheck field invalid |
| 2009 | TRANSACTION_EXPIRED | CHECK-INFO CALL-BACK |
The init transaction expired |
| 2010 | TRANSACTION_NOT_FOUND | CHECK-INFO |
The transaction not found |
| 2011 | TRANSACTION_CANCELED_BY_USER | CHECK-INFO |
The user cancel transaction in MoMo web |
| 2013 | INVALID_BILL_INFO | INIT |
|
| 2014 | OVER_TRANS_IN_MONTHS | INIT |
MoMo server check number trans in months |
| 2015 | OVER_TRANS_IN_DAYS | INIT |
MoMo server check number trans in days |