Package: safe2pay
SDK Python3 para Integração com Safe2PayEsta 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çãoInstalação utilizando Pippipinstallsafe2payGit/Clonegit clone https://github.com/robertons/safe2pay
cd safe2pay
pip install -r requirements.txt
python setup.py installObjetosOs objetos neste SDK podem ser criados em 3 (três) formas distintas a critério do utilizador.CriaçãoMétodo 1 - Construtorobjeto=Objeto(campo1='valor',campo2='valor 2',campo_datetime=datetime.now(),campo_float=10.1)Método 2 - Construtor com Dictobjeto=Objeto(**{'campo1':'valor','campo2':'valor 2','campo_datetime':datetime.now(),'campo_float'=10.1})Método 3 - Preenchimento Individual de Camposobjeto=Objeto()objeto.campo1='valor'objeto.campo2='valor 2'objeto.campo_datetime=datetime.now()objeto.campo_float=10.1Método toJSONMétodo toJSON() retorna os dados do Objeto em formatodicionárionão codificados.objeto=Objeto(...)print(objeto.toJSON())Configuração Inicialposiçãocampoobrigatóriopadrãodescrição1tokensimtoken da conta Safe2Pay2secretKeynãosecretKey da conta Safe2Pay3sandboxnãoFalseAmbiente Produção/Sandbox4debugnãoFalseDepuração de Request Post, Get, Put, Patch e Delete e Resposta Safe2Payimportsafe2paysafe2pay.Safe2Pay('token','secretKey',sandbox=True,debug=False)Mais detalhes emDocumentação OficialDocumentação pendente de atualizaçãoClienteCriarcliente=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()Obtercliente=pagarmepy.Customer(id='cus_bjgeDobdLsEO48nw').Get()Atualizarcliente=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()Listarclientes=pagarmepy.Customer().List(filters={'page':1,'size':10,'gender':'female'})Mais detalhes emDocumentação OficialCartõesCriarcard=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=1card.exp_year=2030card.cvv=123card.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')Obtercard=pagarmepy.Card(id="card_MJYE2GDSLHjjkawL").Get(customer_id="cus_bjgeDobsLsEO48nw")Atualizarcard=pagarmepy.Card(id="card_MJYE2GDSLHjjkawL").Get(customer_id="cus_bjgeDobsLsEO48nw")card.exp_month=2card.exp_year=2035card.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())Listarcards=pagarmepy.Card().List(customer_id='cus_bjgeDobsLsEO48nw')Excluirpagarmepy.Card(id="card_MJYE2GDSLHjjkawL").Delete(customer_id="cus_bjgeDobsLsEO48nw")Renovarcard=pagarmepy.Card(id="card_G4QnR6ck7cgBn8XR").Renew(customer_id="cus_bjgeDobsLsEO48nw")Criar Tokentoken=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 emDocumentação OficialEndereçosCriaraddress=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')Obteraddress=pagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Get(customer_id="cus_bjgeDobsLsEO48nw")Atualizaraddress=pagarmepy.Address(id="addr_BNwDJk2TPTmXGArR").Get(customer_id="cus_bjgeDobsLsEO48nw")address.line_2='Master Place, Itararé'address.Update(customer_id='cus_bjgeDobsLsEO48nw')Listaraddresses=pagarmepy.Address().List(customer_id='cus_bjgeDobsLsEO48nw')Excluirpagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Delete(customer_id="cus_bjgeDobsLsEO48nw")BINOs 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:Obterbin=pagarmepy.BIN().Get(bin='555566')PEDIDOSVeja a documentação oficial para pedidos com pagamentos multimeios, pedidos com multicompradores.Mais detalhes emDocumentação OficialCriarExemplo Pedido com Checkout:pedido=pagarmepy.Order()pedido.customer_id="cus_bjgeDobsLsEO48nw"pedido.code="62LVFN7I4R"pedido.amount=2900pedido.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()Obterpedido=pagarmepy.Order(id="or_jP82N8VUpXhyYr4b").Get()Listarpedidos=pagarmepy.Order().List(customer_id='cus_bjgeDobsLsEO48nw')pedidos=pagarmepy.Order().List()Fechar um Pedidopedido=pagarmepy.Order(id="or_jP82N8VUpXhyYr4b").Close()Excluirpagarmepy.Address(id="addr_lOAgNqH1wCxD6eYd").Delete(customer_id="cus_bjgeDobsLsEO48nw")COBRANÇASObtercobranca=pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Get()Capturar Valor Integralcobranca=pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Capture()Capturar Valor Parcialcobranca=pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Capture(amount=10)Editar cartão de cobrançacobranca=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çacobranca=pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").ChangeDueDate('2022-10-21')Editar método de pagamentocobranca=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çacobranca=pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Delete()Listarcobrancas=pagarmepy.Charge().List()Retentar uma cobrança manualmentecobranca=pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Retry()Confirmar cobrança (cash)cobranca=pagarmepy.Charge(id="ch_Rz8oL2vcjwc3D1OQ").Confirm()RECORRÊNCIAMais detalhes emDocumentação OficialPLANOSCriarplano=pagarmepy.Plan()plano.name="Plano Mensal Teste"plano.description="Plano de teste de integração API"plano.shippable=Falseplano.payment_methods.add('credit_card')plano.statement_descriptor='Assinatura'plano.currency='BRL'plano.interval='month'plano.interval_count=1plano.billing_type='prepaid'plano.quantity=1plano.pricing_scheme=pagarmepy.PricingScheme(**{"scheme_type":"unit","price":5000,"minimum_price":5000,})plano.Create()Obterplano=pagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Get()Listarplano=pagarmepy.Plan().List()Excluirpagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Delete()Atualizarplano=pagarmepy.Plan(id="plan_ODjw15Af9WUgzwkg").Get()plano.statement_descriptor="AST Test"plano.Update()Modificar Metadataplano=pagarmepy.Plan(id="plan_VR92ne8UEUGWNMAa").ChangeMetadata(campo1='valor 1',campo2='valor 2',camponumero=3)Items do PlanoAdicionar Itemitems_planos=pagarmepy.Plan(id="plan_brJdw1jTlTa89zyQ").AddItem(pagarmepy.Item(**{"description":"Chaveiro do Alternativo","quantity":1,"pricing_scheme":{"price":2000,"scheme_type":"unit"}}))Atualizar Itemitems_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 Itempagarmepy.Plan(id="plan_brJdw1jTlTa89zyQ").DeleteItem("pi_d478RMAS3bC74PrL")ASSINATURASCriar Assinatura Avulsaassinatura=pagarmepy.Subscription()assinatura.code='1234'assinatura.customer_id="cus_bjgeDobsLsEO48nw"assinatura.interval='month'assinatura.interval_count=1assinatura.currency='BRL'assinatura.payment_method="credit_card"assinatura.billing_type='prepaid'assinatura.installments=1assinatura.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 Planoassinatura=pagarmepy.Subscription()assinatura.code='1234'assinatura.customer_id="cus_bjgeDobsLsEO48nw"assinatura.plan_id="plan_VR92ne8UEUGWNMAa"assinatura.interval='month'assinatura.interval_count=1assinatura.currency='BRL'assinatura.payment_method="credit_card"assinatura.billing_type='prepaid'assinatura.installments=1assinatura.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()Obterassinaturas=pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").Get()Listarassinaturas=pagarmepy.Subscription().List()Cancelarassinaturas=pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").Delete()Editar cartão da assinaturaassinatura=pagarmepy.Subscription(id="sub_Gdg4m3BTrqTyoK01").ChangePaymentMethod(pagarmepy.Payment(**{"payment_method":"credit_card",'card_id':"card_G4QnR6ck7cgBn8XR",}))Editar metadados da assinaturaassinatura=pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeMetadata(campo1='valor 1',campo2='valor 2',camponumero=3)Editar meio de pagamento da assinaturaassinatura=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"}}))ouassinatura=pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangePaymentMethod(pagarmepy.Payment(**{"payment_method":"credit_card","credit_card":{'card_id':"card_G4QnR6ck7cgBn8XR",}}))Editar data de início da assinaturaassinatura=pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeStarteDate('2022-10-21')Editar preço mínimo da assinaturaassinatura=pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").ChangeMinimumPrice(10000)Ativar faturamento manualassinatura=pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").SetManualBilling(True)Desativar faturamento manualassinatura=pagarmepy.Subscription(id="sub_9ZVy143Hd1HODql1").SetManualBilling(False)Items de AssinaturaAdicionar Itemitems_asssinaturas=pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").AddItem(pagarmepy.Item(**{"description":"Chaveiro do Alternativo","quantity":1,"pricing_scheme":{"price":2000,"scheme_type":"unit"}}))Atualizar Itemitems_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 Itemsitems_asssinaturas=pagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").ListItems()Excluir Itempagarmepy.Subscription(id="sub_brJdw1jTlTa89zyQ").DeleteItem("oi_d478RMAS3bC74PrL")Uso de Items de AssinaturaIncluir Usouso=pagarmepy.Usage()uso.quantity=1uso.description="Uso de teste"uso.Create(subscription_id="sub_brJdw1jTlTa89zyQ",item_id="si_Ww2DP2eHzHnolqbn")Remover Usopagarmepy.Usage(id="usage_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_1VRDB5AfWfjBnZpx",item_id="si_QjGb0BZUkUD0Eyag")Listar Usousos=pagarmepy.Usage().List(subscription_id="sub_1VRDB5AfWfjBnZpx",item_id="si_QjGb0BZUkUD0Eyag")DescontosIncluirdesconto=pagarmepy.Discount()desconto.uso.value=100desconto.increment_type='flat'desconto.Create(subscription_id="sub_brJdw1jTlTa89zyQ")Obterdesconto=pagarmepy.Discount(id="dis_2VBDB53fWfjgnZpX").Get(subscription_id="sub_brJdw1jTlTa89zyQ")Removerpagarmepy.Discount(id="dis_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_brJdw1jTlTa89zyQ")Listardescontos=pagarmepy.Discount().List(subscription_id="sub_brJdw1jTlTa89zyQ")IncrementoIncluirincremento=pagarmepy.Increment()desconto.uso.value=100desconto.increment_type='flat'desconto.Create(subscription_id="sub_brJdw1jTlTa89zyQ")Obterincremento=pagarmepy.Increment(id="inc_2VBDB53fWfjgnZpX").Get(subscription_id="sub_brJdw1jTlTa89zyQ")Removerpagarmepy.Increment(id="inc_2VBDB53fWfjgnZpX").Delete(subscription_id="sub_brJdw1jTlTa89zyQ")Listarincrementos=pagarmepy.Increment().List(subscription_id="sub_brJdw1jTlTa89zyQ")Modificar Regras Splitassinatura=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)CiclosRenovar Ciclociclo=pagarmepy.Cycle(id="cycle_brJdw1jTlTa89zyQ").Renew()Obterciclos=pagarmepy.Cycle(id="cycle_VWk4gY6TMPHN7A0g").Get(subscription_id="sub_9ZVy143Hd1HODql1")Listarciclos=pagarmepy.Cycle().List(subscription_id="sub_9ZVy143Hd1HODql1")FaturasCriarfatura=pagarmepy.Invoice().Create(subscription_id='sub_brJdw1jTlTa89zyQ',cycle_id='cycle_v0dxrO3i2iyr5J9X')Obterfatura=pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").Get()Listarfatura=pagarmepy.Invoice().List()Modificar Metadatafatura=pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").ChangeMetadata(campo1='valor 1',campo2='valor 2',camponumero=3)Cancelar Faturafatura=pagarmepy.Invoice(id="in_VWk4gY6TMPHN7A0g").Delete()RecebedoresCriarrecebedor=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())Obterrecebedor=pagarmepy.Recipient(id="rp_JPx17b8H9HgwY5zo").Get()Atualizarrecebedor=pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").Get()recebedor.description="Descrição Alterada de Recebedor"recebedor.Update()Listarrecebedores=pagarmepy.Recipient().List()Saldosaldo=pagarmepy.Recipient(id="rp_JPx17b8H9HgwY5zo").GetBalance()Alterar Conta Bancária Padrãorecebedor=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ênciarecebedor=pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ChangeTransferSettings(transfer_enabled=True,transfer_interval="monthly",transfer_day="1")Alterar Configurações de Antecipação de Recebíveispagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ChangeAnticipationSettings(enabled=True,type="full",volume_percentage="100",days=["1","2"],delay="1")Criar Saquesaque=pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").DoWithdraw(100)Obter Saquesaque=pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").GetWithdraw("with_LR4Wxpqt68ul2W9M")Listar Saquessaques=pagarmepy.Recipient(id="rp_WGAn6Q4SySWZBlRy").ListWithdrawals()Suporte Oficial da Safe2PayEm caso de dúvidas, problemas ou sugestões:suporte@safe2pay.com.brChange logVeja emCHANGELOGpara maiores informações sobre as mudanças recentesContribuiçõesAs contribuições  por meio dePull Requestssão bem-vindas e serão totalmente creditadas.SegurançaSe você descobrir qualquer problema relacionado à segurança, envie um e-mail pararobertonsilva@gmail.comCréditosAutorRoberto NevesLicençaVeja emLICENÇApara maiores informações sobre a licença de uso.