2017-01-28 3 views
2

Braintree와 혼동이 있습니다. 고객이 사이트의 특정 항목을 주문하면 그는 신용 카드로 BT에 대해 요금을 청구하고 Java 클라이언트를 통해이 지불을 확인해야합니다. 다음 코드를 찾았습니다 :Java Braintree 수표 거래

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

그러나 주문 정보는 시스템에서 모든 주문 이벤트에 발행하는 특별 ID로 검색해야합니다. Java API를 사용하여 BT에서이를 수행하는 방법은 무엇입니까?

답변

2

Braintree 측에서 orderId를 유지할 수는 있지만 직접 조회를 수행하는 방법을 쉽게 볼 수 없습니다. 여기

우리가 그것을 처리하는 방법은 다음과 같습니다

가 다시 브레인 트리에서 벗어나 트랜잭션 ID로 ORDERID를 지속. 수표를 발행해야하는 경우 orderId를 사용하여 표를 조회하고 transactionId를 찾은 다음 동일한 find() 메소드를 호출하여 지불을 찾습니다.

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

난 당신이 뭔가를 할 거라고 상상하는 것