Esta SDK foi desenvolvida para abstrair aos desenvolvedores os principais detalhes da comunicação com API da Safe2Pay tanto em produção quanto ambiente sandbox.
Você pode acessar a documentação base da api aqui: Api Safe2Pay.
Instalação utilizando Pip
pip install safe2pay
Git/Clone
git clone https://github.com/robertons/safe2pay
cd safe2pay
pip install -r requirements.txt
python setup.py install
Os objetos neste SDK podem ser criados em 3 (três) formas distintas a critério do utilizador.
Método 1 - Construtor
objeto = Objeto(campo1 = 'valor', campo2 = 'valor 2', campo_datetime = datetime.now(), campo_float = 10.1)
Método 2 - Construtor com Dict
objeto = Objeto(**{'campo1':'valor', 'campo2':'valor 2', 'campo_datetime':datetime.now(), 'campo_float' = 10.1})
Método 3 - Preenchimento Individual de Campos
objeto = Objeto()
objeto.campo1 = 'valor'
objeto.campo2 = 'valor 2'
objeto.campo_datetime = datetime.now()
objeto.campo_float = 10.1
Método toJSON() retorna os dados do Objeto em formato dicionário não codificados.
objeto = Objeto(...)
print(objeto.toJSON())
posição | campo | obrigatório | padrão | descrição |
---|---|---|---|---|
1 | token | sim | token da conta Safe2Pay | |
2 | secretKey | não | secretKey da conta Safe2Pay | |
3 | sandbox | não | False | Ambiente Produção/Sandbox |
4 | debug | não | False | Depuração de Request Post, Get, Put, Patch e Delete e Resposta Safe2Pay |
import safe2pay
safe2pay.Safe2Pay('token', 'secretKey', sandbox=True, debug=False)
Mais detalhes em Documentação Oficial
cliente = pagarmepy.Customer()
cliente.name = 'Fulano Beltrano'
cliente.email = 'fulano@email.com'
cliente.birthdate = '1980-01-30'
cliente.phones = pagarmepy.Phones(**{'mobile_phone': { "country_code": 55, "area_code": 27, "number": 999999999}})
cliente.Create()
cliente = pagarmepy.Customer(id='cus_bjgeDobdLsEO48nw').Get()
cliente = pagarmepy.Customer(id='cus_bjgeDobsLsEO48nw').Get()
cliente.address = pagarmepy.Address(line_1='Rua Capitao Domingos Correa da Rocha, 80, Sala 116', line_2='Ed Master Place, Santa Lucia', city='Vitória', state='ES', country='BR', zip_code='29056220')
client.Update()
clientes = pagarmepy.Customer().List(filters={'page':1, 'size':10, 'gender':'female'})
Mais detalhes em Documentação Oficial
card = pagarmepy.Card()
card.first_six_digits = "400000"
card.last_four_digits = "0010"
card.brand = "Mastercard"
card.holder_name = "Tony Stark"
card.holder_document = "93095135270"
card.number = "4000000000000010"
card.exp_month = 1
card.exp_year = 2030
card.cvv = 123
card.billing_address = pagarmepy.Address(**{
"zip_code": "22000111",
"city": "Rio de Janeiro",
"state": "RJ",
"country": "BR",
"line_1": "375, Av. General Osorio, Centro",
"line_2": "7º Andar"
})
card.Create(customer_id='cus_bjgeDobsLsEO48nw')
card = pagarmepy.Card(id="card_MJYE2GDSLHjjkawL").Get(customer_id="cus_bjgeDobsLsEO48nw")
card = pagarmepy.Card(id="card_MJYE2GDSLHjjkawL").Get(customer_id="cus_bjgeDobsLsEO48nw")
card.exp_month = 2
card.exp_year = 2035
card.billing_address = pagarmepy.Address(**{'line_1':'Rua Capitao Domingos Correa da Rocha, 80, Sala 116', 'line_2':'Ed Master Place, Santa Lucia', 'city':'Vitória', 'state':'ES', 'country':'BR', 'zip_code':'29056220'})
card.Update(customer_id="cus_bjgeDobsLsEO48nw")
print(card.toJSON())
cards = pagarmepy.Card().List(customer_id='cus_bjgeDobsLsEO48nw')
pagarmepy.Card(id="card_MJYE2GDSLHjjkawL").Delete(customer_id="cus_bjgeDobsLsEO48nw")
card = pagarmepy.Card(id="card_G4QnR6ck7cgBn8XR").Renew(customer_id="cus_bjgeDobsLsEO48nw")
token = pagarmepy.Token()
token.type = "card"
token.card = pagarmepy.Card(
first_six_digits = "400000",
last_four_digits = "0010",
brand = "Mastercard",
holder_name = "Tony Stark",
holder_document = "93095135270",
number = "4000000000000010",
exp_month = 1,
exp_year = 2030,
cvv = 123,
billing_address = pagarmepy.Address(**{
"zip_code": "22000111",
"city": "Rio de Janeiro",
"state": "RJ",
"country": "BR",
"line_1": "375, Av. General Osorio, Centro",
"line_2": "7º Andar"
})
)
token.Create(appId='pk_test_Y479412hrHMQ956j')
Mais detalhes em Documentação Oficial
address = pagarmepy.Address(**{
"zip_code": "22000111",
"city": "Rio de Janeiro",
"state": "RJ",
"country": "BR",
"line_1": "375, Av. General Osorio, Centro",
"line_2": "7º Andar"
})
address.Create(customer_id='cus_bjgeDobsLsEO48nw')
address = pagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Get(customer_id="cus_bjgeDobsLsEO48nw")
address = pagarmepy.Address(id="addr_BNwDJk2TPTmXGArR").Get(customer_id="cus_bjgeDobsLsEO48nw")
address.line_2 = 'Master Place, Itararé'
address.Update(customer_id='cus_bjgeDobsLsEO48nw')
addresses = pagarmepy.Address().List(customer_id='cus_bjgeDobsLsEO48nw')
pagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Delete(customer_id="cus_bjgeDobsLsEO48nw")
Os seis primeiros dígitos de um número de cartão (incluindo o dígito MII inicial) são conhecidos como o número de identificação do emissor (IIN) ou número de identificação do banco (BIN). Estes números identificam a instituição que emitiu o cartão ao titular do cartão. O restante do número é alocado pelo emissor. Para obter as informações do Emissor:
bin = pagarmepy.BIN().Get(bin='555566')
Veja a documentação oficial para pedidos com pagamentos multimeios, pedidos com multicompradores.
Mais detalhes em Documentação Oficial
Exemplo Pedido com Checkout:
pedido = pagarmepy.Order()
pedido.customer_id = "cus_bjgeDobsLsEO48nw"
pedido.code = "62LVFN7I4R"
pedido.amount = 2900
pedido.currency = "BRL"
pedido.items.add(pagarmepy.Item(**{
"id": "oi_d478RMAS3bC74PrL",
"description": "Chaveiro do Tesseract",
"amount": 2900,
"quantity": 1,
"status": "active",
"code":"abc"
}))
pedido.shipping = pagarmepy.Shipping(**{
"amount": 100,
"description": "Stark",
"recipient_name": "Tony Stark",
"recipient_phone": "24586787867",
"address": {
"line_1": "10880, Malibu Point, Malibu Central",
"zip_code": "90265",
"city": "Malibu",
"state": "CA",
"country": "US"
}})
pedido.payments.add(pagarmepy.Payment(**{
"amount" : 3000,
"payment_method":"checkout",
"checkout": {
"expires_in":120,
"billing_address_editable" : False,
"customer_editable" : False,
"accepted_payment_methods": ["credit_card"],
"success_url": "https://www.pagar.me",
}
}))
pedido.Create()
pedido = pagarmepy.Order(id="or_jP82N8VUpXhyYr4b").Get()
pedidos = pagarmepy.Order().List(customer_id='cus_bjgeDobsLsEO48nw')
pedidos = pagarmepy.Order().List()
pedido = pagarmepy.Order(id="or_jP82N8VUpXhyYr4b").Close()
pagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Delete(customer_id="cus_bjgeDobsLsEO48nw")
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Get()
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Capture()
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Capture(amount=10)
cobranca = pagarmepy.Charge(id="ch_Pr5R4D5izhEbyNQY").ChangeCard(pagarmepy.Card(
first_six_digits = "400000",
last_four_digits = "0010",
brand = "Mastercard",
holder_name = "Tony Stark",
holder_document = "93095135270",
number = "4000000000000010",
exp_month = 1,
exp_year = 2030,
cvv = 123,
billing_address = pagarmepy.Address(**{
"zip_code": "22000111",
"city": "Rio de Janeiro",
"state": "RJ",
"country": "BR",
"line_1": "375, Av. General Osorio, Centro",
"line_2": "7º Andar"
})))
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").ChangeDueDate('2022-10-21')
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").ChangePaymentMethod(pagarmepy.Payment(**{
"amount" : 3000,
"payment_method":"boleto",
"boleto": {
"instructions": "Instrução de boleto de teste",
"due_at" : "2022-10-20T14:30:22",
"document_number" : "123456",
"type": "DM"
}
}))
cobranca = pagarmepy.Charge(id="ch_Pr5R4D5izhEbyNQY").ChangePaymentMethod(pagarmepy.Payment(**{
"amount" : 3000,
"payment_method":"credit_card",
"credit_card": {
'card_id': "card_G4QnR6ck7cgBn8XR",
}
}))
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Delete()
cobrancas = pagarmepy.Charge().List()
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Retry()
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Confirm()
Mais detalhes em Documentação Oficial
plano = pagarmepy.Plan()
plano.name = "Plano Mensal Teste"
plano.description = "Plano de teste de integração API"
plano.shippable = False
plano.payment_methods.add('credit_card')
plano.statement_descriptor = 'Assinatura'
plano.currency = 'BRL'
plano.interval = 'month'
plano.interval_count = 1
plano.billing_type = 'prepaid'
plano.quantity = 1
plano.pricing_scheme = pagarmepy.PricingScheme(**{
"scheme_type": "unit",
"price": 5000,
"minimum_price": 5000,
})
plano.Create()
plano = pagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Get()
plano = pagarmepy.Plan().List()
pagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Delete()
plano = pagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Get()
plano.statement_descriptor = "AST Test"
plano.Update()
plano = pagarmepy.Plan(id="plan_VR92ne8UEUGWNMAa").ChangeMetadata(
campo1 = 'valor 1',
campo2 = 'valor 2',
camponumero = 3
)
items_planos = pagarmepy.Plan(id="plan_brJdw1jTlTa89zyQ").AddItem(pagarmepy.Item(**{
"description": "Chaveiro do Alternativo",
"quantity": 1,
"pricing_scheme": {
"price": 2000,
"scheme_type": "unit"
}
}))
items_planos = pagarmepy.Plan(id="plan_brJdw1jTlTa89zyQ").UpdateItem(pagarmepy.Item(**{
"id": "pi_d478RMAS3bC74PrL",
"description": "Chaveiro do Tesseract Antigo",
"status": "active",
"quantity": 1,
"pricing_scheme": {
"price": 3000,
"scheme_type": "unit"
}
}))
pagarmepy.Plan(id="plan_brJdw1jTlTa89zyQ").DeleteItem("pi_d478RMAS3bC74PrL")
assinatura = pagarmepy.Subscription()
assinatura.code = '1234'
assinatura.customer_id = "cus_bjgeDobsLsEO48nw"
assinatura.interval = 'month'
assinatura.interval_count = 1
assinatura.currency = 'BRL'
assinatura.payment_method = "credit_card"
assinatura.billing_type = 'prepaid'
assinatura.installments = 1
assinatura.statement_descriptor = "AST Gofans"
assinatura.items.add(pagarmepy.Item(**{
"id": "oi_d478RMAS3bC74PrL",
"description": "Chaveiro do Tesseract",
"amount": 2900,
"quantity": 1,
"status": "active",
"code":"abc",
"pricing_scheme":{
"scheme_type": "Unit",
"price": 2900
}
}))
assinatura.card = pagarmepy.Card(**{
"number": "4000000000000010",
"holder_name": "Tony Stark",
"exp_month": 1,
"exp_year": 30,
"cvv": "3531",
"billing_address": {
"line_1": "10880, Malibu Point, Malibu Central",
"zip_code": "90265",
"city": "Malibu",
"state": "CA",
"country": "US"
}
})
assinatura.Create()
assinatura = pagarmepy.Subscription()
assinatura.code = '1234'
assinatura.customer_id = "cus_bjgeDobsLsEO48nw"
assinatura.plan_id = "plan_VR92ne8UEUGWNMAa"
assinatura.interval = 'month'
assinatura.interval_count = 1
assinatura.currency = 'BRL'
assinatura.payment_method = "credit_card"
assinatura.billing_type = 'prepaid'
assinatura.installments = 1
assinatura.statement_descriptor = "AST Gofans"
assinatura.card = pagarmepy.Card(**{
"number": "4000000000000010",
"holder_name": "Tony Stark",
"exp_month": 1,
"exp_year": 30,
"cvv": "3531",
"billing_address": {
"line_1": "10880, Malibu Point, Malibu Central",
"zip_code": "90265",
"city": "Malibu",
"state": "CA",
"country": "US"
}
})
assinatura.Create()
assinaturas = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").Get()
assinaturas = pagarmepy.Subscription().List()
assinaturas = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").Delete()
assinatura = pagarmepy.Subscription(id="sub_Gdg4m3BTrqTyoK01").ChangePaymentMethod(pagarmepy.Payment(**{
"payment_method":"credit_card",
'card_id': "card_G4QnR6ck7cgBn8XR",
}))
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeMetadata(
campo1 = 'valor 1',
campo2 = 'valor 2',
camponumero = 3
)
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangePaymentMethod(pagarmepy.Payment(**{
"payment_method":"boleto",
"boleto": {
"instructions": "Instrução de boleto de teste",
"due_at" : "2022-10-20T14:30:22",
"document_number" : "123456",
"type": "DM"
}
}))
ou
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangePaymentMethod(pagarmepy.Payment(**{
"payment_method":"credit_card",
"credit_card": {
'card_id': "card_G4QnR6ck7cgBn8XR",
}
}))
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeStarteDate('2022-10-21')
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeMinimumPrice(10000)
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").SetManualBilling(True)
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").SetManualBilling(False)
items_asssinaturas = pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").AddItem(pagarmepy.Item(**{
"description": "Chaveiro do Alternativo",
"quantity": 1,
"pricing_scheme": {
"price": 2000,
"scheme_type": "unit"
}
}))
items_asssinaturas = pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").UpdateItem(pagarmepy.Item(**{
"id": "oi_d478RMAS3bC74PrL",
"description": "Chaveiro do Tesseract Antigo",
"status": "active",
"quantity": 1,
"pricing_scheme": {
"price": 3000,
"scheme_type": "unit"
}
}))
items_asssinaturas = pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").ListItems()
pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").DeleteItem("oi_d478RMAS3bC74PrL")
uso = pagarmepy.Usage()
uso.quantity = 1
uso.description = "Uso de teste"
uso.Create(subscription_id="sub_brJdw1jTlTa89zyQ", item_id="si_Ww2DP2eHzHnolqbn")
pagarmepy.Usage(id="usage_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_1VRDB5AfWfjBnZpx", item_id="si_QjGb0BZUkUD0Eyag")
usos = pagarmepy.Usage().List(subscription_id="sub_1VRDB5AfWfjBnZpx", item_id="si_QjGb0BZUkUD0Eyag")
desconto = pagarmepy.Discount()
desconto.uso.value = 100
desconto.increment_type = 'flat'
desconto.Create(subscription_id="sub_brJdw1jTlTa89zyQ")
desconto = pagarmepy.Discount(id="dis_2VBDB53fWfjgnZpX").Get(subscription_id="sub_brJdw1jTlTa89zyQ")
pagarmepy.Discount(id="dis_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_brJdw1jTlTa89zyQ")
descontos = pagarmepy.Discount().List(subscription_id="sub_brJdw1jTlTa89zyQ")
incremento = pagarmepy.Increment()
desconto.uso.value = 100
desconto.increment_type = 'flat'
desconto.Create(subscription_id="sub_brJdw1jTlTa89zyQ")
incremento = pagarmepy.Increment(id="inc_2VBDB53fWfjgnZpX").Get(subscription_id="sub_brJdw1jTlTa89zyQ")
pagarmepy.Increment(id="inc_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_brJdw1jTlTa89zyQ")
incrementos = pagarmepy.Increment().List(subscription_id="sub_brJdw1jTlTa89zyQ")
assinatura = pagarmepy.Subscription()
assinatura.id = "sub_brJdw1jTlTa89zyQ"
assinatura.split.add(pagarmepy.Split(**{
"amount": 50,
"recipient_id": "rp_n9voQ2QT0SQrMwOL",
"type": "percentage",
"options": {
"charge_processing_fee": True,
"charge_remainder_fee": True,
"liable": True
}
}))
assinatura.split.add(pagarmepy.Split(**{
"amount": 50,
"type": "percentage",
"recipient_id": "rp_6gyn5oIvAcwjrNej",
"options": {
"charge_processing_fee": False,
"charge_remainder_fee": False,
"liable": False
}
}))
assinatura.ChangeSplitRule(enabled=True)
ciclo = pagarmepy.Cycle(id="cycle_brJdw1jTlTa89zyQ").Renew()
ciclos = pagarmepy.Cycle(id="cycle_VWk4gY6TMPHN7A0g").Get(subscription_id="sub_9ZVy143Hd1HODql1")
ciclos = pagarmepy.Cycle().List(subscription_id="sub_9ZVy143Hd1HODql1")
fatura = pagarmepy.Invoice().Create(subscription_id='sub_brJdw1jTlTa89zyQ', cycle_id='cycle_v0dxrO3i2iyr5J9X')
fatura = pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").Get()
fatura = pagarmepy.Invoice().List()
fatura = pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").ChangeMetadata(
campo1 = 'valor 1',
campo2 = 'valor 2',
camponumero = 3
)
fatura = pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").Delete()
recebedor = pagarmepy.Recipient()
recebedor.name = 'Joao da Silva'
recebedor.email = "joaodasilva@gmail.com"
recebedor.document = '000011233000'
recebedor.description = 'Recebedor teste de cadastro'
recebedor.type = 'individual'
recebedor.default_bank_account = pagarmepy.BankAccount(**{
"holder_name": "Joao da Silva",
"holder_type": "individual",
"holder_document": '000011233000',
"bank": "033",
"type": "checking",
"branch_number": "4444",
"branch_check_digit": "0",
"account_number": "11223344",
"account_check_digit": "5",
})
recebedor.Create()
print(recebedor.toJSON())
recebedor = pagarmepy.Recipient(id="rp_JPx17b8H9HgwY5zo").Get()
recebedor = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").Get()
recebedor.description = "Descrição Alterada de Recebedor"
recebedor.Update()
recebedores = pagarmepy.Recipient().List()
saldo = pagarmepy.Recipient(id="rp_JPx17b8H9HgwY5zo").GetBalance()
recebedor = pagarmepy.Recipient(id="rp_JPx17b8H9HgwY5zo").ChangeDefaultBankAccount(pagarmepy.BankAccount(**{
"holder_name": "Roberto Neves da Silva",
"holder_type": "individual",
"holder_document": '09292800752',
"bank": "033",
"type": "checking",
"branch_number": "4316",
"branch_check_digit": "0",
"account_number": "01001647",
"account_check_digit": "3",
}))
recebedor = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ChangeTransferSettings(transfer_enabled=True, transfer_interval="monthly", transfer_day="1")
pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ChangeAnticipationSettings(enabled=True, type="full", volume_percentage="100", days=["1","2"], delay="1")
saque = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").DoWithdraw(100)
saque = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").GetWithdraw("with_LR4Wxpqt68ul2W9M")
saques = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ListWithdrawals()
Em caso de dúvidas, problemas ou sugestões: suporte@safe2pay.com.br
Veja em CHANGELOG para maiores informações sobre as mudanças recentes
As contribuições por meio de Pull Requests
são bem-vindas e serão totalmente creditadas.
Se você descobrir qualquer problema relacionado à segurança, envie um e-mail para robertonsilva@gmail.com
- Autor Roberto Neves
Veja em LICENÇA para maiores informações sobre a licença de uso.