From 232b88ea5f97e037a3a160f5ef3f9861b6b498d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Truchinski=20Borba?= Date: Tue, 20 Jan 2026 22:54:42 -0300 Subject: [PATCH 1/6] upd: novo campo para criacao de instrucao de pagamento via cobranca --- .../jpdev/asaassdk/rest/payment/PaymentCreator.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/io/github/jpdev/asaassdk/rest/payment/PaymentCreator.java b/src/main/java/io/github/jpdev/asaassdk/rest/payment/PaymentCreator.java index 59876e0..17498c3 100644 --- a/src/main/java/io/github/jpdev/asaassdk/rest/payment/PaymentCreator.java +++ b/src/main/java/io/github/jpdev/asaassdk/rest/payment/PaymentCreator.java @@ -30,6 +30,8 @@ public class PaymentCreator extends Creator { ArrayList split; + String pixAutomaticAuthorizationId; + public String getCustomer() { return customer; } @@ -135,6 +137,15 @@ public ArrayList getSplit() { return split; } + public String getPixAutomaticAuthorizationId() { + return pixAutomaticAuthorizationId; + } + + public PaymentCreator setPixAutomaticAuthorizationId(String pixAutomaticAuthorizationId) { + this.pixAutomaticAuthorizationId = pixAutomaticAuthorizationId; + return this; + } + @Override public String getResourceUrl() { return Domain.PAYMENT.toString(); From 7d518a6fb97604e0e7590facb6abaaba969dc1f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Truchinski=20Borba?= Date: Tue, 20 Jan 2026 23:06:19 -0300 Subject: [PATCH 2/6] feat: leitura de instrucoes de pagamento --- .../github/jpdev/asaassdk/doc/Examples.java | 15 ++++++ .../PixAutomaticPaymentInstruction.java | 49 +++++++++++++++++++ ...omaticPaymentInstructionAuthorization.java | 18 +++++++ ...PixAutomaticPaymentInstructionFetcher.java | 23 +++++++++ .../PixAutomaticPaymentInstructionReader.java | 29 +++++++++++ .../PixAutomaticPaymentInstructionStatus.java | 10 ++++ 6 files changed, 144 insertions(+) create mode 100644 src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstruction.java create mode 100644 src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionAuthorization.java create mode 100644 src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionFetcher.java create mode 100644 src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionReader.java create mode 100644 src/main/java/io/github/jpdev/asaassdk/utils/PixAutomaticPaymentInstructionStatus.java diff --git a/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java b/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java index 134b58f..f25e325 100644 --- a/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java +++ b/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java @@ -35,6 +35,7 @@ import io.github.jpdev.asaassdk.rest.pix.transaction.PixTransactionReader; import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.PixAutomaticAuthorization; import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.immediate.ImmediateQrCodeCreator; +import io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction.PixAutomaticPaymentInstruction; import io.github.jpdev.asaassdk.rest.subscription.*; import io.github.jpdev.asaassdk.rest.transfer.Transfer; import io.github.jpdev.asaassdk.rest.transfer.children.*; @@ -54,6 +55,7 @@ public static void main(String[] args) { Asaas.initSandbox(Secret.getAccessToken()); // Initialize the SDK with your access token createPixAuthorization(); readPixAutomaticAuthorizations(); + readPaymentInstructions(); } private static void createPixAuthorization() { @@ -86,6 +88,19 @@ private static void readPixAutomaticAuthorizations() { } } + private static void readPaymentInstructions() { + List paymentInstructionList = PixAutomaticPaymentInstruction.reader().read().getData(); + paymentInstructionList.forEach(it -> { + assert it.getId() != null; + assert it.getDueDate() != null; + }); + + PixAutomaticPaymentInstruction fetchedPaymentInstruction = PixAutomaticPaymentInstruction.fetcher(paymentInstructionList.get(0).getId()).fetch(); + assert fetchedPaymentInstruction.getPaymentId() != null; + assert fetchedPaymentInstruction.getDueDate() != null; + assert fetchedPaymentInstruction.getAuthorization() != null; + } + private static void createPaymentWithSplit() { Account account = createFirstAccountIfNecessary(); diff --git a/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstruction.java b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstruction.java new file mode 100644 index 0000000..39fd05d --- /dev/null +++ b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstruction.java @@ -0,0 +1,49 @@ +package io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.github.jpdev.asaassdk.utils.PixAutomaticPaymentInstructionStatus; + +import java.util.Date; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class PixAutomaticPaymentInstruction { + + private String id; + private String endToEndIdentifier; + private PixAutomaticPaymentInstructionAuthorization authorization; + private Date dueDate; + private PixAutomaticPaymentInstructionStatus status; + private String paymentId; + + public String getId() { + return id; + } + + public String getEndToEndIdentifier() { + return endToEndIdentifier; + } + + public PixAutomaticPaymentInstructionAuthorization getAuthorization() { + return authorization; + } + + public Date getDueDate() { + return dueDate; + } + + public PixAutomaticPaymentInstructionStatus getStatus() { + return status; + } + + public String getPaymentId() { + return paymentId; + } + + public static PixAutomaticPaymentInstructionFetcher fetcher(String id) { + return new PixAutomaticPaymentInstructionFetcher(id); + } + + public static PixAutomaticPaymentInstructionReader reader() { + return new PixAutomaticPaymentInstructionReader(); + } +} diff --git a/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionAuthorization.java b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionAuthorization.java new file mode 100644 index 0000000..340bf27 --- /dev/null +++ b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionAuthorization.java @@ -0,0 +1,18 @@ +package io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class PixAutomaticPaymentInstructionAuthorization { + + private String id; + private String endToEndIdentifier; + + public String getId() { + return id; + } + + public String getEndToEndIdentifier() { + return endToEndIdentifier; + } +} diff --git a/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionFetcher.java b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionFetcher.java new file mode 100644 index 0000000..d81cc36 --- /dev/null +++ b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionFetcher.java @@ -0,0 +1,23 @@ +package io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction; + +import io.github.jpdev.asaassdk.http.Domain; +import io.github.jpdev.asaassdk.rest.action.Fetcher; + +public class PixAutomaticPaymentInstructionFetcher extends Fetcher { + + private final String id; + + public PixAutomaticPaymentInstructionFetcher(String id) { + this.id = id; + } + + @Override + public String getResourceUrl() { + return Domain.PIX_AUTOMATIC_PAYMENT_INSTRUCTION.addPathVariable(this.id); + } + + @Override + public Class getResourceClass() { + return PixAutomaticPaymentInstruction.class; + } +} diff --git a/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionReader.java b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionReader.java new file mode 100644 index 0000000..06f0657 --- /dev/null +++ b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/paymentinstruction/PixAutomaticPaymentInstructionReader.java @@ -0,0 +1,29 @@ +package io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction; + +import io.github.jpdev.asaassdk.http.Domain; +import io.github.jpdev.asaassdk.rest.action.Reader; +import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.PixAutomaticAuthorization; + +public class PixAutomaticPaymentInstructionReader extends Reader { + + private String paymentId; + + public String getPaymentId() { + return paymentId; + } + + public PixAutomaticPaymentInstructionReader setPaymentId(String paymentId) { + this.paymentId = paymentId; + return this; + } + + @Override + public String getResourceUrl() { + return Domain.PIX_AUTOMATIC_PAYMENT_INSTRUCTION.toString(); + } + + @Override + public Class getResourceClass() { + return PixAutomaticPaymentInstruction.class; + } +} diff --git a/src/main/java/io/github/jpdev/asaassdk/utils/PixAutomaticPaymentInstructionStatus.java b/src/main/java/io/github/jpdev/asaassdk/utils/PixAutomaticPaymentInstructionStatus.java new file mode 100644 index 0000000..32ed302 --- /dev/null +++ b/src/main/java/io/github/jpdev/asaassdk/utils/PixAutomaticPaymentInstructionStatus.java @@ -0,0 +1,10 @@ +package io.github.jpdev.asaassdk.utils; + +public enum PixAutomaticPaymentInstructionStatus { + + AWAITING_REQUEST, + SCHEDULED, + DONE, + CANCELLED, + REFUSED +} From eb6c22f3eaf17319e6a92741f6e5aec8658f16b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Truchinski=20Borba?= Date: Tue, 20 Jan 2026 23:16:51 -0300 Subject: [PATCH 3/6] upd: criacao de cobranca com Pix automatico --- .../github/jpdev/asaassdk/doc/Examples.java | 319 ++++++++---------- .../asaassdk/doc/PixAutomaticExamples.java | 108 ++++++ 2 files changed, 242 insertions(+), 185 deletions(-) create mode 100644 src/main/java/io/github/jpdev/asaassdk/doc/PixAutomaticExamples.java diff --git a/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java b/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java index f25e325..0bffa1d 100644 --- a/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java +++ b/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java @@ -17,6 +17,7 @@ import io.github.jpdev.asaassdk.rest.myaccount.status.MyAccountStatus; import io.github.jpdev.asaassdk.rest.notification.NotificationConfig; import io.github.jpdev.asaassdk.rest.payment.Payment; +import io.github.jpdev.asaassdk.rest.payment.PaymentCreator; import io.github.jpdev.asaassdk.rest.payment.children.SplitSetting; import io.github.jpdev.asaassdk.rest.payment.enums.PaymentLinkChargeType; import io.github.jpdev.asaassdk.rest.payment.enums.PaymentStatus; @@ -33,91 +34,39 @@ import io.github.jpdev.asaassdk.rest.pix.qrcode.decode.PixDecodedQrCode; import io.github.jpdev.asaassdk.rest.pix.transaction.PixTransaction; import io.github.jpdev.asaassdk.rest.pix.transaction.PixTransactionReader; -import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.PixAutomaticAuthorization; -import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.immediate.ImmediateQrCodeCreator; -import io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction.PixAutomaticPaymentInstruction; import io.github.jpdev.asaassdk.rest.subscription.*; import io.github.jpdev.asaassdk.rest.transfer.Transfer; import io.github.jpdev.asaassdk.rest.transfer.children.*; import io.github.jpdev.asaassdk.utils.BillingType; import io.github.jpdev.asaassdk.utils.Money; -import io.github.jpdev.asaassdk.utils.PixAutomaticAuthorizationFrequency; import java.math.BigDecimal; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Random; +import java.util.*; public class Examples { public static void main(String[] args) { Asaas.initSandbox(Secret.getAccessToken()); // Initialize the SDK with your access token - createPixAuthorization(); - readPixAutomaticAuthorizations(); - readPaymentInstructions(); - } - - private static void createPixAuthorization() { - Calendar calendar = Calendar.getInstance(); - calendar.add(Calendar.DAY_OF_MONTH, 1); - Date startDate = calendar.getTime(); - - ImmediateQrCodeCreator immediateQrCodeCreator = new ImmediateQrCodeCreator() - .setDescription("teste") - .setExpirationSeconds(3600) - .setOriginalValue(Money.create(10)); - - String contractId = String.valueOf(System.currentTimeMillis()); - PixAutomaticAuthorization authorization = PixAutomaticAuthorization.creator() - .setCustomerId("cus_000007258649") - .setStartDate(startDate) - .setFrequency(PixAutomaticAuthorizationFrequency.MONTHLY) - .setValue(Money.create(100)) - .setContractId("CONTRACT_IIDD" + contractId) - .setImmediateQrCode(immediateQrCodeCreator) - .create(); - - assert authorization.getId() != null; - assert authorization.getImmediateQrCode().getExpirationDate() != null; - } - - private static void readPixAutomaticAuthorizations() { - for (PixAutomaticAuthorization authorization : PixAutomaticAuthorization.reader().read().getData()) { - assert authorization.getContractId() != null; - } - } - - private static void readPaymentInstructions() { - List paymentInstructionList = PixAutomaticPaymentInstruction.reader().read().getData(); - paymentInstructionList.forEach(it -> { - assert it.getId() != null; - assert it.getDueDate() != null; - }); - - PixAutomaticPaymentInstruction fetchedPaymentInstruction = PixAutomaticPaymentInstruction.fetcher(paymentInstructionList.get(0).getId()).fetch(); - assert fetchedPaymentInstruction.getPaymentId() != null; - assert fetchedPaymentInstruction.getDueDate() != null; - assert fetchedPaymentInstruction.getAuthorization() != null; + PixAutomaticExamples.start(); } private static void createPaymentWithSplit() { Account account = createFirstAccountIfNecessary(); SplitSetting split1 = new SplitSetting() - .setWalletId(account.getWalletId()) - .setFixedValue(Money.create(10)); + .setWalletId(account.getWalletId()) + .setFixedValue(Money.create(10)); CustomerAccount customerAccount = CustomerAccount.reader().read().getData().get(0); Payment payment = Payment.creator() - .setCustomer(customerAccount.id) - .setBillingType(BillingType.PIX) - .setDueDate(new Date()) - .addSplit(split1) - .setValue(Money.create(100)) - .setDescription("Teste") - .create(); + .setCustomer(customerAccount.id) + .setBillingType(BillingType.PIX) + .setDueDate(new Date()) + .addSplit(split1) + .setValue(Money.create(100)) + .setDescription("Teste") + .create(); System.out.println(payment.getSplit().get(0).getId().toString()); @@ -136,113 +85,113 @@ private static void pixTransaction() { PixTransaction pixTransaction = PixTransaction.fetcher("bc515f74-d5c7-4bc2-93e5-3bafc0a9b15d").fetch(); PixTransaction cancelledPixTransaction = PixTransaction.canceller("35363f6e-93e2-11ec-b9d9-96f4053b1bd4").create(); ResourceSet pixTransactionDebitResourceSet = PixTransaction.reader() - .setType(PixTransactionType.DEBIT) - .read(); + .setType(PixTransactionType.DEBIT) + .read(); } private static void pixAddressKey() { ResourceSet pixAddressKeyResourceSet = PixAddressKey.reader() - .setStatus(PixAddressKeyStatus.ACTIVE) - .setLimit(1) - .read(); + .setStatus(PixAddressKeyStatus.ACTIVE) + .setLimit(1) + .read(); PixAddressKey.creator().setType(PixAddressKeyType.EVP).create(); PixAddressKey.reader().read(); } private static void decodePixQrCode() { PixDecodedQrCode decodedQrCode = PixDecodedQrCode.decoder() - .setPayload("payload") - .create(); + .setPayload("payload") + .create(); } private static void transfer() { Transfer transfer = Transfer.pixAddressKeyCreator() - .setPixAddressKey("+5547999999999") - .setValue(Money.create(0.01)) - .setDescription("teste") - .setPixAddressKeyType(PixAddressKeyType.PHONE) - .create(); + .setPixAddressKey("+5547999999999") + .setValue(Money.create(0.01)) + .setDescription("teste") + .setPixAddressKeyType(PixAddressKeyType.PHONE) + .create(); System.out.println(transfer.getValue().toString()); ResourceSet transferList = Transfer.reader().read(); Date birthDate = new Date(); BankAccountSetting bankAccountSetting = new BankAccountSetting() - .setBank( - new BankSetting().setCode("085") - ) - .setAccountName("Paulo") - .setOwnerName("Paulo") - .setOwnerBirthDate(new Date()) - .setCpfCnpj("06928316000124") - .setAgency("0108") - .setAccount("10895") - .setAccountDigit("5") - .setBankAccountType(BankAccountType.CONTA_CORRENTE); + .setBank( + new BankSetting().setCode("085") + ) + .setAccountName("Paulo") + .setOwnerName("Paulo") + .setOwnerBirthDate(new Date()) + .setCpfCnpj("06928316000124") + .setAgency("0108") + .setAccount("10895") + .setAccountDigit("5") + .setBankAccountType(BankAccountType.CONTA_CORRENTE); Transfer pixManualTransfer = Transfer.pixManualCreator() - .setBankAccount(bankAccountSetting) - .setValue(Money.create(new BigDecimal(1.01))) - .create(); + .setBankAccount(bankAccountSetting) + .setValue(Money.create(new BigDecimal(1.01))) + .create(); System.out.println(pixManualTransfer.getValue().toString()); Transfer ted = Transfer.tedCreator() - .setBankAccount(bankAccountSetting) - .setValue(Money.create(new BigDecimal(1.01))) - .create(); + .setBankAccount(bankAccountSetting) + .setValue(Money.create(new BigDecimal(1.01))) + .create(); Transfer internal = Transfer.internalCreator() - .setValue(Money.create(new BigDecimal(10))) - .setWalletId("0021c712-d963-4d86-a59d-031e7ac51a2e") - .create(); + .setValue(Money.create(new BigDecimal(10))) + .setWalletId("0021c712-d963-4d86-a59d-031e7ac51a2e") + .create(); } private static void recurringTransfer() { PixRecurring recurring = new PixRecurring() - .setFrequency(PixRecurringFrequency.MONTHLY) - .setQuantity(2); + .setFrequency(PixRecurringFrequency.MONTHLY) + .setQuantity(2); Transfer transfer = Transfer.pixAddressKeyCreator() - .setPixAddressKey("+5547999999999") - .setValue(Money.create(0.01)) - .setDescription("teste") - .setPixAddressKeyType(PixAddressKeyType.PHONE) - .setRecurring(recurring) - .create(); + .setPixAddressKey("+5547999999999") + .setValue(Money.create(0.01)) + .setDescription("teste") + .setPixAddressKeyType(PixAddressKeyType.PHONE) + .setRecurring(recurring) + .create(); System.out.println(transfer.getRecurring()); } private static void bill() { Bill bill = Bill.creator() - .setIdentificationField("25794150099003551916515000211407100000000000000") - .create(); + .setIdentificationField("25794150099003551916515000211407100000000000000") + .create(); } private static void pixStaticQrCode() { PixQrCode qrCode = PixQrCode - .creator() - .setAddressKey(PixAddressKey.reader().read().getData().get(0).key) - .setDescription("teste") - .setValue(Money.create(0.01)) - .create(); + .creator() + .setAddressKey(PixAddressKey.reader().read().getData().get(0).key) + .setDescription("teste") + .setValue(Money.create(0.01)) + .create(); System.out.printf(qrCode.payload); } private static void payment() { Payment payment = Payment.creator() - .setCustomer("cus_000072683114") - .setBillingType(BillingType.PIX) - .setDueDate(new Date()) - .setInstallmentCount(2) - .setInstallmentValue(Money.create(50)) - .setDescription("Teste") - .create(); + .setCustomer("cus_000072683114") + .setBillingType(BillingType.PIX) + .setDueDate(new Date()) + .setInstallmentCount(2) + .setInstallmentValue(Money.create(50)) + .setDescription("Teste") + .create(); ResourceSet paymentResourceSet = Payment.reader() - .setStatus(PaymentStatus.RECEIVED) - .setStartPaymentDate(new Date()) - .setFinishDueDate(new Date()) - .read(); + .setStatus(PaymentStatus.RECEIVED) + .setStartPaymentDate(new Date()) + .setFinishDueDate(new Date()) + .read(); DeletedResource paymentDeleted = Payment.deleter(payment.getId()).delete(); payment = Payment.restorer(payment.getId()).create(); @@ -254,9 +203,9 @@ private static void payment() { private static void customerAccount() { CustomerAccount.fetcher("cus_000072683044").fetch(); CustomerAccount customerAccount = CustomerAccount.creator() - .setName("criado via API") - .setCpfCnpj("10030823005") - .create(); + .setName("criado via API") + .setCpfCnpj("10030823005") + .create(); } private static void notification() { @@ -267,57 +216,57 @@ private static void notification() { private static void paymentLink() { PaymentLink link = PaymentLink.fetcher("725104409743").fetch(); ResourceSet paymentLinkResourceSet = PaymentLink - .reader() - .read(); + .reader() + .read(); DeletedResource deletedPaymentLink = PaymentLink - .deleter("725104409743") - .delete(); + .deleter("725104409743") + .delete(); PaymentLink paymentLink = PaymentLink.creator() - .setName("name") - .setBillingType(BillingType.PIX) - .setChargeType(PaymentLinkChargeType.INSTALLMENT) - .setEndDate(new Date()) - .setDueDateLimitDays(10) - .setMaxInstallmentCount(2) - .create(); + .setName("name") + .setBillingType(BillingType.PIX) + .setChargeType(PaymentLinkChargeType.INSTALLMENT) + .setEndDate(new Date()) + .setDueDateLimitDays(10) + .setMaxInstallmentCount(2) + .create(); PaymentLink updated = PaymentLink.updater(paymentLink.getId()) - .setName("name") - .setBillingType(BillingType.PIX) - .setChargeType(PaymentLinkChargeType.INSTALLMENT) - .setEndDate(new Date()) - .setDueDateLimitDays(10) - .setMaxInstallmentCount(2) - .update(); + .setName("name") + .setBillingType(BillingType.PIX) + .setChargeType(PaymentLinkChargeType.INSTALLMENT) + .setEndDate(new Date()) + .setDueDateLimitDays(10) + .setMaxInstallmentCount(2) + .update(); } private static void financialTransaction() { ResourceSet financialTransactionResourceSet = FinancialTransaction - .reader() - .setTransferId("transferId") - .read(); + .reader() + .setTransferId("transferId") + .read(); } private static void invoice() { Invoice invoice = Invoice.creator() - .setServiceDescription("Nota fiscal da Fatura 101940. Descrição dos Serviços: ANÁLISE E DESENVOLVIMENTO DE SISTEMAS") - .setObservations("Mensal referente aos trabalhos de Junho.") - .setValue(Money.create(300)) - .setDeductions(Money.create(2)) - .setEffectiveDate(new Date()) - .setMunicipalServiceName("Análise e Desenvolvimento de Sistemas") - .setTaxes( - new Taxes() - .setRetainIss(true) - .setIss(Money.create(3)) - .setCofins(Money.create(3)) - .setCsll(Money.create(1)) - .setInss(Money.create(3)) - .setIr(Money.create(1.5)) - .setPis(Money.create(0.65)) - ) - .create(); + .setServiceDescription("Nota fiscal da Fatura 101940. Descrição dos Serviços: ANÁLISE E DESENVOLVIMENTO DE SISTEMAS") + .setObservations("Mensal referente aos trabalhos de Junho.") + .setValue(Money.create(300)) + .setDeductions(Money.create(2)) + .setEffectiveDate(new Date()) + .setMunicipalServiceName("Análise e Desenvolvimento de Sistemas") + .setTaxes( + new Taxes() + .setRetainIss(true) + .setIss(Money.create(3)) + .setCofins(Money.create(3)) + .setCsll(Money.create(1)) + .setInss(Money.create(3)) + .setIr(Money.create(1.5)) + .setPis(Money.create(0.65)) + ) + .create(); } private static void finance() { @@ -332,8 +281,8 @@ private static void installment() { private static void commercialInfo() { CommercialInfo commercialInfo = CommercialInfo.fetcher().fetch(); CommercialInfo updatedCommercialInfo = CommercialInfo.updater() - .setSite("https://yourSite.com.br") - .update(); + .setSite("https://yourSite.com.br") + .update(); } private static void accountNumber() { @@ -351,13 +300,13 @@ private static void myStatus() { private static void subAccount() { Account account = Account.creator() - .setName("Teste sub conta") - .setBirthDate(new Date()) - .setCompanyType("LIMITED") - .setEmail("joaoexample2@gmail.com") - .setPostalCode("36572122") - .setCpfCnpj("87.326.705/0001-81") - .create(); + .setName("Teste sub conta") + .setBirthDate(new Date()) + .setCompanyType("LIMITED") + .setEmail("joaoexample2@gmail.com") + .setPostalCode("36572122") + .setCpfCnpj("87.326.705/0001-81") + .create(); System.out.println(account.getName()); Account fetched = Account.fetcher(account.id).fetch(); @@ -366,26 +315,26 @@ private static void subAccount() { private static void subscription() { Subscription subscription = Subscription.creator() - .setCustomer("cus_000072683044") - .setCycle(SubscriptionCycle.MONTHLY) - .setNextDueDate(new Date()) - .setValue(Money.create(100)) - .setDescription("Teste") - .create(); + .setCustomer("cus_000072683044") + .setCycle(SubscriptionCycle.MONTHLY) + .setNextDueDate(new Date()) + .setValue(Money.create(100)) + .setDescription("Teste") + .create(); } private static Account createFirstAccountIfNecessary() { List accounts = Account.reader().read().getData(); if (accounts.isEmpty()) { return Account.creator() - .setName("Teste sub conta") - .setBirthDate(new Date()) - .setCompanyType("LIMITED") - .setEmail("joaoexample2@gmail.com") - .setPostalCode("36572122") - .setIncomeValue(Money.create(1000)) - .setCpfCnpj("87.326.705/0001-81") - .create(); + .setName("Teste sub conta") + .setBirthDate(new Date()) + .setCompanyType("LIMITED") + .setEmail("joaoexample2@gmail.com") + .setPostalCode("36572122") + .setIncomeValue(Money.create(1000)) + .setCpfCnpj("87.326.705/0001-81") + .create(); } return accounts.get(0); } diff --git a/src/main/java/io/github/jpdev/asaassdk/doc/PixAutomaticExamples.java b/src/main/java/io/github/jpdev/asaassdk/doc/PixAutomaticExamples.java new file mode 100644 index 0000000..135515c --- /dev/null +++ b/src/main/java/io/github/jpdev/asaassdk/doc/PixAutomaticExamples.java @@ -0,0 +1,108 @@ +package io.github.jpdev.asaassdk.doc; + +import io.github.jpdev.asaassdk.rest.payment.Payment; +import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.PixAutomaticAuthorization; +import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.PixAutomaticAuthorizationReader; +import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.immediate.ImmediateQrCodeCreator; +import io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction.PixAutomaticPaymentInstruction; +import io.github.jpdev.asaassdk.utils.BillingType; +import io.github.jpdev.asaassdk.utils.Money; +import io.github.jpdev.asaassdk.utils.PixAutomaticAuthorizationFrequency; +import io.github.jpdev.asaassdk.utils.PixAutomaticAuthorizationStatus; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +public class PixAutomaticExamples { + + public static void start() { + createPixAuthorization(); + readPixAutomaticAuthorizations(); + readPaymentInstructions(); + createPaymentInstruction(); + } + + private static void createPixAuthorization() { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date startDate = calendar.getTime(); + + ImmediateQrCodeCreator immediateQrCodeCreator = new ImmediateQrCodeCreator() + .setDescription("teste") + .setExpirationSeconds(3600) + .setOriginalValue(Money.create(10)); + + String contractId = String.valueOf(System.currentTimeMillis()); + PixAutomaticAuthorization authorization = PixAutomaticAuthorization.creator() + .setCustomerId("cus_000007258649") + .setStartDate(startDate) + .setFrequency(PixAutomaticAuthorizationFrequency.MONTHLY) + .setValue(Money.create(100)) + .setContractId("CONTRACT_IIDD" + contractId) + .setImmediateQrCode(immediateQrCodeCreator) + .create(); + + assert authorization.getId() != null; + assert authorization.getImmediateQrCode().getExpirationDate() != null; + } + + private static void readPixAutomaticAuthorizations() { + for (PixAutomaticAuthorization authorization : PixAutomaticAuthorization.reader().read().getData()) { + assert authorization.getContractId() != null; + } + } + + private static void createPaymentInstruction() { + Optional activeAuthorizationOptional = findActivePixAutomaticAuthorization(); + if (!activeAuthorizationOptional.isPresent()) return; + + PixAutomaticAuthorization authorization = activeAuthorizationOptional.get(); + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, 3); + + Payment payment = Payment.creator() + .setCustomer(authorization.getCustomerId()) + .setBillingType(BillingType.PIX) + .setDueDate(calendar.getTime()) + .setValue(authorization.getValue()) + .setDescription("Teste") + .setPixAutomaticAuthorizationId(authorization.getId()) + .create(); + + assert payment != null; + } + + private static Optional findActivePixAutomaticAuthorization() { + PixAutomaticAuthorizationReader reader = PixAutomaticAuthorization.reader(); + PixAutomaticAuthorization activeAuthorization = null; + Long offset = 0L; + while (activeAuthorization == null) { + reader.setOffset(offset); + for (PixAutomaticAuthorization authorization : reader.read().getData()) { + if (authorization.getStatus() == PixAutomaticAuthorizationStatus.ACTIVE) { + activeAuthorization = authorization; + break; + } + } + offset++; + } + + return Optional.ofNullable(activeAuthorization); + } + + private static void readPaymentInstructions() { + List paymentInstructionList = PixAutomaticPaymentInstruction.reader().read().getData(); + paymentInstructionList.forEach(it -> { + assert it.getId() != null; + assert it.getDueDate() != null; + }); + + PixAutomaticPaymentInstruction fetchedPaymentInstruction = PixAutomaticPaymentInstruction.fetcher(paymentInstructionList.get(0).getId()).fetch(); + assert fetchedPaymentInstruction.getPaymentId() != null; + assert fetchedPaymentInstruction.getDueDate() != null; + assert fetchedPaymentInstruction.getAuthorization() != null; + } +} From 0969631ecfa9a416b2c11927461f44d10bffd80d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Truchinski=20Borba?= Date: Tue, 20 Jan 2026 23:28:01 -0300 Subject: [PATCH 4/6] upd: improving authorization cancellation --- .../asaassdk/doc/PixAutomaticExamples.java | 24 ++++++++++++------- .../PixAutomaticAuthorizationDeleter.java | 6 ++--- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/github/jpdev/asaassdk/doc/PixAutomaticExamples.java b/src/main/java/io/github/jpdev/asaassdk/doc/PixAutomaticExamples.java index 135515c..4f4cb7f 100644 --- a/src/main/java/io/github/jpdev/asaassdk/doc/PixAutomaticExamples.java +++ b/src/main/java/io/github/jpdev/asaassdk/doc/PixAutomaticExamples.java @@ -5,10 +5,8 @@ import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.PixAutomaticAuthorizationReader; import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.immediate.ImmediateQrCodeCreator; import io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction.PixAutomaticPaymentInstruction; -import io.github.jpdev.asaassdk.utils.BillingType; -import io.github.jpdev.asaassdk.utils.Money; -import io.github.jpdev.asaassdk.utils.PixAutomaticAuthorizationFrequency; -import io.github.jpdev.asaassdk.utils.PixAutomaticAuthorizationStatus; +import io.github.jpdev.asaassdk.rest.pixautomatic.paymentinstruction.PixAutomaticPaymentInstructionReader; +import io.github.jpdev.asaassdk.utils.*; import java.util.Calendar; import java.util.Date; @@ -18,10 +16,7 @@ public class PixAutomaticExamples { public static void start() { - createPixAuthorization(); - readPixAutomaticAuthorizations(); - readPaymentInstructions(); - createPaymentInstruction(); + cancelAuthorization(); } private static void createPixAuthorization() { @@ -105,4 +100,17 @@ private static void readPaymentInstructions() { assert fetchedPaymentInstruction.getDueDate() != null; assert fetchedPaymentInstruction.getAuthorization() != null; } + + private static void cancelAuthorization() { + List authorizationList = PixAutomaticAuthorization.reader().read().getData(); + + Optional cancellable = authorizationList.stream().filter(it -> it.getStatus() == PixAutomaticAuthorizationStatus.CREATED).findFirst(); + assert cancellable.isPresent(); + + PixAutomaticAuthorization cancelledAuthorization = PixAutomaticAuthorization.deleter(cancellable.get().getId()).delete(); + + assert cancelledAuthorization.getStatus() == PixAutomaticAuthorizationStatus.CANCELLED; + assert cancelledAuthorization.getId() != null; + assert cancelledAuthorization.getId().equals(cancellable.get().getId()); + } } diff --git a/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/authorization/PixAutomaticAuthorizationDeleter.java b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/authorization/PixAutomaticAuthorizationDeleter.java index df7209e..e243e90 100644 --- a/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/authorization/PixAutomaticAuthorizationDeleter.java +++ b/src/main/java/io/github/jpdev/asaassdk/rest/pixautomatic/authorization/PixAutomaticAuthorizationDeleter.java @@ -4,7 +4,7 @@ import io.github.jpdev.asaassdk.rest.action.Deleter; import io.github.jpdev.asaassdk.rest.commons.DeletedResource; -public class PixAutomaticAuthorizationDeleter extends Deleter { +public class PixAutomaticAuthorizationDeleter extends Deleter { private final String id; @@ -18,7 +18,7 @@ public String getResourceUrl() { } @Override - public Class getResourceClass() { - return DeletedResource.class; + public Class getResourceClass() { + return PixAutomaticAuthorization.class; } } From 6e69208ae7f9d0c9cae6e33bda898d32a0d01d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Truchinski=20Borba?= Date: Tue, 20 Jan 2026 23:35:39 -0300 Subject: [PATCH 5/6] upd: doc --- docs/pix_automatic.md | 100 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/pix_automatic.md diff --git a/docs/pix_automatic.md b/docs/pix_automatic.md new file mode 100644 index 0000000..6472185 --- /dev/null +++ b/docs/pix_automatic.md @@ -0,0 +1,100 @@ +# Pix Automático + +## Autorizações + +### Criar autorização Pix Automático + +```java +/* + any date + */ +Calendar calendar = Calendar.getInstance(); +calendar.add(Calendar.DAY_OF_MONTH, 1); +Date startDate = calendar.getTime(); + +ImmediateQrCodeCreator immediateQrCodeCreator = new ImmediateQrCodeCreator() + .setDescription("teste") + .setExpirationSeconds(3600) + .setOriginalValue(Money.create(10)); + +PixAutomaticAuthorization authorization = PixAutomaticAuthorization.creator() + .setCustomerId("cus_000007258649") // your customer_id + .setStartDate(startDate) + .setFrequency(PixAutomaticAuthorizationFrequency.MONTHLY) + .setValue(Money.create(100)) + .setContractId("CONTRACT_ID_123") + .setImmediateQrCode(immediateQrCodeCreator) + .create(); +``` + +### Listar autorizações Pix Automático + +```java +ResourceSet authorizationResourceSet = PixAutomaticAuthorization.reader().read(); + +for (PixAutomaticAuthorization authorization : authorizationResourceSet.getData()) { + System.out.println(authorization.getContractId()); +} +``` + +### Recuperar uma autorização do Pix Automático + +```java +import io.github.jpdev.asaassdk.rest.pixautomatic.authorization.PixAutomaticAuthorization; + +String id = "uuidv4"; +PixAutomaticAuthorization authorization = PixAutomaticAuthorization.fetcher(id).fetch(); +``` + +### Cancelar autorização + +```java +String id = "uuidv4"; + +PixAutomaticAuthorization cancelledAuthorization = PixAutomaticAuthorization + .deleter("AUTHORIZATION_ID") + .delete(); +``` + +## Instruções de Pagamento + +### Criar instrução de pagamento + +```java +Calendar calendar = Calendar.getInstance(); +calendar.add(Calendar.DAY_OF_MONTH, 3); // any date + +String activeAuthorizationId = "uuidv4"; + +Payment payment = Payment.creator() + .setCustomer("cus_000007258649") // your customer_id + .setBillingType(BillingType.PIX) + .setDueDate(calendar.getTime()) + .setValue(Money.create(100)) + .setDescription("Test") + .setPixAutomaticAuthorizationId(activeAuthorizationId) + .create(); +``` + +### Listar instruções de pagamento + +```java +ResourceSet paymentInstructionResourceSet = PixAutomaticPaymentInstruction + .reader() + .read(); + +for (PixAutomaticPaymentInstruction instruction : paymentInstructionResourceSet.getData()) { + System.out.println(instruction.getId()); + System.out.println(instruction.getDueDate()); +} +``` + +### Recuperar instrução de pagamento específica + +```java +String id = "uuidv4"; + +PixAutomaticPaymentInstruction paymentInstruction = PixAutomaticPaymentInstruction + .fetcher(id) + .fetch(); +``` From bed18c55e1a6616daab48bb618457f7229607fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Truchinski=20Borba?= Date: Tue, 20 Jan 2026 23:36:34 -0300 Subject: [PATCH 6/6] upd: doc --- docs/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/readme.md b/docs/readme.md index f146a4b..40272a2 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -22,6 +22,7 @@ The API official documentation can be found [here](https://docs.asaas.com/docs/v - [Pix - QR Code e Chaves](pix_dict.md) - [Pix - Transações](pix_dict.md) +- [Pix Automático](pix_automatic.md) - [Cobrança](payment.md) - [Cobrança com split](payment_split.md) - [Clientes](customeraccount.md) @@ -46,4 +47,4 @@ The API official documentation can be found [here](https://docs.asaas.com/docs/v - [Configurações extras](extra.md) - [Exemples](https://github.com/jpdev01/asaasSdk/blob/master/src/main/java/io/github/jpdev/asaassdk/doc/Examples.java) - [Rate Limit](ratelimit.md) -- [Repositório](https://s01.oss.sonatype.org/content/repositories/snapshots/io/github/jpdev01/asaassdk/) \ No newline at end of file +- [Repositório](https://s01.oss.sonatype.org/content/repositories/snapshots/io/github/jpdev01/asaassdk/)