Skip to content

Commit 05b7ad1

Browse files
committed
Issue #2845321: Add payment logging
1 parent ddb4287 commit 05b7ad1

4 files changed

+180
-0
lines changed

modules/log/commerce_log.commerce_log_categories.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ commerce_cart:
55
commerce_order:
66
label: Order
77
entity_type: commerce_order
8+
9+
commerce_payment:
10+
label: Payment
11+
entity_type: commerce_payment

modules/log/commerce_log.commerce_log_templates.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,32 @@ order_placed:
1111
category: commerce_order
1212
label: 'Order placed'
1313
template: '<p>The order was placed.</p>'
14+
15+
payment_authorized:
16+
category: commerce_payment
17+
label: 'Payment authorized'
18+
template: '<p>Payment <em>{{ payment_remote_id }}</em> was authorized.</p>'
19+
payment_voided:
20+
category: commerce_payment
21+
label: 'Payment voided'
22+
template: '<p>Payment <em>{{ payment_remote_id }}</em> was voided.</p>'
23+
payment_expired:
24+
category: commerce_payment
25+
label: 'Payment expired'
26+
template: '<p>Payment <em>{{ payment_remote_id }}</em> was expired.</p>'
27+
payment_authorized_captured:
28+
category: commerce_payment
29+
label: 'Payment authorized and captured'
30+
template: '<p>Payment <em>{{ payment_remote_id }}</em> was authorized and captured.</p>'
31+
payment_captured:
32+
category: commerce_payment
33+
label: 'Payment captured'
34+
template: '<p>Payment <em>{{ payment_remote_id }}</em> was captured.</p>'
35+
payment_partially_refunded:
36+
category: commerce_payment
37+
label: 'Payment partially refunded'
38+
template: '<p>Payment <em>{{ payment_remote_id }}</em> was partially refunded.</p>'
39+
payment_refunded:
40+
category: commerce_payment
41+
label: 'Payment refunded'
42+
template: '<p>Payment <em>{{ payment_remote_id }}</em> was refunded.</p>'

modules/log/src/CommerceLogServiceProvider.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ public function register(ContainerBuilder $container) {
2929
->addTag('event_subscriber')
3030
->addArgument(new Reference('entity_type.manager'));
3131
}
32+
if (isset($modules['commerce_payment'])) {
33+
$container->register('commerce_log.payment_subscriber', 'Drupal\commerce_log\EventSubscriber\PaymentEventSubscriber')
34+
->addTag('event_subscriber')
35+
->addArgument(new Reference('entity_type.manager'));
36+
}
3237
}
3338

3439
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
<?php
2+
3+
namespace Drupal\commerce_log\EventSubscriber;
4+
5+
use Drupal\Core\Entity\EntityTypeManagerInterface;
6+
use Drupal\state_machine\Event\WorkflowTransitionEvent;
7+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
8+
9+
class PaymentEventSubscriber implements EventSubscriberInterface {
10+
11+
/**
12+
* The log storage.
13+
*
14+
* @var \Drupal\commerce_log\LogStorageInterface
15+
*/
16+
protected $logStorage;
17+
18+
/**
19+
* Constructs a new PaymentEventSubscriber object.
20+
*
21+
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
22+
* The entity type manager.
23+
*/
24+
public function __construct(EntityTypeManagerInterface $entity_type_manager) {
25+
$this->logStorage = $entity_type_manager->getStorage('commerce_log');
26+
}
27+
28+
/**
29+
* {@inheritdoc}
30+
*/
31+
public static function getSubscribedEvents() {
32+
$events = [
33+
'commerce_payment.authorize.pre_transition' => ['onAuthorize', -100],
34+
'commerce_payment.void.pre_transition' => ['onVoid', -100],
35+
'commerce_payment.expire.pre_transition' => ['onExpire', -100],
36+
'commerce_payment.authorize_capture.pre_transition' => ['onAuthorizeCapture', -100],
37+
'commerce_payment.capture.pre_transition' => ['onCapture', -100],
38+
'commerce_payment.partially_refund.pre_transition' => ['onPartiallyRefund', -100],
39+
'commerce_payment.refund.pre_transition' => ['onRefund', -100],
40+
];
41+
return $events;
42+
}
43+
44+
/**
45+
* Creates a log when a payment is authorized.
46+
*
47+
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
48+
* The transition event.
49+
*/
50+
public function onAuthorize(WorkflowTransitionEvent $event) {
51+
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
52+
$payment = $event->getEntity();
53+
$this->logStorage->generate($payment, 'payment_authorized', [
54+
'payment_remote_id' => $payment->getRemoteId(),
55+
])->save();
56+
}
57+
58+
/**
59+
* Creates a log when a payment is voided.
60+
*
61+
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
62+
* The transition event.
63+
*/
64+
public function onVoid(WorkflowTransitionEvent $event) {
65+
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
66+
$payment = $event->getEntity();
67+
$this->logStorage->generate($payment, 'payment_voided', [
68+
'payment_remote_id' => $payment->getRemoteId(),
69+
])->save();
70+
}
71+
72+
/**
73+
* Creates a log when a payment is expired.
74+
*
75+
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
76+
* The transition event.
77+
*/
78+
public function onExpire(WorkflowTransitionEvent $event) {
79+
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
80+
$payment = $event->getEntity();
81+
$this->logStorage->generate($payment, 'payment_expired', [
82+
'payment_remote_id' => $payment->getRemoteId(),
83+
])->save();
84+
}
85+
86+
/**
87+
* Creates a log when a payment is authorized and captured.
88+
*
89+
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
90+
* The transition event.
91+
*/
92+
public function onAuthorizeCapture(WorkflowTransitionEvent $event) {
93+
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
94+
$payment = $event->getEntity();
95+
$this->logStorage->generate($payment, 'payment_authorized_captured', [
96+
'payment_remote_id' => $payment->getRemoteId(),
97+
])->save();
98+
}
99+
100+
/**
101+
* Creates a log when a payment is captured.
102+
*
103+
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
104+
* The transition event.
105+
*/
106+
public function onCapture(WorkflowTransitionEvent $event) {
107+
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
108+
$payment = $event->getEntity();
109+
$this->logStorage->generate($payment, 'payment_captured', [
110+
'payment_remote_id' => $payment->getRemoteId(),
111+
])->save();
112+
}
113+
114+
/**
115+
* Creates a log when a payment is partially refunded.
116+
*
117+
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
118+
* The transition event.
119+
*/
120+
public function onPartiallyRefund(WorkflowTransitionEvent $event) {
121+
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
122+
$payment = $event->getEntity();
123+
$this->logStorage->generate($payment, 'payment_partially_refunded', [
124+
'payment_remote_id' => $payment->getRemoteId(),
125+
])->save();
126+
}
127+
128+
/**
129+
* Creates a log when a payment is fully refunded.
130+
*
131+
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
132+
* The transition event.
133+
*/
134+
public function onRefund(WorkflowTransitionEvent $event) {
135+
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
136+
$payment = $event->getEntity();
137+
$this->logStorage->generate($payment, 'payment_refunded', [
138+
'payment_remote_id' => $payment->getRemoteId(),
139+
])->save();
140+
}
141+
142+
}

0 commit comments

Comments
 (0)