MangoPay nodejs APIv2 wrapper
This is not the official Mangopay Node library.
At this time they don't have one, so we'll see what's next.
It's here for a personal use and inspired by Stripe node api wrapper.
Feel free to use & contribute
Installation
npm install mangopay
Documentation
Documentation is available at http://docs.mangopay.com/api-references
API Overview
Every resource is accessed via your mango
instance:
var mango = require ( ' mangopay ' ) ( {
username : ' username ' ,
password : ' passphrase ' ,
production : false
} )
Every resource method accepts an optional callback as the last argument:
mango . card . create ( {
UserId : ' 2565355 ' ,
CardNumber : ' 4970100000000154 ' ,
CardExpirationDate : ' 0216 ' ,
CardCvx : ' 123 ' ,
} , function ( err , card , res ) {
err ;
card ;
res ;
} )
The callback gets called with three arguments: err
, data
and the raw response
object. In case of an error, the data and response are still passed because the MangoPay API returns data together with errors, e.g. when attempting to retrieve a failed payOut.
Methods that list items (cards, transactions, users, etc...) can paginate, filter and sort fields using a special $query
parameter:
mango . user . transactions ( {
UserId : " 123456789 " ,
$query : {
Sort : " LastName:asc " ,
page : 1 ,
per_page : 100
}
} ,
function ( err , transactions , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' transactions ' , transactions ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
or alternatively you can pass a String: $query: "Sort=LastName:asc&page=1&per_page=100"
More information on the specific documentation page
Available resources & methods
Where you see params
it is a plain JavaScript object, e.g. { Email: 'foo@example.com' }
Create natural user:
mango . user . create ( {
FirstName : " Victor "
, LastName : " Hugo "
, Birthday : 1300186358
, Nationality : " FR "
, CountryOfResidence : " FR "
, Occupation : " Writer "
, IncomeRange : " 6 "
, ProofOfIdentity : " "
, ProofOfAddress : " "
, PersonType : " NATURAL "
, Email : " victor@hugo.com "
, Tag : " custom tag "
, Address : {
AddressLine1 : " 4101 Reservoir Rd NW "
, AddressLine2 : " "
, City : " Washington "
, Region : " District of Columbia "
, PostalCode : " 20007 "
, Country : " US "
, }
} , function ( err , user , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' user ' , user ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Create natural user and wallet:
mango . user . signup ( {
FirstName : " Victor " ,
LastName : " Hugo " ,
Birthday : 1300186358 ,
Nationality : " FR " ,
CountryOfResidence : " FR " ,
Address : " 1 rue des Misérables, Paris " ,
Occupation : " Writer " ,
IncomeRange : " 6 " ,
ProofOfIdentity : null ,
ProofOfAddress : null ,
PersonType : " NATURAL " ,
Email : " victor@hugo.com " ,
Tag : " custom tag " ,
} , function ( err , user , wallet ) {
console . log ( ' err ' , err ) ;
console . log ( ' user ' , user ) ;
console . log ( ' wallet ' , wallet ) ;
} ) ;
Fetch natural user:
mango . user . fetch ( {
Id : " 123456789 " ,
} , function ( err , user , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' user ' , user ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Update natural user:
mango . user . update ( {
Id : " 123456789 " ,
} , function ( err , user , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' user ' , user ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
List natural users:
mango . user . list ( function ( err , users ) {
console . log ( users ) ;
} ) ;
Create legal user:
mango . user . createLegal ( {
Name : ' mycompany.com ' ,
Email : ' info@mycompany.com ' ,
LegalPersonType : ' BUSINESS ' ,
LegalRepresentativeFirstName : ' John ' ,
LegalRepresentativeLastName : ' Doe ' ,
LegalRepresentativeEmail : ' john_doe@mycompany.es ' ,
HeadquartersAddress : ' Canal Street, Madrid, Spain ' ,
LegalRepresentativeAdress : ' Canal Street, Madrid, Spain ' ,
LegalRepresentativeBirthday : moment ( ' 300681 ' , ' DDMMYY ' ) . unix ( ) ,
LegalRepresentativeCountryOfResidence : ' ES ' ,
LegalRepresentativeNationality : ' ES ' ,
} , function ( err , user , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' user ' , user ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Fetch legal user:
mango . user . fetchLegal ( {
Id : " 123456789 " ,
} , function ( err , user , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' user ' , user ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
List all cards belonging to a user:
mango . user . cards ( {
UserId : " 123456789 " ,
} , function ( err , cards , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' cards ' , cards ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
List all wallets belonging to a user:
mango . user . wallets ( {
UserId : " 123456789 " ,
} , function ( err , wallets , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' wallets ' , wallets ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
List all transactions belonging to a user:
mango . user . transactions ( {
UserId : " 123456789 " ,
} , function ( err , transactions , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' transactions ' , transactions ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
List all bank accounts linked to a user:
mango . user . banks ( {
UserId : " 123456789 " ,
} , function ( err , bankaccounts , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' bankaccounts ' , bankaccounts ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Create wallet for a user:
mango . wallet . create ( {
Owners : [ " 1167492 " ] ,
Description : " A very cool wallet " ,
Currency : " EUR " ,
Tag : " your custom tag "
} , function ( err , wallet , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' wallet ' , wallet ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Fetch wallet by id:
mango . wallet . fetch ( {
Id : " 1167492 " ,
} , function ( err , wallet , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' wallet ' , wallet ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Transfer e-money from a wallet to another wallet:
mango . wallet . transfer ( {
AuthorId : " 1167495 " ,
DebitedFunds : { Currency : " EUR " , Amount : 1000 } ,
Fees : { Currency : " EUR " , Amount : 100 } ,
DebitedWalletID : " 1167496 " ,
CreditedWalletID : " 1167504 " ,
CreditedUserId : " 1167502 " ,
Tag : " DefaultTag "
} , function ( err , transfer , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' transfer ' , transfer ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
For a complete list of available parameters check http://docs.mangopay.com/api-references/transfers/
Fetch transfer:
mango . wallet . fetchTransfer ( {
Id : " 1167492 " ,
} , function ( err , transfer , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' transfer ' , transfer ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Fetch all transactions for a given wallet:
mango . wallet . transactions ( {
Id : " 123456789 " ,
} , function ( err , transaction , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' transaction ' , transcation ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Create refund:
mango . wallet . createRefund ( {
Id : " 1122477 " ,
AuthorId : " 1167492 " ,
} , function ( err , refund , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' refund ' , refund ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Fetch refund:
mango . wallet . fetchRefund ( {
Id : " 1348477 " ,
} , function ( err , refund , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' refund ' , refund ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Register a card:
mango . card . create ( {
UserId : ' 2565355 ' ,
CardNumber : ' 4970100000000154 ' ,
CardExpirationDate : ' 0216 ' ,
CardCvx : ' 123 ' ,
} , function ( err , card , res ) {
err ;
card ;
res ;
} )
Init two-step card registration process:
mango . card . initRegistration ( {
UserId : ' 2565355 ' ,
Currency : " EUR "
} , function ( err , registration , res ) {
err ;
registration ;
res ;
} )
Fetch a registered card:
mango . card . fetch ( {
Id : ' 2565355 ' ,
} , function ( err , card , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' card ' , card ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Update a registered card:
The only editable parameter is Active
, that can be switched from true to false and this action is irreversible.
mango . card . update ( {
Id : " 2565355 " ,
} , function ( err , card , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' card ' , card ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Register a bank account for a user:
mango . bank . create ( {
OwnerName : " Victor Hugo " ,
UserId : " 1345678 " ,
Type : " IBAN " ,
OwnerAddress : " 1 rue des Misérables " ,
IBAN : " FR3020041010124530725S03383 " ,
BIC : " CRLYFRPP "
} , function ( err , bankaccount , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' bankaccount ' , bankaccount ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Get a bank account:
mango . bank . fetch ( {
UserId : ' 2565355 ' ,
BankId : ' 1234566 ' ,
} , function ( err , bankaccount , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' bankaccount ' , bankaccount ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Withdraw money from a wallet to a bank account:
mango . bank . wire ( {
AuthorId : " 12567875 " ,
DebitedWalletId : " 12449234 " ,
DebitedFunds : {
Currency : " EUR " ,
Amount : " 1000 "
} ,
Fees : {
Currency : " EUR " ,
Amount : " 100 "
} ,
BankAccountId : " 12449209 " ,
BIC : " CRLYFRPP "
} , function ( err , wire , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' wire ' , wire ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Get wire:
mango . bank . fetchWire ( {
Id : ' 2565355 ' ,
} , function ( err , wire , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' wire ' , wire ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Update a registered bank account:
The only editable parameter is Active
, that can be switched from true to false and this action is irreversible.
mango . bank . update ( {
Id : " 2565355 " ,
} , function ( err , bank , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' bank ' , bank ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
author
document
create(params)
createWithFile(params)
addFile(params)
fetch(params)
update(params)
payin
Create a direct payin by tokenized card:
mango . payin . createByToken ( {
AuthorId : " 1167492 " ,
CreditedUserId : " 1167502 " ,
DebitedFunds : {
Currency : " EUR " ,
Amount : 10000
} ,
Fees : {
Currency : " EUR " ,
Amount : 100
} ,
CreditedWalletId : " 1167810 " ,
CardId : " 1262419 " ,
SecureMode : " DEFAULT " ,
SecureModeReturnURL : " https://www.mysite.com " ,
Tag : " payin "
} , function ( err , payin , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' payin ' , payin ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Create a direct payin by card:
mango . payin . createByCard ( {
AuthorId : " 1167492 " ,
CreditedUserId : " 1167502 " ,
DebitedFunds : {
Currency : " EUR " ,
Amount : 10000
} ,
DeclaredFees : {
Currency : " EUR " ,
Amount : 100
} ,
CreditedWalletId : " 1167810 " ,
ReturnURL : " https://www.mysite.com " ,
Culture : " nl " ,
CardType : " IDEAL " ,
Tag : " payin "
} , function ( err , payin , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' payin ' , payin ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Fetch payin:
mango . payin . fetch ( {
Id : " 1122477 " ,
} , function ( err , payin , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' payin ' , payin ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Create refund:
mango . payin . createRefund ( {
Id : " 1122477 " ,
AuthorId : " 1167492 " ,
} , function ( err , refund , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' refund ' , refund ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Fetch refund:
mango . payin . fetchRefund ( {
Id : " 1348477 " ,
} , function ( err , refund , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' refund ' , refund ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Create a hook:
mango . hook . create ( {
Url : " https://my_notifications_end_point.com " ,
EventType : " PAYIN_NORMAL_SUCCEDED " ,
Tag : " hook "
} , function ( err , hook , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' hook ' , hook ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
List all hooks:
mango . hook . list ( function ( err , hooks , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' hooks ' , hooks ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Fetch hook:
mango . hook . fetch ( {
Id : " 12345678 "
} , function ( err , hook , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' hook ' , hook ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
update hook:
mango . hook . update ( {
Id : " 12345678 " ,
Status : " DISABLED "
} , function ( err , hook , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' hook ' , hook ) ;
console . log ( ' res ' , res . statusCode ) ;
} )
Idempotency support
To leverage Mangopay's idempotency support, you can specify an $idempotencyKey
parameter:
mango . user . update ( {
Id : " 123456789 " ,
$idempotencyKey : " a_valid_idempotency_key "
} , function ( err , user , res ) {
console . log ( ' err ' , err ) ;
console . log ( ' user ' , user ) ;
console . log ( ' res ' , res . statusCode ) ;
} ) ;
Note that the idempotency key must be between 16 and 36 characters and contain only alphanumeric characters or dashes.
Test
npm test
don't forget to provide credentials in test/__credentials.json
Todos
oauth implementation
user methods only works for "Natural Users"
exhaustive api methods
...