Skip to content

Commit f5ff5df

Browse files
authored
Add debug log for checkout flow (#163)
* enable debug logging for checkout flow * Fix load order by increment_id * Fix sonar tests --------- Co-authored-by: andy <[email protected]>
1 parent de39c2d commit f5ff5df

15 files changed

+378
-127
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# CHANGELOG
22

3+
## 10.0.3 (2023-05-11)
4+
Improvements:
5+
- Implementation debug logging
6+
37
## 10.0.2 (2023-03-21)
48
Improvements:
59
- Update min/max total of Akulaku

Controller/Checkout/AbstractAction.php

+24-15
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Magento\Framework\Controller\Result\JsonFactory;
1111
use Magento\Framework\DB\Transaction as DbTransaction;
1212
use Magento\Framework\Exception\LocalizedException;
13+
use Magento\Framework\Phrase;
1314
use Magento\Framework\Stdlib\CookieManagerInterface;
1415
use Magento\Framework\UrlInterface;
1516
use Magento\Multishipping\Model\Checkout\Type\Multishipping;
@@ -28,15 +29,14 @@
2829
use Xendit\M2Invoice\Helper\Data;
2930
use Xendit\M2Invoice\Helper\ErrorHandler;
3031
use Xendit\M2Invoice\Helper\Metric;
32+
use Xendit\M2Invoice\Logger\Logger as XenditLogger;
3133

3234
/**
3335
* Class AbstractAction
3436
* @package Xendit\M2Invoice\Controller\Checkout
3537
*/
3638
abstract class AbstractAction extends Action
3739
{
38-
const LOG_FILE = 'xendit.log';
39-
4040
/**
4141
* @var Session
4242
*/
@@ -182,7 +182,7 @@ public function __construct(
182182
Context $context,
183183
CategoryFactory $categoryFactory,
184184
OrderFactory $orderFactory,
185-
LoggerInterface $logger,
185+
XenditLogger $logger,
186186
Data $dataHelper,
187187
Crypto $cryptoHelper,
188188
Checkout $checkoutHelper,
@@ -433,25 +433,34 @@ protected function getRedirectFactory()
433433
}
434434

435435
/**
436-
* @param $order
436+
* @param Order $order
437437
* @param $failureReason
438+
* @return Order
438439
* @throws LocalizedException
439440
*/
440-
protected function cancelOrder($order, $failureReason)
441+
protected function cancelOrder(Order $order, $failureReason)
441442
{
442443
$orderState = Order::STATE_CANCELED;
443-
444444
if ($order->getStatus() != $orderState) {
445-
$order->setState($orderState)
445+
try {
446+
$message = "Order #" . $order->getIncrementId() . " was cancelled by Xendit because " . $failureReason;
447+
$order->setState($orderState)
446448
->setStatus($orderState)
447-
->addStatusHistoryComment("Order #" . $order->getIncrementId() . " was cancelled by Xendit because " . $failureReason);
448-
$order->save();
449-
450-
$this->getCheckoutHelper()->cancelOrderById($order->getId(), "Order #" . ($order->getId()) . " was rejected by Xendit");
451-
$this->getCheckoutHelper()->restoreQuote(); //restore cart
449+
->addStatusHistoryComment($message);
450+
$this->orderRepo->save($order);
451+
452+
$this->getCheckoutHelper()->cancelOrderById($order->getId(), "Order #" . ($order->getId()) . " was rejected by Xendit");
453+
$this->getCheckoutHelper()->restoreQuote(); //restore cart
454+
455+
$this->logger->info($message);
456+
} catch (\Exception $ex) {
457+
$this->logger->error('Cancel order failed:' . $ex->getMessage(), ['order_id' => $order->getIncrementId()]);
458+
throw new LocalizedException(
459+
new Phrase($ex->getMessage())
460+
);
461+
}
452462
}
453-
454-
return;
463+
return $order;
455464
}
456465

457466
/**
@@ -497,7 +506,7 @@ protected function getMultiShippingOrderIds()
497506
*/
498507
protected function orderValidToCreateXenditInvoice(Order $order): bool
499508
{
500-
if (!empty($order) && empty($order->getXenditTransactionId())) {
509+
if (empty($order->getXenditTransactionId())) {
501510
return true;
502511
}
503512
return false;

Controller/Checkout/Invoice.php

+74-26
Original file line numberDiff line numberDiff line change
@@ -27,34 +27,46 @@ public function execute()
2727

2828
if ($order->getState() === Order::STATE_NEW) {
2929
$this->changePendingPaymentStatus($order);
30+
3031
$invoice = $this->createInvoice($apiData);
3132
$this->addInvoiceData($order, $invoice);
32-
$redirectUrl = $this->getXenditRedirectUrl($invoice, $apiData['preferred_method']);
3333

34+
$redirectUrl = $this->getXenditRedirectUrl($invoice, $apiData['preferred_method']);
35+
$this->getLogger()->info(
36+
'Redirect customer to Xendit',
37+
['order_id' => $order->getIncrementId(), 'redirect_url' => $redirectUrl]
38+
);
3439
$resultRedirect = $this->getRedirectFactory()->create();
3540
$resultRedirect->setUrl($redirectUrl);
3641
return $resultRedirect;
3742
} elseif ($order->getState() === Order::STATE_CANCELED) {
43+
$this->getLogger()->info('Order is already canceled', ['order_id' => $order->getIncrementId()]);
44+
3845
$this->_redirect('checkout/cart');
3946
} else {
40-
$this->getLogger()->debug('Order in unrecognized state: ' . $order->getState());
47+
$this->getLogger()->info('Order in unrecognized state', ['state' => $order->getState(), 'order_id' => $order->getIncrementId()]);
4148
$this->_redirect('checkout/cart');
4249
}
4350
} catch (\Throwable $e) {
51+
$errorMessage = sprintf('xendit/checkout/invoice failed: Order #%s - %s', $order->getIncrementId(), $e->getMessage());
52+
53+
$this->getLogger()->error($errorMessage, ['order_id' => $order->getIncrementId()]);
4454
$this->getLogger()->debug('Exception caught on xendit/checkout/invoice: ' . $e->getMessage());
4555
$this->getLogger()->debug($e->getTraceAsString());
4656

47-
$this->cancelOrder($order, $e->getMessage());
48-
49-
// log metric error
50-
$this->metricHelper->sendMetric(
51-
'magento2_checkout',
52-
[
53-
'type' => 'error',
54-
'payment_method' => $this->getPreferredMethod($order),
55-
'error_message' => $e->getMessage()
56-
]
57-
);
57+
// cancel order
58+
try {
59+
$this->cancelOrder($order, $e->getMessage());
60+
$this->metricHelper->sendMetric(
61+
'magento2_checkout',
62+
[
63+
'type' => 'error',
64+
'payment_method' => $this->getPreferredMethod($order),
65+
'error_message' => $errorMessage
66+
]
67+
);
68+
} catch (\Exception $e) {
69+
}
5870

5971
return $this->redirectToCart($e->getMessage());
6072
}
@@ -124,6 +136,8 @@ private function createInvoice($requestData)
124136

125137
try {
126138
if (isset($requestData['preferred_method'])) {
139+
$this->getLogger()->info('createInvoice start', ['data' => $requestData]);
140+
127141
$invoice = $this->getApiHelper()->request(
128142
$invoiceUrl,
129143
$invoiceMethod,
@@ -147,6 +161,7 @@ private function createInvoice($requestData)
147161
);
148162
}
149163

164+
$this->getLogger()->info('createInvoice success', ['xendit_invoice' => $invoice]);
150165
return $invoice;
151166
}
152167

@@ -163,32 +178,65 @@ private function getXenditRedirectUrl($invoice, $preferredMethod)
163178
/**
164179
* @param Order $order
165180
* @return void
181+
* @throws LocalizedException
166182
*/
167183
private function changePendingPaymentStatus(Order $order)
168184
{
169-
$order->setState(Order::STATE_PENDING_PAYMENT)->setStatus(Order::STATE_PENDING_PAYMENT);
170-
$order->addCommentToStatusHistory("Pending Xendit payment.");
171-
$this->getOrderRepo()->save($order);
185+
try {
186+
$order->setState(Order::STATE_PENDING_PAYMENT)->setStatus(Order::STATE_PENDING_PAYMENT);
187+
$order->addCommentToStatusHistory("Pending Xendit payment.");
188+
$this->getOrderRepo()->save($order);
189+
190+
$this->getLogger()->info(
191+
'changePendingPaymentStatus success',
192+
['order_id' => $order->getIncrementId()]
193+
);
194+
} catch (\Exception $e) {
195+
$this->getLogger()->error(
196+
sprintf('changePendingPaymentStatus failed: %s', $e->getMessage()),
197+
['order_id' => $order->getIncrementId()]
198+
);
199+
200+
throw new LocalizedException(
201+
new Phrase($e->getMessage())
202+
);
203+
}
172204
}
173205

174206
/**
175207
* @param Order $order
176208
* @param array $invoice
177209
* @return void
210+
* @throws \Exception
178211
*/
179212
private function addInvoiceData(Order $order, array $invoice)
180213
{
181-
$payment = $order->getPayment();
182-
$payment->setAdditionalInformation('payment_gateway', 'xendit');
183-
if (isset($invoice['id'])) {
184-
$payment->setAdditionalInformation('xendit_invoice_id', $invoice['id']);
185-
$order->setXenditTransactionId($invoice['id']);
186-
}
187-
if (isset($invoice['expiry_date'])) {
188-
$payment->setAdditionalInformation('xendit_invoice_exp_date', $invoice['expiry_date']);
189-
}
214+
try {
215+
$payment = $order->getPayment();
216+
$payment->setAdditionalInformation('payment_gateway', 'xendit');
217+
if (isset($invoice['id'])) {
218+
$payment->setAdditionalInformation('xendit_invoice_id', $invoice['id']);
219+
$order->setXenditTransactionId($invoice['id']);
220+
}
221+
if (isset($invoice['expiry_date'])) {
222+
$payment->setAdditionalInformation('xendit_invoice_exp_date', $invoice['expiry_date']);
223+
}
224+
225+
$this->getOrderRepo()->save($order);
226+
$this->getLogger()->info(
227+
'addInvoiceData success',
228+
['order_id' => $order->getIncrementId(), 'xendit_transaction_id' => $invoice['id']]
229+
);
230+
} catch (\Exception $e) {
231+
$this->getLogger()->error(
232+
sprintf('addInvoiceData failed: %s', $e->getMessage()),
233+
['order_id' => $order->getIncrementId(), 'xendit_transaction_id' => $invoice['id']]
234+
);
190235

191-
$this->getOrderRepo()->save($order);
236+
throw new LocalizedException(
237+
new Phrase($e->getMessage())
238+
);
239+
}
192240
}
193241

194242
/**

0 commit comments

Comments
 (0)