Skip to content

Commit a635742

Browse files
Merge pull request #187 from getbread/pg-1558-unified-merge
Pg 1558 unified OMS merge
2 parents 291c677 + 0734624 commit a635742

File tree

15 files changed

+449
-79
lines changed

15 files changed

+449
-79
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
/**
4+
* Admin order management block info
5+
*
6+
* @since 2.3.0
7+
* @author Maritim, Kip
8+
*/
9+
10+
namespace Bread\BreadCheckout\Block\Adminhtml\Order\View;
11+
12+
class BreadApiVersionInfo extends \Magento\Sales\Block\Adminhtml\Order\View {
13+
14+
/**
15+
*
16+
* @param \Magento\Backend\Block\Widget\Context $context
17+
* @param \Magento\Framework\Registry $registry
18+
* @param \Magento\Sales\Model\Config $salesConfig
19+
* @param \Magento\Sales\Helper\Reorder $reorderHelper
20+
* @param array $data
21+
*/
22+
public function __construct(
23+
\Magento\Backend\Block\Widget\Context $context,
24+
\Magento\Framework\Registry $registry,
25+
\Magento\Sales\Model\Config $salesConfig,
26+
\Magento\Sales\Helper\Reorder $reorderHelper,
27+
array $data = []
28+
) {
29+
$this->_reorderHelper = $reorderHelper;
30+
$this->_coreRegistry = $registry;
31+
$this->_salesConfig = $salesConfig;
32+
parent::__construct($context, $registry, $salesConfig, $reorderHelper, $data);
33+
}
34+
35+
}

