examples/marketplace/shared-cart.rb
# Tip: This setup section generally goes in other files,
# and you access them in your controllers as globals,
# instead of reinstantiating them every time.
gem "moip2"
auth = Moip2::Auth::OAuth.new("oauth")
client = Moip2::Client.new(:sandbox, auth)
api = Moip2::Api.new(client)
# Here we build the multi order data. You'll get the data from your database
# given your controller input, but here we simplify things with a hardcoded
# example.
# In this example, we create a multi order with two orders for two different
# sellers and two different customers, where the first order of the multi order,
# the seller is the primary receiver, and the second one, the seller is the
# secondary receiver.
multi_order = api.multi_order.create(
own_id: "meu_id_de_multi_order_#{SecureRandom.hex(10)}",
orders: [
{
own_id: "meu_id_de_order_#{SecureRandom.hex(10)}",
items: [
{
product: "Produto 1",
quantity: 1,
detail: "Mais info...",
price: 3000,
},
],
customer: {
ownId: "id_do_cliente1_#{SecureRandom.hex(10)}",
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: [
{
moipAccount: {
id: "MPA-D63A62C73A92",
},
type: "PRIMARY",
},
],
},
{
own_id: "meu_segundo_id_de_order_#{SecureRandom.hex(10)}",
items: [
{
product: "Produto 2",
quantity: 1,
detail: "Mais info...",
price: 2600,
},
],
customer: {
ownId: "id_do_cliente2_#{SecureRandom.hex(10)}",
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: [
{
moipAccount: {
id: "MPA-D63A62C73A92",
},
type: "PRIMARY",
},
{
moipAccount: {
id: "MPA-HBKKXIFCY1N3",
},
type: "SECONDARY",
amount: {
fixed: 55,
},
},
],
},
{
own_id: "meu_terceiro_id_de_order_#{SecureRandom.hex(10)}",
items: [
{
product: "Produto 3",
quantity: 2,
detail: "Mais info...",
price: 4000,
},
],
customer: {
ownId: "id_do_cliente3_#{SecureRandom.hex(10)}",
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: [
{
moipAccount: {
id: "MPA-D63A62C73A92",
},
type: "PRIMARY",
},
{
moipAccount: {
id: "MPA-HBKKXIFCY1N3",
},
type: "SECONDARY",
amount: {
percentual: 40,
},
},
],
},
],
)
# Now with the order ID in hands, you can start creating payments
# It is common to use the `hash` method if you are using client-side
# encryption for card data.
multi_payment = api.multi_payment.create(
multi_order.id,
funding_instrument: {
method: "BOLETO",
boleto: {
expirationDate: "2020-01-01",
instructionLines: {
first: "First line of instructions",
second: "Second line of instructions",
third: "Third line of instructions",
},
},
},
)
# This is how you can create a boleto refund to a bank account:
payment_refund = api.refund.create(
payment.id, refundingInstrument: {
method: "BANK_ACCOUNT",
bankAccount: {
bankNumber: "237",
agencyNumber: "12345",
agencyCheckNumber: "0",
accountNumber: "12345678",
accountCheckNumber: "7",
type: "CHECKING",
holder: {
taxDocument: {
type: "CPF",
number: "22222222222",
},
fullname: "Demo Moip",
},
},
}
)
# TIP: To get your application synchronized to Moip's platform,
# you should have a route that handles Webhooks.
# For further information on the possible webhooks, please refer to the official docs
# (https://dev.moip.com.br/v2.0/reference#lista-de-webhooks-disponÃveis)