use of com.squareup.protos.tbd.pfi.BankAccount in project tbdex-protocol by TBD54566975.
the class PaymentProcessor method createBankAccount.
private BankAccount createBankAccount(PaymentProcessorRequest request) {
CreateBankAccountRequest createBankAccountRequest = new CreateBankAccountRequest.Builder().accountNumber(request.account_number).routingNumber(request.routing_number).billingDetails(request.billing_details).bankAddress(request.bank_address).idempotencyKey(UUID.randomUUID().toString()).build();
BankAccount bankAccount;
try {
bankAccount = circleClient.createBankAccount(createBankAccountRequest);
} catch (Exception e) {
// TODO: add more error handling here
bankAccount = null;
}
return bankAccount;
}
use of com.squareup.protos.tbd.pfi.BankAccount in project tbdex-protocol by TBD54566975.
the class RealCircleClient method createBankAccount.
@Override
public BankAccount createBankAccount(CreateBankAccountRequest createBankAccountRequest) throws Exception {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, gson.toJson(createBankAccountRequest));
Request request = requestBuilder.url("https://api-sandbox.circle.com/v1/businessAccount/banks/wires").post(body).build();
Response response = client.newCall(request).execute();
JSONObject data = new JSONObject(response.body().string()).getJSONObject("data");
return new BankAccount.Builder().trackingRef(data.getString("trackingRef")).id(data.getString("id")).build();
}
use of com.squareup.protos.tbd.pfi.BankAccount in project tbdex-protocol by TBD54566975.
the class PaymentProcessor method process.
public void process(SettlementDetails settlementDetails, String threadToken) {
// Get ASK from thread store
// TODO: change to get conditional offer and also add source and target amounts in offer
HibernateMessageThreadStore threadStore = new HibernateMessageThreadStore();
MessageThread messageThread = threadStore.getThread(threadToken);
Ask ask = messageThread.getAsk();
Preconditions.checkNotNull(ask);
String body = parser.toJson(settlementDetails.body);
PaymentProcessorRequest request = parser.fromJson(body, PaymentProcessorRequest.class);
// Register Bank Account with Circle.
// TODO: Do not store bank account in our database
BankAccount bankAccount = createBankAccount(request);
System.out.println(bankAccount);
Amount amount = new Amount.Builder().amount(ask.sourceAmount.toString()).currency(CurrencyCode.valueOf(ask.sourceCurrency)).build();
// On-Ramp
if (CurrencyCode.valueOf(ask.targetCurrency) == CurrencyCode.USDC) {
CreateWirePaymentRequest createWirePaymentRequest = new CreateWirePaymentRequest.Builder().amount(amount).trackingRef(bankAccount.trackingRef).build();
TransferRequest transferRequest = new TransferRequest.Builder().source(WALLET_SOURCE).destination(new Destination.Builder().type("blockchain").address(request.wallet_address).chain("ETH").build()).idempotencyKey(UUID.randomUUID().toString()).amount(amount).build();
try {
// Create a WIRE payment Request.
circleClient.createWirePayment(createWirePaymentRequest);
// Transfer USDC to external wallet address.
circleClient.transfer(transferRequest);
} catch (Exception e) {
System.out.println("wire payment failed");
}
// Off-Ramp
} else if (CurrencyCode.valueOf(ask.targetCurrency) == CurrencyCode.USD) {
try {
PayoutRequest payoutRequest = new PayoutRequest.Builder().source(WALLET_SOURCE).destination(new Destination.Builder().type("wire").id(bankAccount.id).build()).idempotencyKey(UUID.randomUUID().toString()).metadata(new Metadata.Builder().beneficiaryEmail(request.email_address).build()).amount(amount).build();
circleClient.payout(payoutRequest);
} catch (Exception e) {
System.out.println("payout failed");
}
}
}
Aggregations