Credit Cards

Server-Side Implementationanchor

GraphQL
Click here to view the server-side implementation using GraphQL.

Creating transactionsanchor

Using Transaction: Sale is the simplest way to create a credit card transaction.

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

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

  1. Python
result = gateway.transaction.sale({
    "amount": "10.00",
    "payment_method_nonce": nonce_from_the_client,
    "device_data": device_data_from_the_client,
    "options": {
        "submit_for_settlement": True
    }
})

if result.is_success:
  # See result.transaction for details
else:
  # Handle errors

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

Card verificationanchor

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.verify_card 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.verification_amount to use for the authorization.

  1. Python
result = gateway.payment_method.create({
  "customer_id": "the_customer_id",
  "payment_method_nonce": nonce_from_the_client,
  "options": {
    "verify_card": True,
    "verification_merchant_account_id": "the_merchant_account_id",
    "verification_amount": "2.00",
  }
})
important

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

Verification resultsanchor

If verification was successful, the result will contain a CreditCard response object, which will contain a CreditCardVerification response object.

  1. Python
result = gateway.payment_method.create({
  "customer_id": "the_customer_id",
  "payment_method_nonce": nonce_from_the_client,
  "options": {
    "verify_card": True
  }
})

if result.is_success:
  verification = result.payment_method.verification

Otherwise, you'll receive a CreditCardVerification response object directly on a Customer or PaymentMethod result. This occurs if:

  1. A verification ran, and
  2. It was returned with a status of processor_declined or gateway_rejected

Reasons for unsuccessful verification resultsanchor

You can check the processor_response_code and processor_response_text for the specific reason that a verification was processor_declined

  1. Python
result = gateway.payment_method.create({
    "customer_id": "the_customer_id",
    "payment_method_nonce": nonce_from_the_client,
    "options": {
        "verify_card": True
    }
})

result.is_success
# False

verification = result.credit_card_verification
verification.status
# "processor_declined"

verification.processor_response_type
# "soft_declined"

verification.processor_response_code
# "2000"

verification.processor_response_text
# "Do Not Honor"

If the status is gateway_rejected, you can check the gateway_rejection_reason for the specific reason. Learn more about gateway rejections.

  1. Python
result.is_success
# False

verification = result.credit_card_verification
verification.status
# "gateway_rejected"

verification.gateway_rejection_reason
# "cvv"

Verifications on sub-merchant accountsanchor

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