Obwohl Sie möglicherweise die OrderId auf der Braintree-Seite beibehalten können, sehe ich nicht sofort eine Möglichkeit, eine Suche direkt darauf durchzuführen.
Hier ist, wie wir damit umgehen:
Persist Ihre orderId mit der Transaktions-ID, die Sie zurück von Braintree bekommen. Wenn Sie Ihre Prüfung durchführen müssen, suchen Sie Ihre Tabelle mit der orderId auf, suchen Sie nach der transactionId und rufen Sie dieselbe Methode find()
auf, um die Zahlung zu finden.
Ich könnte mir vorstellen, Sie so etwas wie tun würde:
//some paymentService
public Result<Transaction> sale(BigDecimal amount,
String nonce,
String firstName,
String lastName,
String postalCode) {
TransactionRequest request = new TransactionRequest()
.customer()
.firstName(firstName)
.lastName(lastName)
.done()
.billingAddress()
.firstName(firstName)
.lastName(lastName)
.postalCode(postalCode)
.done()
.type(Type.SALE)
.amount(amount)
.paymentMethodNonce(nonce)
.options()
.submitForSettlement(true)
.done();
return gateway.transaction().sale(request);
}
//and then...
Result<Transaction> result = paymentService.sale(amount, nonce, firstName, lastName, postalCode);
if (result.isSuccess()) {
Transaction transaction = result.getTarget();
String transactionId = transaction.getId(); //persist this ID and your orderId together in your DB
...
}
//when you need to find payment details, it'd be like:
Order order = someService.find(orderId);
PaymentHistory paymentHistory = order.getPaymentHistory();
String transactionId = paymentHistory.getTransactionId();
Transaction transaction = gateway.transaction().find(transactionId);