This repository has been archived by the owner on Dec 19, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 156
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ENGCOM-5527: GraphQl-644: [Checkout] Support of 'Braintree' payment m…
…ethod #392 - Merge Pull Request #392 from pmclain/graphql-ce:feature/braintree-payment - Merged commits: 1. 93b08f6 2. 7f226f6 3. c7fd250 4. a59a919 5. 411a559 6. a784526 7. 5f25fdd 8. 4527ea2 9. d57d076 10. 05632a8 11. 3720ec0 12. a6e32e8 13. c4609cc 14. c1eee4f 15. 4939d9c 16. ba459a1 17. fe23996 18. 2448894 19. c552e35 20. e49df5b 21. 169ac1b 22. f69b080 23. ec719be 24. d757fb5 25. 1132a47 26. 6fc0322 27. 00002f4
- Loading branch information
Showing
21 changed files
with
1,475 additions
and
11 deletions.
There are no files selected for viewing
49 changes: 49 additions & 0 deletions
49
app/code/Magento/BraintreeGraphQl/Model/BraintreeDataProvider.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\BraintreeGraphQl\Model; | ||
|
||
use Magento\Framework\GraphQl\Exception\GraphQlInputException; | ||
use Magento\QuoteGraphQl\Model\Cart\Payment\AdditionalDataProviderInterface; | ||
|
||
/** | ||
* Format Braintree input into value expected when setting payment method | ||
*/ | ||
class BraintreeDataProvider implements AdditionalDataProviderInterface | ||
{ | ||
private const PATH_ADDITIONAL_DATA = 'braintree'; | ||
|
||
/** | ||
* Format Braintree input into value expected when setting payment method | ||
* | ||
* @param array $args | ||
* @return array | ||
* @throws GraphQlInputException | ||
*/ | ||
public function getData(array $args): array | ||
{ | ||
if (!isset($args[self::PATH_ADDITIONAL_DATA])) { | ||
throw new GraphQlInputException( | ||
__('Required parameter "braintree" for "payment_method" is missing.') | ||
); | ||
} | ||
|
||
if (!isset($args[self::PATH_ADDITIONAL_DATA]['payment_method_nonce'])) { | ||
throw new GraphQlInputException( | ||
__('Required parameter "payment_method_nonce" for "braintree" is missing.') | ||
); | ||
} | ||
|
||
if (!isset($args[self::PATH_ADDITIONAL_DATA]['is_active_payment_token_enabler'])) { | ||
throw new GraphQlInputException( | ||
__('Required parameter "is_active_payment_token_enabler" for "braintree" is missing.') | ||
); | ||
} | ||
|
||
return $args[self::PATH_ADDITIONAL_DATA]; | ||
} | ||
} |
42 changes: 42 additions & 0 deletions
42
app/code/Magento/BraintreeGraphQl/Model/BraintreeVaultDataProvider.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\BraintreeGraphQl\Model; | ||
|
||
use Magento\Framework\GraphQl\Exception\GraphQlInputException; | ||
use Magento\QuoteGraphQl\Model\Cart\Payment\AdditionalDataProviderInterface; | ||
|
||
/** | ||
* Format Braintree input into value expected when setting payment method | ||
*/ | ||
class BraintreeVaultDataProvider implements AdditionalDataProviderInterface | ||
{ | ||
private const PATH_ADDITIONAL_DATA = 'braintree_cc_vault'; | ||
|
||
/** | ||
* Format Braintree input into value expected when setting payment method | ||
* | ||
* @param array $args | ||
* @return array | ||
*/ | ||
public function getData(array $args): array | ||
{ | ||
if (!isset($args[self::PATH_ADDITIONAL_DATA])) { | ||
throw new GraphQlInputException( | ||
__('Required parameter "braintree_cc_vault" for "payment_method" is missing.') | ||
); | ||
} | ||
|
||
if (!isset($args[self::PATH_ADDITIONAL_DATA]['public_hash'])) { | ||
throw new GraphQlInputException( | ||
__('Required parameter "public_hash" for "braintree_cc_vault" is missing.') | ||
); | ||
} | ||
|
||
return $args[self::PATH_ADDITIONAL_DATA]; | ||
} | ||
} |
70 changes: 70 additions & 0 deletions
70
app/code/Magento/BraintreeGraphQl/Model/Resolver/CreateBraintreeClientToken.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\BraintreeGraphQl\Model\Resolver; | ||
|
||
use Magento\Braintree\Gateway\Config\Config; | ||
use Magento\Braintree\Gateway\Request\PaymentDataBuilder; | ||
use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; | ||
use Magento\Framework\GraphQl\Config\Element\Field; | ||
use Magento\Framework\GraphQl\Exception\GraphQlInputException; | ||
use Magento\Framework\GraphQl\Query\ResolverInterface; | ||
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; | ||
use Magento\Store\Model\StoreManagerInterface; | ||
|
||
/** | ||
* Resolver for generating Braintree client token | ||
*/ | ||
class CreateBraintreeClientToken implements ResolverInterface | ||
{ | ||
/** | ||
* @var Config | ||
*/ | ||
private $config; | ||
|
||
/** | ||
* @var BraintreeAdapterFactory | ||
*/ | ||
private $adapterFactory; | ||
|
||
/** | ||
* @param Config $config | ||
* @param BraintreeAdapterFactory $adapterFactory | ||
*/ | ||
public function __construct( | ||
Config $config, | ||
BraintreeAdapterFactory $adapterFactory | ||
) { | ||
$this->config = $config; | ||
$this->adapterFactory = $adapterFactory; | ||
} | ||
|
||
/** | ||
* @inheritdoc | ||
*/ | ||
public function resolve( | ||
Field $field, | ||
$context, | ||
ResolveInfo $info, | ||
array $value = null, | ||
array $args = null | ||
) { | ||
$storeId = (int)$context->getExtensionAttributes()->getStore()->getId(); | ||
|
||
if (!$this->config->isActive($storeId)) { | ||
throw new GraphQlInputException(__('The Braintree payment method is not active.')); | ||
} | ||
|
||
$params = []; | ||
$merchantAccountId = $this->config->getMerchantAccountId($storeId); | ||
if (!empty($merchantAccountId)) { | ||
$params[PaymentDataBuilder::MERCHANT_ACCOUNT_ID] = $merchantAccountId; | ||
} | ||
|
||
return $this->adapterFactory->create($storeId)->generate($params); | ||
} | ||
} |
79 changes: 79 additions & 0 deletions
79
app/code/Magento/BraintreeGraphQl/Plugin/SetVaultPaymentNonce.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\BraintreeGraphQl\Plugin; | ||
|
||
use Magento\Braintree\Gateway\Command\GetPaymentNonceCommand; | ||
use Magento\Braintree\Model\Ui\ConfigProvider; | ||
use Magento\Framework\GraphQl\Exception\GraphQlInputException; | ||
use Psr\Log\LoggerInterface; | ||
|
||
/** | ||
* Plugin creating nonce from Magento Vault Braintree public hash | ||
*/ | ||
class SetVaultPaymentNonce | ||
{ | ||
/** | ||
* @var GetPaymentNonceCommand | ||
*/ | ||
private $command; | ||
|
||
/** | ||
* @var LoggerInterface | ||
*/ | ||
private $logger; | ||
|
||
/** | ||
* @param GetPaymentNonceCommand $command | ||
* @param LoggerInterface $logger | ||
*/ | ||
public function __construct( | ||
GetPaymentNonceCommand $command, | ||
LoggerInterface $logger | ||
) { | ||
$this->command = $command; | ||
$this->logger = $logger; | ||
} | ||
|
||
/** | ||
* Set Braintree nonce from public hash | ||
* | ||
* @param \Magento\QuoteGraphQl\Model\Cart\SetPaymentMethodOnCart $subject | ||
* @param \Magento\Quote\Model\Quote $quote | ||
* @param array $paymentData | ||
* @return array | ||
* @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||
*/ | ||
public function beforeExecute( | ||
\Magento\QuoteGraphQl\Model\Cart\SetPaymentMethodOnCart $subject, | ||
\Magento\Quote\Model\Quote $quote, | ||
array $paymentData | ||
): array { | ||
if ($paymentData['code'] !== ConfigProvider::CC_VAULT_CODE | ||
|| !isset($paymentData[ConfigProvider::CC_VAULT_CODE]) | ||
|| !isset($paymentData[ConfigProvider::CC_VAULT_CODE]['public_hash']) | ||
) { | ||
return [$quote, $paymentData]; | ||
} | ||
|
||
$subject = [ | ||
'public_hash' => $paymentData[ConfigProvider::CC_VAULT_CODE]['public_hash'], | ||
'customer_id' => $quote->getCustomerId(), | ||
'store_id' => $quote->getStoreId(), | ||
]; | ||
|
||
try { | ||
$result = $this->command->execute($subject)->get(); | ||
$paymentData[ConfigProvider::CC_VAULT_CODE]['payment_method_nonce'] = $result['paymentMethodNonce']; | ||
} catch (\Exception $e) { | ||
$this->logger->critical($e); | ||
throw new GraphQlInputException(__('Sorry, but something went wrong')); | ||
} | ||
|
||
return [$quote, $paymentData]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# BraintreeGraphQl | ||
|
||
**BraintreeGraphQl** provides type and resolver for method additional | ||
information. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
{ | ||
"name": "magento/module-braintree-graph-ql", | ||
"description": "N/A", | ||
"type": "magento2-module", | ||
"require": { | ||
"php": "~7.1.3||~7.2.0||~7.3.0", | ||
"magento/framework": "*", | ||
"magento/module-braintree": "*", | ||
"magento/module-store": "*", | ||
"magento/module-quote": "*", | ||
"magento/module-quote-graph-ql": "*" | ||
}, | ||
"suggest": { | ||
"magento/module-graph-ql": "*" | ||
}, | ||
"license": [ | ||
"OSL-3.0", | ||
"AFL-3.0" | ||
], | ||
"autoload": { | ||
"files": [ | ||
"registration.php" | ||
], | ||
"psr-4": { | ||
"Magento\\BraintreeGraphQl\\": "" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
<?xml version="1.0"?> | ||
<!-- | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
--> | ||
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> | ||
<type name="Magento\QuoteGraphQl\Model\Cart\Payment\AdditionalDataProviderPool"> | ||
<arguments> | ||
<argument name="dataProviders" xsi:type="array"> | ||
<item name="braintree" xsi:type="object">Magento\BraintreeGraphQl\Model\BraintreeDataProvider</item> | ||
<item name="braintree_cc_vault" xsi:type="object">Magento\BraintreeGraphQl\Model\BraintreeVaultDataProvider</item> | ||
</argument> | ||
</arguments> | ||
</type> | ||
<type name="Magento\QuoteGraphQl\Model\Cart\SetPaymentMethodOnCart"> | ||
<plugin name="braintree_generate_vault_nonce" type="Magento\BraintreeGraphQl\Plugin\SetVaultPaymentNonce" /> | ||
</type> | ||
</config> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<?xml version="1.0"?> | ||
<!-- | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
--> | ||
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> | ||
<module name="Magento_BraintreeGraphQl"> | ||
<sequence> | ||
<module name="Magento_Braintree"/> | ||
<module name="Magento_Quote"/> | ||
<module name="Magento_Store"/> | ||
<module name="Magento_QuoteGraphQl"/> | ||
</sequence> | ||
</module> | ||
</config> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# Copyright © Magento, Inc. All rights reserved. | ||
# See COPYING.txt for license details. | ||
|
||
type Mutation { | ||
createBraintreeClientToken: String! @resolver(class: "\\Magento\\BraintreeGraphQl\\Model\\Resolver\\CreateBraintreeClientToken") @doc(description:"Creates Braintree Client Token for creating client-side nonce.") | ||
} | ||
|
||
input PaymentMethodInput { | ||
braintree: BraintreeInput | ||
braintree_cc_vault: BraintreeCcVaultInput | ||
} | ||
|
||
input BraintreeInput { | ||
payment_method_nonce: String! | ||
is_active_payment_token_enabler: Boolean! | ||
device_data: String | ||
} | ||
|
||
input BraintreeCcVaultInput { | ||
public_hash: String! | ||
device_data: String | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
use Magento\Framework\Component\ComponentRegistrar; | ||
|
||
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Magento_BraintreeGraphQl', __DIR__); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.