Helper/Category.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@ public function useDefaultButtonSizeCategory($store = \Magento\Store\Model\Scope
6767
*/
6868
public function getBreadCategories($store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE)
6969
{
70-
return explode(",", $this->scopeConfig->getValue(self::XML_CONFIG_SELECT_CATEGORIES, $store));
70+
$selectedCategories =$this->scopeConfig->getValue(self::XML_CONFIG_SELECT_CATEGORIES, $store);
71+
if(!is_null($selectedCategories)) {
72+
return explode(",", $this->scopeConfig->getValue(self::XML_CONFIG_SELECT_CATEGORIES, $store));
73+
}
74+
return array();
7175
}
7276

7377
/**
@@ -105,6 +109,11 @@ public function isEnabledForCategory($category)
105109
if (!$this->isActive() || !$this->isEnabledOnCAT() || empty($category)) {
106110
return false;
107111
}
112+
$breadCategories = $this->getBreadCategories();
113+
if(count($breadCategories) < 1) {
114+
return true;
115+
}
116+
108117
return in_array($category->getId(), $this->getBreadCategories());
109118
}
110119
}

Helper/Data.php

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper {
6363
const XML_CONFIG_API_SECRET_KEY = 'payment/breadcheckout/api_secret_key';
6464
const XML_CONFIG_API_SANDBOX_PUB_KEY = 'payment/breadcheckout/api_sandbox_public_key';
6565
const XML_CONFIG_API_SANDBOX_SECRET_KEY = 'payment/breadcheckout/api_sandbox_secret_key';
66+
const XML_CONFIG_CLASSIC_API_PUB_KEY = 'payment/breadcheckout/classic_api_public_key';
67+
const XML_CONFIG_CLASSIC_API_SECRET_KEY = 'payment/breadcheckout/classic_api_secret_key';
68+
const XML_CONFIG_CLASSIC_API_SANDBOX_PUB_KEY = 'payment/breadcheckout/classic_api_sandbox_public_key';
69+
const XML_CONFIG_CLASSIC_API_SANDBOX_SECRET_KEY = 'payment/breadcheckout/classic_api_sandbox_secret_key';
6670
const XML_CONFIG_JS_LIB_LOCATION = 'payment/breadcheckout/js_location';
6771
const XML_CONFIG_BUTTON_ON_PRODUCTS = 'payment/breadcheckout/button_on_products';
6872
const XML_CONFIG_BUTTON_DESIGN = 'payment/breadcheckout/button_design';
@@ -238,12 +242,25 @@ public function getProductTypeMessage($store = \Magento\Store\Model\ScopeInterfa
238242
* @param null $store
239243
* @return mixed
240244
*/
241-
public function getApiPublicKey($storeCode = null, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE) {
242-
if ($this->scopeConfig->getValue(self::XML_CONFIG_API_MODE, $store)) {
243-
return $this->scopeConfig->getValue(self::XML_CONFIG_API_PUB_KEY, $store, $storeCode);
245+
public function getApiPublicKey($breadApiVersion = null, $storeCode = null, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE) {
246+
$apiVersion = $this->getApiVersion();
247+
if(!is_null($breadApiVersion)) {
248+
$apiVersion = $breadApiVersion;
249+
}
250+
if($apiVersion === 'bread_2') {
251+
if ($this->scopeConfig->getValue(self::XML_CONFIG_API_MODE, $store)) {
252+
return $this->scopeConfig->getValue(self::XML_CONFIG_API_PUB_KEY, $store, $storeCode);
253+
} else {
254+
return $this->scopeConfig->getValue(self::XML_CONFIG_API_SANDBOX_PUB_KEY, $store, $storeCode);
255+
}
244256
} else {
245-
return $this->scopeConfig->getValue(self::XML_CONFIG_API_SANDBOX_PUB_KEY, $store, $storeCode);
257+
if ($this->scopeConfig->getValue(self::XML_CONFIG_API_MODE, $store)) {
258+
return $this->scopeConfig->getValue(self::XML_CONFIG_CLASSIC_API_PUB_KEY, $store, $storeCode);
259+
} else {
260+
return $this->scopeConfig->getValue(self::XML_CONFIG_CLASSIC_API_SANDBOX_PUB_KEY, $store, $storeCode);
261+
}
246262
}
263+
247264
}
248265

249266
/**
@@ -252,15 +269,31 @@ public function getApiPublicKey($storeCode = null, $store = \Magento\Store\Model
252269
* @param null $store
253270
* @return string
254271
*/
255-
public function getApiSecretKey($storeCode = null, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE) {
256-
if ($this->scopeConfig->getValue(self::XML_CONFIG_API_MODE, $store)) {
257-
return (string) $this->encryptor->decrypt(
258-
$this->scopeConfig->getValue(self::XML_CONFIG_API_SECRET_KEY, $store, $storeCode)
259-
);
272+
public function getApiSecretKey($breadApiVersion = null, $storeCode = null, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE) {
273+
$apiVersion = $this->getApiVersion();
274+
if(!is_null($breadApiVersion)) {
275+
$apiVersion = $breadApiVersion;
276+
}
277+
if($apiVersion === 'bread_2') {
278+
if ($this->scopeConfig->getValue(self::XML_CONFIG_API_MODE, $store)) {
279+
return (string) $this->encryptor->decrypt(
280+
$this->scopeConfig->getValue(self::XML_CONFIG_API_SECRET_KEY, $store, $storeCode)
281+
);
282+
} else {
283+
return (string) $this->encryptor->decrypt(
284+
$this->scopeConfig->getValue(self::XML_CONFIG_API_SANDBOX_SECRET_KEY, $store, $storeCode)
285+
);
286+
}
260287
} else {
261-
return (string) $this->encryptor->decrypt(
262-
$this->scopeConfig->getValue(self::XML_CONFIG_API_SANDBOX_SECRET_KEY, $store, $storeCode)
263-
);
288+
if ($this->scopeConfig->getValue(self::XML_CONFIG_API_MODE, $store)) {
289+
return (string) $this->encryptor->decrypt(
290+
$this->scopeConfig->getValue(self::XML_CONFIG_CLASSIC_API_SECRET_KEY, $store, $storeCode)
291+
);
292+
} else {
293+
return (string) $this->encryptor->decrypt(
294+
$this->scopeConfig->getValue(self::XML_CONFIG_CLASSIC_API_SANDBOX_SECRET_KEY, $store, $storeCode)
295+
);
296+
}
264297
}
265298
}
266299

@@ -307,8 +340,11 @@ public function getJsLibLocation($store = \Magento\Store\Model\ScopeInterface::S
307340
* @param null $store
308341
* @return mixed
309342
*/
310-
public function getTransactionApiUrl($storeCode = null, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE) {
343+
public function getTransactionApiUrl($breadApiVersion = null, $storeCode = null, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $apiVersion = null) {
311344
$apiVersion = $this->getApiVersion($storeCode, $store);
345+
if(!is_null($breadApiVersion)) {
346+
$apiVersion = $breadApiVersion;
347+
}
312348
if($apiVersion === 'bread_2') {
313349
$tenant = strtoupper($this->getConfigClient($storeCode, $store));
314350
if ($this->scopeConfig->getValue(self::XML_CONFIG_API_MODE, $store, $storeCode)) {
@@ -1004,8 +1040,9 @@ public function getPlatformApiUri($tenant, $env) {
10041040
* @return string
10051041
*/
10061042
public function getApiVersion($storeCode = null, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE) {
1007-
if($this->scopeConfig->getValue(self::XML_CONFIG_API_VERSION, $store, $storeCode)) {
1008-
return (string) $this->scopeConfig->getValue(self::XML_CONFIG_API_VERSION, $store, $storeCode);
1043+
$apiVersion = $this->scopeConfig->getValue(self::XML_CONFIG_API_VERSION, $store, $storeCode);
1044+
if($apiVersion) {
1045+
return (string) $apiVersion;
10091046
} else {
10101047
return 'bread_2';
10111048
}

Model/Payment/Api/Client.php

Lines changed: 62 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,23 @@ public function setOrder(\Magento\Sales\Model\Order $order)
106106
public function cancel($breadTransactionId, $amount = 0, $lineItems = [])
107107
{
108108
$this->logger->info('Call API Cancel method. Bread trxId: '. $breadTransactionId);
109+
110+
$apiVersion = $this->helper->getApiVersion();
111+
$payment = $this->order->getPayment();
112+
$paymentApiVersion = $payment->getData('bread_api_version');
113+
$this->logger->info('Payment API version: '. $paymentApiVersion);
114+
if(!is_null($paymentApiVersion) && in_array($paymentApiVersion, ['classic','bread_2'])) {
115+
$apiVersion = strtolower($paymentApiVersion);
116+
}
117+
109118
/* Check if already canceled in bread */
110-
$transaction = $this->getInfo($breadTransactionId);
119+
$transaction = $this->getInfo($breadTransactionId, $apiVersion);
111120
if (strtoupper($transaction['status']) === self::STATUS_CANCELED || strtoupper($transaction['status']) === 'CANCELLED') {
112121
$this->logger->info('Transaction is already canceled in Bread. Bread trxId: '. $breadTransactionId);
113122
return $transaction;
114123
}
115124

116-
$apiVersion = $this->helper->getApiVersion();
117-
125+
118126
if ($apiVersion === 'bread_2') {
119127
$this->logger->info('Bread platform transaction. Bread trxId: '. $breadTransactionId);
120128
$currency = $transaction['totalAmount']['currency'];
@@ -178,6 +186,12 @@ public function authorize($breadTransactionId, $amount, $merchantOrderId = null)
178186
$validateAmount = $this->getInfo($breadTransactionId);
179187
$this->logger->info('Trx: ' . json_encode($validateAmount));
180188
$apiVersion = $this->helper->getApiVersion();
189+
190+
$payment = $this->order->getPayment();
191+
$paymentApiVersion = $payment->getData('bread_api_version');
192+
if(!is_null($paymentApiVersion) && in_array($paymentApiVersion, ['classic','bread_2'])) {
193+
$apiVersion = strtolower($paymentApiVersion);
194+
}
181195

182196
// set transaction id so it can be fetched for split payment cancel
183197
$this->setBreadTransactionId($breadTransactionId);
@@ -229,10 +243,11 @@ public function authorize($breadTransactionId, $amount, $merchantOrderId = null)
229243
'orderId' => $merchantOrderId
230244
]);
231245
$data = '{"externalID":"' . $merchantOrderId . '","metadata":{"externalMerchantData":"externalInfo"}}';
246+
232247
$updateMerchantOrderIdResult = $this->call(
233248
$this->getTransactionInfoUrl($breadTransactionId),
234249
$data,
235-
\Zend_Http_Client::PUT,
250+
\Zend_Http_Client::PATCH,
236251
false
237252
);
238253
$this->logger->info('Response: ' . json_encode($updateMerchantOrderIdResult) . 'Bread trxId: '. $breadTransactionId);
@@ -311,6 +326,13 @@ public function settle($breadTransactionId, $amount = null, $currency = null)
311326
{
312327
$this->logger->info('Call API settle method. Bread trxId: '. $breadTransactionId);
313328
$apiVersion = $this->helper->getApiVersion();
329+
330+
$payment = $this->order->getPayment();
331+
$paymentApiVersion = $payment->getData('bread_api_version');
332+
if(!is_null($paymentApiVersion) && in_array($paymentApiVersion, ['classic','bread_2'])) {
333+
$apiVersion = strtolower($paymentApiVersion);
334+
}
335+
314336
if ($apiVersion === 'bread_2') {
315337
$validateAmount = $this->getInfo($breadTransactionId);
316338
$currency = trim($validateAmount['totalAmount']['currency']);
@@ -358,7 +380,14 @@ public function settle($breadTransactionId, $amount = null, $currency = null)
358380
public function refund($breadTransactionId, $amount = 0, $lineItems = [], $currency = null)
359381
{
360382
$this->logger->info('Call API refund method. Bread trxId: '. $breadTransactionId);
361-
$apiVersion = $this->helper->getApiVersion();
383+
$apiVersion = $this->helper->getApiVersion();
384+
385+
$payment = $this->order->getPayment();
386+
$paymentApiVersion = $payment->getData('bread_api_version');
387+
if(!is_null($paymentApiVersion) && in_array($paymentApiVersion, ['classic','bread_2'])) {
388+
$apiVersion = strtolower($paymentApiVersion);
389+
}
390+
362391
if ($apiVersion === 'bread_2') {
363392
$validateAmount = $this->getInfo($breadTransactionId);
364393
$currency = trim($validateAmount['totalAmount']['currency']);
@@ -397,11 +426,11 @@ public function refund($breadTransactionId, $amount = 0, $lineItems = [], $curre
397426
* @return mixed
398427
* @throws \Exception
399428
*/
400-
public function getInfo($breadTransactionId)
429+
public function getInfo($breadTransactionId, $apiVersion = null)
401430
{
402431
$this->logger->info('Call API getInfo method. Bread trxId: '. $breadTransactionId);
403432
return $this->call(
404-
$this->getTransactionInfoUrl($breadTransactionId),
433+
$this->getTransactionInfoUrl($breadTransactionId, $apiVersion),
405434
[],
406435
\Zend_Http_Client::GET
407436
);
@@ -433,7 +462,7 @@ public function submitCartData($data)
433462
*/
434463
public function getAsLowAs($data)
435464
{
436-
$baseUrl = $this->helper->getTransactionApiUrl($this->getStoreId());
465+
$baseUrl = $this->helper->getTransactionApiUrl('classic', $this->getStoreId());
437466
$asLowAsUrl = join('/', [ trim($baseUrl, '/'), 'aslowas' ]);
438467
return $this->call(
439468
$asLowAsUrl,
@@ -455,11 +484,21 @@ public function getAsLowAs($data)
455484
*/
456485
protected function call($url, $data, $method = \Zend_Http_Client::POST, $jsonEncode = true)
457486
{
487+
$this->logger->info('We are at call');
458488
$storeId = $this->getStoreId();
459-
$username = $this->helper->getApiPublicKey($storeId);
460-
$password = $this->helper->getApiSecretKey($storeId);
461489
$apiVersion = $this->helper->getApiVersion();
462490

491+
if(!is_null($this->order)) {
492+
$payment = $this->order->getPayment();
493+
$paymentApiVersion = $payment->getData('bread_api_version');
494+
if (!is_null($paymentApiVersion) && in_array($paymentApiVersion, ['classic', 'bread_2'])) {
495+
$apiVersion = strtolower($paymentApiVersion);
496+
}
497+
}
498+
$this->logger->info("API Version :: " . $apiVersion );
499+
$username = $this->helper->getApiPublicKey($apiVersion, $storeId);
500+
$password = $this->helper->getApiSecretKey($apiVersion, $storeId);
501+
463502
if($apiVersion === 'bread_2') {
464503
try {
465504
$authToken = $this->helper->getAuthToken();
@@ -639,7 +678,7 @@ protected function callBread($url, $authToken, $data, $method = \Zend_Http_Clien
639678
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
640679
}
641680

642-
if ($method == \Zend_Http_Client::PUT) {
681+
if ($method == \Zend_Http_Client::PUT || $method == \Zend_Http_Client::PATCH) {
643682
$authorization = "Authorization: Bearer " . $authToken;
644683
curl_setopt($curl, CURLOPT_HTTPHEADER, [
645684
'Content-Type: application/json',
@@ -764,7 +803,7 @@ public function sendEmail($cartId, $email, $name)
764803
public function setShippingDetails($transactionId, $trackingNumber, $carrierName)
765804
{
766805
$apiVersion = $this->helper->getApiVersion();
767-
$baseUrl = $this->helper->getTransactionApiUrl($this->getStoreId());
806+
$baseUrl = $this->helper->getTransactionApiUrl(null, $this->getStoreId());
768807

769808
if ($apiVersion === 'bread_2') {
770809

@@ -797,10 +836,13 @@ public function setShippingDetails($transactionId, $trackingNumber, $carrierName
797836
* @param $transactionId
798837
* @return string
799838
*/
800-
protected function getTransactionInfoUrl($transactionId)
801-
{
839+
protected function getTransactionInfoUrl($transactionId, $breadApiVersion = null)
840+
{
802841
$apiVersion = $this->helper->getApiVersion();
803-
$baseUrl = $this->helper->getTransactionApiUrl($this->getStoreId());
842+
if(!is_null($breadApiVersion)) {
843+
$apiVersion = $breadApiVersion;
844+
}
845+
$baseUrl = $this->helper->getTransactionApiUrl($apiVersion, $this->getStoreId());
804846
if ($apiVersion === 'bread_2') {
805847
return join('/', [trim($baseUrl, '/'), 'transaction', trim($transactionId, '/')]);
806848
} else {
@@ -816,7 +858,7 @@ protected function getTransactionInfoUrl($transactionId)
816858
*/
817859
protected function getUpdateTransactionUrl($transactionId)
818860
{
819-
$baseUrl = $this->helper->getTransactionApiUrl($this->getStoreId());
861+
$baseUrl = $this->helper->getTransactionApiUrl('classic', $this->getStoreId());
820862
return join(
821863
'/',
822864
[ trim($baseUrl, '/'), 'transactions/actions', trim($transactionId, '/') ]
@@ -830,7 +872,8 @@ protected function getUpdateTransactionUrl($transactionId)
830872
* @return string
831873
*/
832874
protected function getAuthTokenUrl() {
833-
$baseUrl = $this->helper->getTransactionApiUrl($this->getStoreId());
875+
$baseUrl = $this->helper->getTransactionApiUrl('bread_2', $this->getStoreId());
876+
//return join('/', [trim($baseUrl, '/'), 'auth/service/authorize']);
834877
return join('/', [trim($baseUrl, '/'), 'auth/sa/authenticate']);
835878
}
836879

@@ -851,6 +894,7 @@ protected function generateAuthToken($url, $apiKey, $apiSecret) {
851894
$curl = curl_init($url);
852895
try {
853896
curl_setopt($curl, CURLOPT_HEADER, 0);
897+
curl_setopt($curl, CURLOPT_USERPWD, $apiKey. ':' . $apiSecret);
854898
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
855899
curl_setopt($curl, CURLOPT_POST, 1);
856900
curl_setopt($curl, CURLOPT_HTTPHEADER, [
@@ -948,7 +992,7 @@ protected function getStoreId()
948992
* @param type $action
949993
*/
950994
protected function getUpdateTransactionUrlPlatform($transactionId, $action) {
951-
$baseUrl = $this->helper->getTransactionApiUrl($this->getStoreId());
995+
$baseUrl = $this->helper->getTransactionApiUrl('bread_2', $this->getStoreId());
952996
$url = join('/', [trim($baseUrl, '/'), 'transaction', $transactionId, $action]);
953997
return $url;
954998
}

Model/System/Config/Source/ApiVersion.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class ApiVersion implements \Magento\Framework\Option\ArrayInterface {
2020
public function toOptionArray() {
2121
return [
2222
['value' => 'classic', 'label' => __('Bread Classic')],
23-
['value' => 'bread_2', 'label' => __('Bread 2.0')]
23+
['value' => 'bread_2', 'label' => __('Bread Platform')]
2424
];
2525
}
2626

@@ -32,7 +32,7 @@ public function toOptionArray() {
3232
public function toArray() {
3333
return [
3434
'classic' => __('Bread Classic'),
35-
'bread_2' => __('Bread 2.0')
35+
'bread_2' => __('Bread Platform')
3636
];
3737
}
3838

0 commit comments

Comments
 (0)