2017-01-28 5 views
2

Ich habe eine Verwirrung mit Braintree. Wenn ein Kunde einen bestimmten Artikel vor Ort bestellt, belastet er BT mit seiner Kreditkarte und ich muss diese Zahlung über den Java-Client überprüfen. Ich fand den folgenden Code:Java Braintree Scheck Transaktion

Transaction transaction = gateway.transaction().find("the_transaction_id"); 

Aber ich brauche von orderId, eine spezielle ID, dass mein System Probleme bei jeder Bestellung Ereignis zu suchen. Wie macht man das in BT mit Java API?

Antwort

2

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);