moip-sdk-node-ts
Version:
Moip v2 API wrapper
1,188 lines (1,048 loc) • 24.2 kB
Markdown
<img src="https://gist.githubusercontent.com/joaolucasl/00f53024cecf16410d5c3212aae92c17/raw/1789a2131ee389aeb44e3a9d5333f59cfeebc089/moip-icon.png" align="right" />
# Moip SDK Node TS
> The easiest way and fastest way to integrate Moip to your Node application
> Node.js module to integrate Moip v2 and subscriptions API
**Summary**
- [Installing](#installing)
- [Getting started](#getting-started)
- [Moip v2 Examples](#moip-v2-examples):
- [Customers](#customers)
- [Create](#create)
- [Get](#get)
- [Query](#query)
- [Add a credit card to a Customer](#add-a-credit-card-to-a-customer)
- [Remove a credit card from a Customer](#remove-a-credit-card-from-a-customer)
- [Get all](#get-all)
- [Orders](#orders)
- [Create](#create-1)
- [Get](#get-1)
- [Query](#query-1)
- [Get all](#get-all-1)
- [Payments](#payments)
- [Create a credit card payment (using credit card hash)](#create-a-credit-card-payment-using-credit-card-hash)
- [Create a Boleto payment](#create-a-boleto-payment)
- [Create a payment with pre-authorization](#create-a-payment-with-pre-authorization)
- [Create a payment with escrow](#create-a-payment-with-escrow)
- [Capturing a payment with pre-authorization](#capturing-a-payment-with-pre-authorization)
- [Canceling a payment with pre-authorization](#canceling-a-payment-with-pre-authorization)
- [Releasing the escrow](#releasing-the-escrow)
- [Get (details of a payment)](#get-details-of-a-payment)
- [Refunds](#refunds)
- [Create a payment refund](#create-a-payment-refund)
- [Create a payment partial refund](#create-a-payment-partial-refund)
- [Create an order refund](#create-an-order-refund)
- [Get Refund](#get-refund)
- [List Payment Refunds](#list-payment-refunds)
- [List Order Refunds](#list-order-refunds)
- [Notification Preferenes](#notification-preferences)
- [Create](#create-2)
- [Get](#get-2)
- [Remove](#remove)
- [Get all](#get-all-2)
- [Moip Connect](#moip-connect)
- [Ask for OAuth permission](#ask-for-oauth-permission)
- [Generate access token OAuth](#generate-access-token-oauth)
- [Multiorder](#multiorder)
- [Create Multiorder](#create-multiorder)
- [Get Multiorder](#get-multiorder)
- [Multipayment](#multipayment)
- [Create Multipayment](#create-multipayment)
- [Get Multipayment](#get-multipayment)
- [Account](#account)
- [Create](#create-3)
- [Get](#get-3)
- [Check Existence](#check-existence)
- [Bank Account](#bank-account)
- [Create](#create-4)
- [Get](#get-4)
- [Get all](#get-all-3)
- [Remove](#remove-1)
- [Balance](#balance)
- [Get balance](#get-balance)
- [Transfers](#transfers)
- [Create transfer](#create-transfer)
- [Get transfer](#get-transfer)
- [Get all transfers](#get-all-transfers)
- [Webhooks](#webhooks)
- [Get](#get-5)
- [Query](#query-2)
- [Get all](#get-all-4)
- [API Reference](#api-reference)
- [Useful Links](#useful-links)
- [License](#license)
- [Contributors](#contributors)
# Installing
Yarn:
```
yarn add moip-sdk-node-ts
```
# Getting started
[Prerequisite - Create an app (access token)](https://documentao-moip.readme.io/v2.0/reference#1-criar-um-app)
```javascript
import moipSdk from "moip-sdk-node-ts";
const moip = moipSdk.connect({
accessToken: "your-access-token",
// token: 'your-token',
// key: 'your-key',
production: false,
});
```
To authenticate using Basic authorization, you can pass a `token` and `key` as an argument instead of `accessToken`.
# Moip v2 Examples
## Customers
#### Create
```javascript
moip.customer
.create({
ownId: "1521656695",
fullname: "Jose Silva",
email: "jose_silva0@email.com",
birthDate: "1988-12-30",
taxDocument: {
type: "CPF",
number: "22222222222",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "66778899",
},
shippingAddress: {
city: "Sao Paulo",
complement: "8",
district: "Itaim",
street: "Avenida Faria Lima",
streetNumber: "2927",
zipCode: "01234000",
state: "SP",
country: "BRA",
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Get
```javascript
moip.customer
.getOne(customerId)
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Query
```javascript
// query example
// See https://dev.moip.com.br/reference#filtros-de-busca
const queryObj = {
limit: 14,
offset: 0,
};
moip.customer
.query(queryObj)
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Add a credit card to a Customer
```javascript
moip.customer
.createCreditCard(customerId, {
method: "CREDIT_CARD",
creditCard: {
expirationMonth: "05",
expirationYear: "22",
number: "5555666677778884",
cvc: "123",
holder: {
fullname: "Jose Portador da Silva",
birthdate: "1988-12-30",
taxDocument: {
type: "CPF",
number: "33333333333",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "66778899",
},
},
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Remove a credit card from a Customer
```javascript
moip.customer
.removeCreditCard(creditcardId)
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Get all
```javascript
moip.customer
.getAll()
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
## Orders
#### Create
```javascript
moip.order
.create({
ownId: "1521656695",
amount: {
currency: "BRL",
subtotals: {
shipping: 1000,
},
},
items: [
{
product: "Descrição do pedido",
quantity: 1,
detail: "Mais info...",
price: 1000,
},
],
customer: {
ownId: "1521656726",
fullname: "Jose Silva",
email: "jose_silva0@email.com",
birthDate: "1988-12-30",
taxDocument: {
type: "CPF",
number: "22222222222",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "66778899",
},
shippingAddress: {
street: "Avenida Faria Lima",
streetNumber: 2927,
complement: 8,
district: "Itaim",
city: "Sao Paulo",
state: "SP",
country: "BRA",
zipCode: "01234000",
},
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Get
```javascript
moip.order
.getOne("ORD-SFGB23X8WAVQ")
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Query
```javascript
// query example
// See https://dev.moip.com.br/reference#filtros-de-busca
const objQuery = {
limit: 15,
offset: 0,
filters: {
status: {
in: "PAID,WAITING",
},
},
};
moip.order
.query(objQuery)
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Get all
```javascript
moip.order
.getAll()
.then((response) => {
console.log(response);
})
.then((err) => {
console.log(err);
});
```
## Payments
#### Create a credit card payment (using credit card hash)
```javascript
moip.payment
.create("ORD-SFGB23X8WAVQ", {
installmentCount: 1,
fundingInstrument: {
method: "CREDIT_CARD",
creditCard: {
hash: "Credit Card HASH -> generated using the JS encryption SDK",
holder: {
fullname: "Jose Santos",
birthdate: "1980-01-02",
taxDocument: {
type: "CPF",
number: "12345679891",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "25112511",
},
},
},
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Create a Boleto payment
```javascript
moip.payment
.create("ORD-SFGB23X8WAVQ", {
installmentCount: 1,
fundingInstrument: {
method: "BOLETO",
boleto: {
expirationDate: "2017-09-30",
instructionLines: {
first: "Primeira linha do boleto",
second: "Segunda linha do boleto",
third: "Terceira linha do boleto",
},
logoUri: "https://sualoja.com.br/logo.jpg",
},
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Create a payment with pre-authorization
To create a payment with pre-authorization you only have to add a `delayCapture` attribute to any payment method (credit card, boleto or online bank debit). See the example below with a credit card payment:
```javascript
moip.payment
.create("ORD-SFGB23X8WAVQ", {
installmentCount: 1,
delayCapture: true,
fundingInstrument: {
method: "CREDIT_CARD",
creditCard: {
hash: "Credit Card HASH -> generated using the JS encryption SDK",
holder: {
fullname: "Jose Santos",
birthdate: "1980-01-02",
taxDocument: {
type: "CPF",
number: "12345679891",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "25112511",
},
},
},
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Create a payment with escrow
To create a payment with escrow you only have to add the node `escrow` with an attribute `description`:
```javascript
moip.payment
.create("ORD-SFGB23X8WAVQ", {
installmentCount: 1,
escrow: {
description: "Teste escrow",
},
fundingInstrument: {
method: "CREDIT_CARD",
creditCard: {
hash: "Credit Card HASH -> generated using the JS encryption SDK",
holder: {
fullname: "Jose Santos",
birthdate: "1980-01-02",
taxDocument: {
type: "CPF",
number: "12345679891",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "25112511",
},
},
},
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Capturing a payment with pre-authorization
```javascript
moip.payment
.preAuthorizationCapture("PAY-6PYBC8E93M2L")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Canceling a payment with pre-authorization
```javascript
moip.payment
.preAuthorizationCancel("PAY-6PYBC8E93M2L")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
### Releasing the escrow
```javascript
moip.escrow
.release("ECW-6SCRX0LE4PPW")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Get (details of a payment)
```javascript
moip.payment
.getOne("PAY-6PYBC8E93M2L")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
## Refunds
#### Create a payment refund
```javascript
moip.payment.refunds
.create("PAY-3GALBSZIUSBE")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Create a payment partial refund
```javascript
moip.payment.refunds
.create("PAY-3GALBSZIUSBE", {
amount: 100,
})
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Create an order refund
```javascript
moip.order.refunds
.create("ORD-4GALBSZIUSBE")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Get Refund
```javascript
moip.refund
.get("REF-1HI7RBLWH0CZ")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### List Payment Refunds
```javascript
moip.payment.refunds
.get("PAY-3GALBSZIUSBE")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### List Order Refunds
```javascript
moip.order.refunds
.get("ORD-4GALBSZIUSBE")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
## Notification Preferences
#### Create
```javascript
moip.notification
.create({
events: ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"],
target: "https://requestb.in/17ndz451",
media: "WEBHOOK",
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Get
```javascript
moip.notification.getOne("NPR-1231231231").then((response) => {
console.log(response.body);
});
```
#### Remove
```javascript
moip.notification.remove("NPR-1231231231").then((response) => {
console.log(response);
});
```
#### Get all
```javascript
moip.notification.getAll().then((response) => {
console.log(response.body);
});
```
## Moip Connect
#### Ask for OAuth permission
To ask for OAuth permission for a merchant, you need to redirect them to a page in which they will log in with their Moip credentials to authorize your access to their account.
The complete list of available scopes for permission is available [in our official documentation here](https://dev.moip.com.br/v2.0/reference#section-scopes-dispon%C3%ADveis).
```javascript
moip.connect
.getAuthorizeUrl({
clientId: "APP-XXXXXXXXXXXX",
redirectUri: "https://url_registered.in.yourapp",
scopes: ["RECEIVE_FUNDS", "REFUND"],
})
.then((url) => {
console.log(url);
})
.catch((err) => {
console.log(err);
});
```
#### Generate access token OAuth
Once the merchant has given you permission, you need to generate their `access token` from the code returned to your `redirect_uri`.
```javascript
moip.connect
.generateToken({
clientId: "APP-XXXXXXXXXXXX",
redirectUri: "https://url_registered.in.yourapp",
clientSecret: "the secret token returned when you created your APP",
grantType: "authorization_code",
code: "the code returned to your redirect_uri after seller authorized",
})
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
## Multiorder
#### Create Multiorder
```javascript
moip.multiorder
.create({
ownId: "your_own_id",
orders: [
{
ownId: "your_own_id",
amount: {
currency: "BRL",
subtotals: {
shipping: 2000,
},
},
items: [
{
product: "Camisa Verde e Amarelo - Brasil",
quantity: 1,
detail: "Seleção Brasileira",
price: 2000,
},
],
customer: {
fullname: "Joao Sousa",
email: "joao.sousa@email.com",
birthDate: "1988-12-30",
taxDocument: {
type: "CPF",
number: "22222222222",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "66778899",
},
shippingAddress: {
street: "Avenida Faria Lima",
streetNumber: 2927,
complement: 8,
district: "Itaim",
city: "Sao Paulo",
state: "SP",
country: "BRA",
zipCode: "01234000",
},
},
receivers: [
{
type: "PRIMARY",
moipAccount: {
id: "MPA-VB5OGTVPCI52",
},
},
],
},
{
ownId: "your_own_id",
amount: {
currency: "BRL",
subtotals: {
shipping: 3000,
},
},
items: [
{
product: "Camisa Preta - Alemanha",
quantity: 1,
detail: "Camiseta da Copa 2014",
price: 1000,
},
],
customer: {
fullname: "Joao Sousa",
email: "joao.sousa@email.com",
birthDate: "1988-12-30",
taxDocument: {
type: "CPF",
number: "22222222222",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "66778899",
},
shippingAddress: {
street: "Avenida Faria Lima",
streetNumber: 2927,
complement: 8,
district: "Itaim",
city: "Sao Paulo",
state: "SP",
country: "BRA",
zipCode: "01234000",
},
},
receivers: [
{
type: "PRIMARY",
moipAccount: {
id: "MPA-IFYRB1HBL73Z",
},
},
{
type: "SECONDARY",
feePayor: false,
moipAccount: {
id: "MPA-KQB1QFWS6QNM",
},
amount: {
fixed: 55,
},
},
],
},
],
})
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
#### Get Multiorder
```javascript
moip.multiorder
.getOne("MOR-NUU8VMJ0QPUP")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
## Multipayment
#### Create Multipayment
```javascript
moip.multipayment
.create("MOR-NUU8VMJ0QPUP", {
installmentCount: 1,
fundingInstrument: {
method: "CREDIT_CARD",
creditCard: {
hash: "Credit Card HASH -> generated using the JS encryption SDK",
holder: {
fullname: "Jose Santos",
birthdate: "1980-01-02",
taxDocument: {
type: "CPF",
number: "12345679891",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "25112511",
},
},
},
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Get Multipayment
```javascript
moip.multipayment
.getOne("MPY-6W6DILA4BZ1X")
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
## Account
#### Create
```javascript
moip.account
.create({
email: {
address: "dev.moip@labs.moip.com.br",
},
person: {
name: "Runscope",
lastName: "Random 9123",
taxDocument: {
type: "CPF",
number: "123.456.798-91",
},
identityDocument: {
type: "RG",
number: "434322344",
issuer: "SSP",
issueDate: "2000-12-12",
},
birthDate: "1990-01-01",
phone: {
countryCode: "55",
areaCode: "11",
number: "965213244",
},
address: {
street: "Av. Brigadeiro Faria Lima",
streetNumber: "2927",
district: "Itaim",
zipCode: "01234-000",
city: "São Paulo",
state: "SP",
country: "BRA",
},
},
type: "MERCHANT",
transparentAccount: false,
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Get
```javascript
moip.account
.getOne(accountId)
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Check Existence
Verify if an account already exists through the `e-mail` or `tax document`
```javascript
moip.account
.exists({
email: "integracao@labs.moip.com.br",
// tax_document: 880.956.367-03
})
.then(() => {
console.log("If here, the account exists");
})
.catch(() => {
console.log("If here, the account does not exist");
});
```
## Bank Account
#### Create
```javascript
moip.bankAccount
.create(moipAccountId, {
bankNumber: "237",
agencyNumber: "12345",
agencyCheckNumber: "0",
accountNumber: "12345678",
accountCheckNumber: "7",
type: "CHECKING",
holder: {
taxDocument: {
type: "CPF",
number: "622.134.533-22",
},
fullname: "Demo Moip",
},
})
.then((response) => {
console.log(response.body);
})
.catch((response) => {
console.log(response.body);
});
```
#### Get
```javascript
moip.bankAccount
.getOne(bankAccountId)
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Get all
```javascript
moip.bankAccount
.getAll(moipAccountId)
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Remove
```javascript
moip.bankAccount
.remove(bankAccountId)
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
## Balance
#### Get balance
```javascript
moip.balance
.getOne()
.then((response) => {
console.log(response);
})
.catch((err) => {
console.log(err);
});
```
## Transfers
#### Create transfer
```javascript
moip.transfer
.create({
amount: 500,
transferInstrument: {
method: "BANK_ACCOUNT",
bankAccount: {
type: "CHECKING",
bankNumber: 1,
agencyNumber: 1111,
agencyCheckNumber: 2,
accountNumber: 9999,
accountCheckNumber: 8,
holder: {
fullname: "Nome do Portador",
taxDocument: {
type: "CPF",
number: "22222222222",
},
},
},
},
})
.then((response) => {
console.log(response.body);
})
.catch((response) => {
console.log(response.body);
});
```
#### Get transfer
```javascript
moip.transfer
.getOne(transferId)
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Get all transfers
```javascript
moip.transfer
.getAll()
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
## Webhooks
#### Get
```javascript
moip.webhook
.getOne(webhookId)
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
#### Query
```javascript
//query example
// See https://dev.moip.com.br/reference#consultar-webhook-enviado
const queryObj = {
limit: 4,
offset: 0,
event: 'ORDER.CREATED'
resourceId: 'the_resource_id'
}
moip.webhook.query(queryObj)
.then((response) => {
console.log(response.body)
}).catch((err) => {
console.log(err)
})
```
#### Get all
```javascript
moip.webhook
.getAll()
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
```
## API Reference
[Official API Reference](https://dev.moip.com.br/v2.0/reference)
[Official Documentation](https://dev.moip.com.br/docs)
## Useful Links
[Credit card test numbers](https://dev.moip.com.br/docs/numeros-de-cartoes-para-teste)
[Simulating different payment statuses](https://dev.moip.com.br/docs/simulando-diferentes-status-de-pagamento)
[Search filters](https://dev.moip.com.br/reference#filtros-de-busca)
## Contributors
- [Igor Lopes](https://github.com/Igor-Lopes)
- [Daniel Leonardo](https://github.com/danielfnz)
- [Luiz Fernando](https://github.com/lfernando-silva)
- [Karl Alexander](https://github.com/karlsmarx)
## Slack Community [](https://slackin-cqtchmfquq.now.sh)
Have any question? Join us on [Slack](https://slackin-cqtchmfquq.now.sh/)!