public function testSale_returnsErrorIf3dsLookupDataDoesNotMatchTransactionData() { $threeDSecureToken = Test\Helper::create3DSVerification(Test\Helper::threeDSecureMerchantAccountId(), ['number' => '4111111111111111', 'expirationMonth' => '05', 'expirationYear' => '2009']); $result = Braintree\Transaction::sale(['merchantAccountId' => Test\Helper::threeDSecureMerchantAccountId(), 'amount' => '100.00', 'creditCard' => ['number' => '5105105105105100', 'expirationDate' => '05/09'], 'threeDSecureToken' => $threeDSecureToken]); $this->assertFalse($result->success); $errors = $result->errors->forKey('transaction')->onAttribute('threeDSecureToken'); $this->assertEquals(Braintree\Error\Codes::TRANSACTION_THREE_D_SECURE_TRANSACTION_DATA_DOESNT_MATCH_VERIFY, $errors[0]->code); }