SDK Python3 para Integração com Safe2Pay
Project description
SDK Python3 para Integração com Safe2Pay
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
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
Objetos
Os objetos neste SDK podem ser criados em 3 (três) formas distintas a critério do utilizador.
Criação
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
Método toJSON() retorna os dados do Objeto em formato dicionário não codificados.
objeto = Objeto(...)
print(objeto.toJSON())
Configuração Inicial
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
Documentação pendente de atualização
Cliente
Criar
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()
Obter
cliente = pagarmepy.Customer(id='cus_bjgeDobdLsEO48nw').Get()
Atualizar
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()
Listar
clientes = pagarmepy.Customer().List(filters={'page':1, 'size':10, 'gender':'female'})
Mais detalhes em Documentação Oficial
Cartões
Criar
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')
Obter
card = pagarmepy.Card(id="card_MJYE2GDSLHjjkawL").Get(customer_id="cus_bjgeDobsLsEO48nw")
Atualizar
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())
Listar
cards = pagarmepy.Card().List(customer_id='cus_bjgeDobsLsEO48nw')
Excluir
pagarmepy.Card(id="card_MJYE2GDSLHjjkawL").Delete(customer_id="cus_bjgeDobsLsEO48nw")
Renovar
card = pagarmepy.Card(id="card_G4QnR6ck7cgBn8XR").Renew(customer_id="cus_bjgeDobsLsEO48nw")
Criar Token
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
Endereços
Criar
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')
Obter
address = pagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Get(customer_id="cus_bjgeDobsLsEO48nw")
Atualizar
address = pagarmepy.Address(id="addr_BNwDJk2TPTmXGArR").Get(customer_id="cus_bjgeDobsLsEO48nw")
address.line_2 = 'Master Place, Itararé'
address.Update(customer_id='cus_bjgeDobsLsEO48nw')
Listar
addresses = pagarmepy.Address().List(customer_id='cus_bjgeDobsLsEO48nw')
Excluir
pagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Delete(customer_id="cus_bjgeDobsLsEO48nw")
BIN
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:
Obter
bin = pagarmepy.BIN().Get(bin='555566')
PEDIDOS
Veja a documentação oficial para pedidos com pagamentos multimeios, pedidos com multicompradores.
Mais detalhes em Documentação Oficial
Criar
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()
Obter
pedido = pagarmepy.Order(id="or_jP82N8VUpXhyYr4b").Get()
Listar
pedidos = pagarmepy.Order().List(customer_id='cus_bjgeDobsLsEO48nw')
pedidos = pagarmepy.Order().List()
Fechar um Pedido
pedido = pagarmepy.Order(id="or_jP82N8VUpXhyYr4b").Close()
Excluir
pagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Delete(customer_id="cus_bjgeDobsLsEO48nw")
COBRANÇAS
Obter
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Get()
Capturar Valor Integral
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Capture()
Capturar Valor Parcial
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Capture(amount=10)
Editar cartão de cobrança
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"
})))
Editar data de vencimento da cobrança
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").ChangeDueDate('2022-10-21')
Editar método de pagamento
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",
}
}))
Cancelar Cobrança
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Delete()
Listar
cobrancas = pagarmepy.Charge().List()
Retentar uma cobrança manualmente
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Retry()
Confirmar cobrança (cash)
cobranca = pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Confirm()
RECORRÊNCIA
Mais detalhes em Documentação Oficial
PLANOS
Criar
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()
Obter
plano = pagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Get()
Listar
plano = pagarmepy.Plan().List()
Excluir
pagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Delete()
Atualizar
plano = pagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Get()
plano.statement_descriptor = "AST Test"
plano.Update()
Modificar Metadata
plano = pagarmepy.Plan(id="plan_VR92ne8UEUGWNMAa").ChangeMetadata(
campo1 = 'valor 1',
campo2 = 'valor 2',
camponumero = 3
)
Items do Plano
Adicionar Item
items_planos = pagarmepy.Plan(id="plan_brJdw1jTlTa89zyQ").AddItem(pagarmepy.Item(**{
"description": "Chaveiro do Alternativo",
"quantity": 1,
"pricing_scheme": {
"price": 2000,
"scheme_type": "unit"
}
}))
Atualizar Item
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"
}
}))
Excluir Item
pagarmepy.Plan(id="plan_brJdw1jTlTa89zyQ").DeleteItem("pi_d478RMAS3bC74PrL")
ASSINATURAS
Criar Assinatura Avulsa
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()
Criar Assinatura de um Plano
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()
Obter
assinaturas = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").Get()
Listar
assinaturas = pagarmepy.Subscription().List()
Cancelar
assinaturas = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").Delete()
Editar cartão da assinatura
assinatura = pagarmepy.Subscription(id="sub_Gdg4m3BTrqTyoK01").ChangePaymentMethod(pagarmepy.Payment(**{
"payment_method":"credit_card",
'card_id': "card_G4QnR6ck7cgBn8XR",
}))
Editar metadados da assinatura
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeMetadata(
campo1 = 'valor 1',
campo2 = 'valor 2',
camponumero = 3
)
Editar meio de pagamento da assinatura
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",
}
}))
Editar data de início da assinatura
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeStarteDate('2022-10-21')
Editar preço mínimo da assinatura
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeMinimumPrice(10000)
Ativar faturamento manual
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").SetManualBilling(True)
Desativar faturamento manual
assinatura = pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").SetManualBilling(False)
Items de Assinatura
Adicionar Item
items_asssinaturas = pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").AddItem(pagarmepy.Item(**{
"description": "Chaveiro do Alternativo",
"quantity": 1,
"pricing_scheme": {
"price": 2000,
"scheme_type": "unit"
}
}))
Atualizar Item
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"
}
}))
Listar Items
items_asssinaturas = pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").ListItems()
Excluir Item
pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").DeleteItem("oi_d478RMAS3bC74PrL")
Uso de Items de Assinatura
Incluir Uso
uso = pagarmepy.Usage()
uso.quantity = 1
uso.description = "Uso de teste"
uso.Create(subscription_id="sub_brJdw1jTlTa89zyQ", item_id="si_Ww2DP2eHzHnolqbn")
Remover Uso
pagarmepy.Usage(id="usage_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_1VRDB5AfWfjBnZpx", item_id="si_QjGb0BZUkUD0Eyag")
Listar Uso
usos = pagarmepy.Usage().List(subscription_id="sub_1VRDB5AfWfjBnZpx", item_id="si_QjGb0BZUkUD0Eyag")
Descontos
Incluir
desconto = pagarmepy.Discount()
desconto.uso.value = 100
desconto.increment_type = 'flat'
desconto.Create(subscription_id="sub_brJdw1jTlTa89zyQ")
Obter
desconto = pagarmepy.Discount(id="dis_2VBDB53fWfjgnZpX").Get(subscription_id="sub_brJdw1jTlTa89zyQ")
Remover
pagarmepy.Discount(id="dis_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_brJdw1jTlTa89zyQ")
Listar
descontos = pagarmepy.Discount().List(subscription_id="sub_brJdw1jTlTa89zyQ")
Incremento
Incluir
incremento = pagarmepy.Increment()
desconto.uso.value = 100
desconto.increment_type = 'flat'
desconto.Create(subscription_id="sub_brJdw1jTlTa89zyQ")
Obter
incremento = pagarmepy.Increment(id="inc_2VBDB53fWfjgnZpX").Get(subscription_id="sub_brJdw1jTlTa89zyQ")
Remover
pagarmepy.Increment(id="inc_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_brJdw1jTlTa89zyQ")
Listar
incrementos = pagarmepy.Increment().List(subscription_id="sub_brJdw1jTlTa89zyQ")
Modificar Regras Split
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)
Ciclos
Renovar Ciclo
ciclo = pagarmepy.Cycle(id="cycle_brJdw1jTlTa89zyQ").Renew()
Obter
ciclos = pagarmepy.Cycle(id="cycle_VWk4gY6TMPHN7A0g").Get(subscription_id="sub_9ZVy143Hd1HODql1")
Listar
ciclos = pagarmepy.Cycle().List(subscription_id="sub_9ZVy143Hd1HODql1")
Faturas
Criar
fatura = pagarmepy.Invoice().Create(subscription_id='sub_brJdw1jTlTa89zyQ', cycle_id='cycle_v0dxrO3i2iyr5J9X')
Obter
fatura = pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").Get()
Listar
fatura = pagarmepy.Invoice().List()
Modificar Metadata
fatura = pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").ChangeMetadata(
campo1 = 'valor 1',
campo2 = 'valor 2',
camponumero = 3
)
Cancelar Fatura
fatura = pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").Delete()
Recebedores
Criar
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())
Obter
recebedor = pagarmepy.Recipient(id="rp_JPx17b8H9HgwY5zo").Get()
Atualizar
recebedor = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").Get()
recebedor.description = "Descrição Alterada de Recebedor"
recebedor.Update()
Listar
recebedores = pagarmepy.Recipient().List()
Saldo
saldo = pagarmepy.Recipient(id="rp_JPx17b8H9HgwY5zo").GetBalance()
Alterar Conta Bancária Padrão
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",
}))
Alterar Configurações de Transferência
recebedor = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ChangeTransferSettings(transfer_enabled=True, transfer_interval="monthly", transfer_day="1")
Alterar Configurações de Antecipação de Recebíveis
pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ChangeAnticipationSettings(enabled=True, type="full", volume_percentage="100", days=["1","2"], delay="1")
Criar Saque
saque = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").DoWithdraw(100)
Obter Saque
saque = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").GetWithdraw("with_LR4Wxpqt68ul2W9M")
Listar Saques
saques = pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ListWithdrawals()
Suporte Oficial da Safe2Pay
Em caso de dúvidas, problemas ou sugestões: suporte@safe2pay.com.br
Change log
Veja em CHANGELOG para maiores informações sobre as mudanças recentes
Contribuições
As contribuições por meio de Pull Requests
são bem-vindas e serão totalmente creditadas.
Segurança
Se você descobrir qualquer problema relacionado à segurança, envie um e-mail para robertonsilva@gmail.com
Créditos
- Autor Roberto Neves
Licença
Veja em LICENÇA para maiores informações sobre a licença de uso.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file safe2pay-0.0.12.tar.gz
.
File metadata
- Download URL: safe2pay-0.0.12.tar.gz
- Upload date:
- Size: 31.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d965e1035c25f1ba5db99d2319b9247a792e815549ae6a331bed75cfe3cb7d1 |
|
MD5 | 55e48899eb05c5a6d31e4db2ea6ae1dd |
|
BLAKE2b-256 | 9ec4841617fa1de61412ddf2f479a5bf0299dc081547d6108d43e56b4785ee73 |