Creating transactions

Using Transaction.sale() is the simplest way to create a credit card transaction.

You can create a transaction with just an amount() and a paymentMethodNonce() relayed from your client and immediately submit it for settlement.

Collect device data from the client and include the deviceDataFromTheClient in the transaction.

Java
TransactionRequest request = new TransactionRequest()
  .amount(new BigDecimal("10.00"))
  .paymentMethodNonce(nonceFromTheClient)
  .deviceData(deviceDataFromTheClient)
  .options()
    .submitForSettlement(true)
    .done();

Result<Transaction> result = gateway.transaction().sale(request);
if (result.isSuccess()) {
  // See result.getTarget() for details
} else {
  // Handle errors
}

If you want to create a new payment method in the Vault upon a successful transaction, use the options().storeInVaultOnSuccess() option. If a customerId is not included, a new customer will be created.

Card verification

When a payment method is a credit or debit card, you can use card verification to verify that the card data matches a valid, open account before storing or updating it in the Vault.

Braintree strongly recommends verifying all cards before they are stored in your Vault by enabling card verification in the Control Panel.

If you do not want to verify all cards by default, you can run one-time requests using options().verifyCard() when:

In both cases, the gateway verifies cards by running either a $0 or $1 authorization and then automatically voiding it. If you'd like, you can specify a different options().verificationAmount() to use for the authorization.

Java
PaymentMethodRequest request = new PaymentMethodRequest()
  .customerId("the_customer_id")
  .paymentMethodNonce(nonceFromTheClient)
  .options()
    .verifyCard(true)
    .verificationMerchantAccountId("the_merchant_account_id")
    .verificationAmount("2.00")
    .done();

Result<? extends PaymentMethod> result = gateway.paymentMethod().create(request);
important

If you are using our Advanced Fraud Management Tools, we strongly recommend passing deviceData each time you verify a card.

Verification results

You'll receive a CreditCardVerification response object within a Customer or PaymentMethod result if:

  1. A verification ran, and
  2. It was returned with a status() of PROCESSOR_DECLINED or GATEWAY_REJECTED

Successful results will not return a verification response object.

Reasons for unsuccessful verification results

You can check the processorResponseCode() and processorResponseText() for the specific reason that a verification was PROCESSOR_DECLINED.

Java
PaymentMethodRequest request = new PaymentMethodRequest()
  .customerId("the_customer_id")
  .paymentMethodNonce(nonceFromTheClient)
  .options()
    .verifyCard(true)
  .done();

Result<? extends PaymentMethod> result = gateway.paymentMethod().create(request);

result.isSuccess();
// false

CreditCardVerification verification = result.getCreditCardVerification();
verification.getStatus();
// "PROCESSOR_DECLINED"
verification.getProcessorResponseType();
// ProcessorResponseType.SOFT_DECLINED
verification.getProcessorResponseCode();
// 2000
verification.getProcessorResponseText();
// Do Not Honor

If the status is GATEWAY_REJECTED, you can check the gatewayRejectionReason() for the specific reason. Learn more about gateway rejections.

Java
result.isSuccess();
// false

CreditCardVerification verification = result.getCreditCardVerification();

verification.getStatus();
// "GATEWAY_REJECTED"

verification.getGatewayRejectionReason();
// GatewayRejectionReason.CVV

Verifications on sub-merchant accounts

For those using Braintree Marketplace, verifications can't be done using sub-merchant accounts. See Braintree Marketplace Verifications for more details.

See also

Next Page: Testing and Go Live →