Testing in Sandboxanchor

Test Payment Methodsanchor

We provide test single-use payment methods in Sandbox, which can be used instead of tokenizing a new payment method every time. These function as IDs for normal single-use payment methods, but will not be consumed. You may pass any of these payment method "nonces" as the paymentMethodId in the chargePaymentMethod mutations or any of the other payment-method-related queries and mutations.

To test vaulted payment methods, use one of the test single-use payment methods in a vaultPaymentMethod mutation, then pass the resulting payment method's ID into the chargePaymentMethod mutation.

Example of vaulting a test "nonce":

  1. Mutation
mutation VaultPayPal($input: VaultPaymentMethodInput!) {
  vaultPaymentMethod(input: $input) {
    paymentMethod {
      id
      usage
      details {
      ... on PayPalAccountDetails
        email
      }
    }
  }
}
  1. Variables
{
  "input": {
    "id": "fake-paypal-billing-agreement-nonce"
  }
}
  1. Response
"data": {
  "vaultPaymentMethod": {
    "paymentMethod": {
      "id": "cGF5bWVudG1ldGhvZF9jY19iemo3N25z",
      "usage": "MULTI-USE",
      "details": {
        "email": "jane.doe@paypal.com"
      }
    }
  }
}

Testing Different Transaction Statusesanchor

To create transactions with different statuses, use these test amounts as the amount on TransactionInput when charging a payment method.

Note: the values for testing card verification are not useful for forcing transactions into different states. They are for workflows related to initial validation of payment methods. When seeking different statuses in a chargePaymentMethod mutation, you must use the appropriate test value for the transaction amount.

Example:

  1. Mutation
mutation ChargeCreditCardUnsuccessfully($input: ChargePaymentMethodInput!) {
  chargePaymentMethod(input: $input) {
    transaction {
      status
      paymentMethodSnapshot {
        ... on CreditCardTransactionDetails {
          creditCard {
            brandCode
            bin
            last4
          }
        }
      }
    }
  }
}
  1. Variables
{
  "input": {
    "paymentMethodId": "fake-valid-nonce",
    "transaction": {
      "amount": "2046.00"
    }
  }
}
  1. Response
"data": {
  "chargePaymentMethod": {
    "transaction": {
      "status": "PROCESSOR_DECLINED",
      "paymentMethodSnapshot": {
        "brandCode": "VISA"
        "bin": "401288",
        "last4": "1881",
      }
    }
  }
}

Forcing Settlement of Transactionsanchor

In our sandbox environment, you can force transactions to move from SUBMITTED_FOR_SETTLEMENT to a SETTLED state (or SETTLEMENT_DECLINED, depending on the test amount you've chosen).

This method will only work in the Sandbox environment. In production, you have to wait for the normal settlement processes to complete. Calling this method in production will produce an error.

Example:

  1. Mutation
mutation SettleATransaction($input: SandboxSettleTransactionInput!) {
  sandboxSettleTransaction(input: $input) {
    transaction {
      status
    }
  }
}
  1. Variables
{
  "input": {
    "transactionId": "dHJhbnNhY3Rpb25fazZqdHZ4NWM"
  }
}
  1. Response
"data": {
  "sandboxSettleTransaction": {
    "transaction": {
      "status": "SETTLED"
    }
  }
}