diff --git a/app/PaymentDrivers/Braintree/CreditCard.php b/app/PaymentDrivers/Braintree/CreditCard.php index b50ff72d6bb2..a61c103be6a2 100644 --- a/app/PaymentDrivers/Braintree/CreditCard.php +++ b/app/PaymentDrivers/Braintree/CreditCard.php @@ -88,14 +88,30 @@ class CreditCard $token = $this->getPaymentToken($request->all(), $customer->id); - $result = $this->braintree->gateway->transaction()->sale([ + $data = [ 'amount' => $this->braintree->payment_hash->data->amount_with_fee, 'paymentMethodToken' => $token, 'deviceData' => $state['client-data'], 'options' => [ 'submitForSettlement' => true ], - ]); + ]; + + if ($this->braintree->company_gateway->getConfigField('merchantAccountId')) { + /** https://developer.paypal.com/braintree/docs/reference/request/transaction/sale/php#full-example */ + $data['merchantAccountId'] = $this->braintree->company_gateway->getConfigField('merchantAccountId'); + } + + try { + $result = $this->braintree->gateway->transaction()->sale($data); + } catch(\Exception $e) { + if ($e instanceof \Braintree\Exception\Authorization) { + throw new PaymentFailed(ctrans('texts.generic_gateway_error'), $e->getCode()); + } + + throw new PaymentFailed($e->getMessage(), $e->getCode()); + } + if ($result->success) { $this->braintree->logSuccessfulGatewayResponse(['response' => $request->server_response, 'data' => $this->braintree->payment_hash], SystemLog::TYPE_BRAINTREE); diff --git a/database/migrations/2021_09_05_101209_update_braintree_gateway.php b/database/migrations/2021_09_05_101209_update_braintree_gateway.php new file mode 100644 index 000000000000..ac4f47704272 --- /dev/null +++ b/database/migrations/2021_09_05_101209_update_braintree_gateway.php @@ -0,0 +1,25 @@ +fields); + $fields->merchantAccountId = ''; + $gateway->fields = json_encode($fields); + + $gateway->save(); + } + } +} diff --git a/database/seeders/PaymentLibrariesSeeder.php b/database/seeders/PaymentLibrariesSeeder.php index 131d50d322db..77c58712c3bb 100644 --- a/database/seeders/PaymentLibrariesSeeder.php +++ b/database/seeders/PaymentLibrariesSeeder.php @@ -74,7 +74,7 @@ class PaymentLibrariesSeeder extends Seeder ['id' => 47, 'name' => 'Secure Trading', 'provider' => 'SecureTrading', 'key' => '231cb401487b9f15babe04b1ac4f7a27', 'fields' => '{"siteReference":"","username":"","password":"","applyThreeDSecure":false,"accountType":"ECOM"}'], ['id' => 48, 'name' => 'SecPay', 'provider' => 'SecPay', 'key' => 'bad8699d581d9fa040e59c0bb721a76c', 'fields' => '{"mid":"","vpnPswd":"","remotePswd":"","usageType":"","confirmEmail":"","testStatus":"true","mailCustomer":"true","additionalOptions":""}'], ['id' => 49, 'name' => 'WePay', 'provider' => 'WePay', 'is_offsite' => false, 'sort_order' => 3, 'key' => '8fdeed552015b3c7b44ed6c8ebd9e992', 'fields' => '{"accountId":"","accessToken":"","type":"goods","testMode":false,"feePayer":"payee"}'], - ['id' => 50, 'name' => 'Braintree', 'provider' => 'Braintree', 'sort_order' => 3, 'key' => 'f7ec488676d310683fb51802d076d713', 'fields' => '{"merchantId":"","publicKey":"","privateKey":"","testMode":false}'], + ['id' => 50, 'name' => 'Braintree', 'provider' => 'Braintree', 'sort_order' => 3, 'key' => 'f7ec488676d310683fb51802d076d713', 'fields' => '{"merchantId":"","merchantAccountId":"","publicKey":"","privateKey":"","testMode":false}'], ['id' => 51, 'name' => 'FirstData Payeezy', 'provider' => 'FirstData_Payeezy', 'key' => '30334a52fb698046572c627ca10412e8', 'fields' => '{"gatewayId":"","password":"","keyId":"","hmac":"","testMode":false}'], ['id' => 52, 'name' => 'GoCardless', 'provider' => 'GoCardlessV2\Redirect', 'sort_order' => 9, 'is_offsite' => true, 'key' => 'b9886f9257f0c6ee7c302f1c74475f6c', 'fields' => '{"accessToken":"","webhookSecret":"","testMode":true}'], ['id' => 53, 'name' => 'PagSeguro', 'provider' => 'PagSeguro', 'key' => 'ef498756b54db63c143af0ec433da803', 'fields' => '{"email":"","token":"","sandbox":false}'], diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 7ed8c1b22ec1..ba8a3e755cda 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -4302,6 +4302,7 @@ $LANG = array( 'checking' => 'Checking', 'savings' => 'Savings', 'unable_to_verify_payment_method' => 'Unable to verify payment method.', + 'generic_gateway_error' => 'Gateway configuration error. Please check your credentials.', ); return $LANG;