2
2
3
3
namespace OxidEsales \MonduPayment \Core \WebhookHandler ;
4
4
5
+ use OxidEsales \Eshop \Application \Model \Order ;
5
6
use OxidEsales \Eshop \Core \Registry ;
6
7
use OxidEsales \MonduPayment \Model \MonduInvoice ;
7
8
use OxidEsales \MonduPayment \Model \MonduOrder ;
8
9
use Psr \Log \LoggerInterface ;
9
10
use Symfony \Component \HttpFoundation \Response ;
11
+ use OxidEsales \Eshop \Core \DatabaseProvider ;
10
12
11
13
class WebhookHandler
12
14
{
@@ -19,7 +21,9 @@ public function __construct()
19
21
20
22
public function handleWebhook ($ params )
21
23
{
22
- $ this ->_logger ->debug ('MonduWebhookHandler [handleWebhook]: ' . print_r ($ params , true ));
24
+ $ logger = \OxidEsales \Eshop \Core \Registry::getLogger ();
25
+ $ logger ->debug ('MonduWebhooksController [WebhooksSecret]: ' . print_r ($ params , true ));
26
+
23
27
switch ($ params ['topic ' ]) {
24
28
case 'order/confirmed ' :
25
29
case 'order/authorized ' :
@@ -42,13 +46,63 @@ public function handleOrderStateChanged($params)
42
46
$ monduOrder = $ this ->getOrder ($ params ['order_uuid ' ]);
43
47
44
48
if ($ monduOrder ) {
49
+ if (
50
+ stripos ($ params ['topic ' ], 'confirmed ' ) !== false ||
51
+ stripos ($ params ['topic ' ], 'authorized ' ) !== false
52
+ ) {
53
+ $ order = oxNew (Order::class);
54
+ $ order ->load ($ monduOrder ->getFieldData ('oemondu_orders__oxid_order_id ' ));
55
+
56
+ $ sQuery = "
57
+ UPDATE
58
+ oxorder
59
+ SET
60
+ oxfolder = 'ORDERFOLDER_NEW',
61
+ oxtransstatus = 'OK'
62
+ WHERE
63
+ OXORDERNR = ' {$ order ->getFieldData ('oxorder__oxordernr ' )}'
64
+ " ;
65
+ DatabaseProvider::getDb ()->execute ($ sQuery );
66
+ } else if (stripos ($ params ['topic ' ], 'declined ' ) !== false ) {
67
+ $ order = oxNew (Order::class);
68
+ $ order ->load ($ monduOrder ->getFieldData ('oemondu_orders__oxid_order_id ' ));
69
+
70
+ $ sQuery = "
71
+ UPDATE
72
+ oxorder
73
+ SET
74
+ oxfolder = 'ORDERFOLDER_PROBLEMS',
75
+ oxtransstatus = 'CANCELLED'
76
+ WHERE
77
+ OXORDERNR = ' {$ order ->getFieldData ('oxorder__oxordernr ' )}'
78
+ " ;
79
+ DatabaseProvider::getDb ()->execute ($ sQuery );
80
+ }
45
81
$ monduOrder ->updateOrderState ($ params ['order_state ' ]);
46
82
return [['order ' => $ monduOrder ], Response::HTTP_OK ];
47
83
}
48
84
49
85
return [['error ' => 'Order not found ' ], Response::HTTP_BAD_REQUEST ];
50
86
}
51
87
88
+ public function getWebhookSecretByShopId ($ shopId )
89
+ {
90
+ return Registry::getConfig ()->getShopConfVar (
91
+ 'oemonduWebhookSecret ' ,
92
+ $ shopId ,
93
+ 'module:oemondu '
94
+ );
95
+ }
96
+
97
+ public function getShopId ($ params )
98
+ {
99
+ $ monduOrder = $ this ->getOrder ($ params ['order_uuid ' ]);
100
+ $ order = oxNew (Order::class);
101
+ $ order ->load ($ monduOrder ->getFieldData ('oemondu_orders__oxid_order_id ' ));
102
+
103
+ return $ order ->oxorder__oxshopid ->value ;
104
+ }
105
+
52
106
public function handleInvoiceStateChanged ($ params , $ state )
53
107
{
54
108
$ this ->_logger ->debug ('MonduWebhookHandler [handleInvoiceStateChanged]: ' . print_r ($ params , true ));
@@ -75,4 +129,4 @@ private function getInvoice($invoiceUuid)
75
129
$ monduInvoice ->loadByInvoiceUuid ($ invoiceUuid );
76
130
return $ monduInvoice ;
77
131
}
78
- }
132
+ }
0 commit comments