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
npm install mangopay
Documentation is available at http://docs.mangopay.com/api-references
Every resource is accessed via your mango
instance:
var mango = require('mangopay')({
username: 'username',
password: 'passphrase',
production: false
})
// mango.{ RESOURCE_NAME }.{ METHOD_NAME }()
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; // mango card object
res; // raw 'http' response object => res.statusCode === 200
})
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
Where you see params
it is a plain JavaScript object, e.g. { Email: 'foo@example.com' }
- user
Create natural user:
mango.user.create({
FirstName: "Victor", // Required
LastName: "Hugo", // Required
Birthday: 1300186358, // Required
Nationality: "FR", // Required, default: 'FR'
CountryOfResidence: "FR", // Required, default: '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, res){
console.log('err', err);
console.log('user', user);
console.log('res', res.statusCode);
});
Create natural user and wallet:
mango.user.signup({
FirstName: "Victor", // Required
LastName: "Hugo", // Required
Birthday: 1300186358, // Required
Nationality: "FR", // Required, default: 'FR'
CountryOfResidence: "FR", // Required, default: '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, wallet, res){
console.log('err', err);
console.log('wallet', wallet);
console.log('res', res.statusCode);
});
Fetch natural user:
mango.user.fetch({
Id: "123456789", // Required
}, 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", // Required
// all the fields to be updated
}, 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", // Required
}, 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", // Required
}, 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", // Required
}, 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", // Required
}, 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", // Required
}, function(err, bankaccounts, res){
console.log('err', err);
console.log('bankaccounts', bankaccounts);
console.log('res', res.statusCode);
});
- wallet
Create wallet for a user:
mango.wallet.create({
Owners: ["1167492"], // Required
Description: "A very cool wallet", // Required, default: 'wallet'
Currency: "EUR", // Required, default: '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", // Required
}, 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", // Required
DebitedFunds: {Currency : "EUR", Amount : 1000}, // Required
Fees : {Currency : "EUR", Amount : 100}, // Required, default 'EUR' and 0
DebitedWalletID : "1167496", // Required (Where the funds are held before the transfer)
CreditedWalletID : "1167504", // Required (Where the funds will be held after the transfer)
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", // Required
}, 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", // Required
}, function(err, transaction, res){
console.log('err', err);
console.log('transaction', transcation);
console.log('res', res.statusCode);
});
Create refund:
mango.wallet.createRefund({
Id: "1122477", // Required (The ID of the Transfer)
AuthorId: "1167492", // Required (The user ID of the Transfer transaction’s author)
}, function(err, refund, res){
console.log('err', err);
console.log('refund', refund);
console.log('res', res.statusCode);
})
Fetch refund:
mango.wallet.fetchRefund({
Id: "1348477", // Required (The ID of the Refund)
}, function(err, refund, res){
console.log('err', err);
console.log('refund', refund);
console.log('res', res.statusCode);
})
- card
Register a card:
mango.card.create({
UserId: '2565355',
CardNumber: '4970100000000154',
CardExpirationDate: '0216',
CardCvx: '123',
}, function(err, card, res){
err;
card; // mango card object
res; // raw 'http' response object => res.statusCode === 200
})
Init two-step card registration process:
mango.card.initRegistration({
UserId: '2565355',
Currency: "EUR"
}, function(err, registration, res){
err;
registration; // mango registration object
res; // raw 'http' response object => res.statusCode === 200
})
Fetch a registered card:
mango.card.fetch({
Id: '2565355', // Required
}, 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", // Required
}, function(err, card, res){
console.log('err', err);
console.log('card', card);
console.log('res', res.statusCode);
});
- bank
Register a bank account for a user:
mango.bank.create({
OwnerName: "Victor Hugo", // Required
UserId: "1345678", // Required
Type: "IBAN", // Required, Default: 'IBAN'
OwnerAddress: "1 rue des Misérables", // Required
IBAN: "FR3020041010124530725S03383", // Required
BIC: "CRLYFRPP" // Required
}, 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', // Required
BankId: '1234566', // Required
}, 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", // Required
DebitedWalletId:"12449234", // Required
DebitedFunds:{ // Required
Currency:"EUR",
Amount:"1000"
},
Fees:{ // Required, Default: 'EUR', 0
Currency:"EUR",
Amount:"100"
},
BankAccountId:"12449209", // Required
BIC: "CRLYFRPP" // Required
}, function(err, wire, res){
console.log('err', err);
console.log('wire', wire);
console.log('res', res.statusCode);
})
Get wire:
mango.bank.fetchWire({
Id: '2565355', // Required
}, function(err, wire, res){
console.log('err', err);
console.log('wire', wire);
console.log('res', res.statusCode);
})
-
author
create(params)
-
document
create(params)
createPage(params)
fetch(params)
update(params)
-
payin
Create a direct payin by tokenized card:
mango.payin.createByToken({
AuthorId: "1167492", // Required (The user ID of the Payin transaction’s author)
CreditedUserId : "1167502", // Required (The ID of the owner of the credited wallet)
DebitedFunds: { // Required
Currency: "EUR",
Amount: 10000
},
Fees: { // Required
Currency: "EUR",
Amount: 100
},
CreditedWalletId: "1167810", // Required (The ID of the credited wallet)
CardId: "1262419", // Required
SecureMode:"DEFAULT",
SecureModeReturnURL:"https://www.mysite.com",
Tag: "payin" // Required
}, function(err, payin, res){
console.log('err', err);
console.log('payin', payin);
console.log('res', res.statusCode);
})
Fetch payin:
mango.payin.fetch({
Id: "1122477", // Required (The ID of the Payin)
}, function(err, payin, res){
console.log('err', err);
console.log('payin', payin);
console.log('res', res.statusCode);
})
Create refund:
mango.payin.createRefund({
Id: "1122477", // Required (The ID of the Payin)
AuthorId: "1167492", // Required (The user ID of the Payin transaction’s author)
}, function(err, refund, res){
console.log('err', err);
console.log('refund', refund);
console.log('res', res.statusCode);
})
Fetch refund:
mango.payin.fetchRefund({
Id: "1348477", // Required (The ID of the Refund)
}, function(err, refund, res){
console.log('err', err);
console.log('refund', refund);
console.log('res', res.statusCode);
})
- hook
Create a hook:
mango.hook.create({
Url: "https://my_notifications_end_point.com", // Required
EventType: "PAYIN_NORMAL_SUCCEDED", // Required
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);
})
npm test
don't forget to provide credentials in test/__credentials.json
- oauth implementation
- user methods only works for "Natural Users"
- exhaustive api methods
- ...