-
Notifications
You must be signed in to change notification settings - Fork 114
/
PaymentService.php
73 lines (65 loc) · 1.79 KB
/
PaymentService.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
namespace OFFLINE\Mall\Classes\Payments;
use OFFLINE\Mall\Models\Order;
/**
* The PaymentService orchestrates the payment process.
*/
class PaymentService
{
/**
* The used PaymentGateway for this payment.
* @var PaymentGateway
*/
public $gateway;
/**
* The order that is being paid.
* @var Order
*/
public $order;
/**
* Page filename of the checkout page.
* @var string
*/
public $pageFilename;
/**
* A PaymentRedirector instance.
* @var PaymentRedirector
*/
protected $redirector;
/**
* PaymentService constructor.
*
* @param PaymentGateway $gateway
* @param Order $order
* @param string $pageFilename
*
* @throws \Cms\Classes\CmsException
*/
public function __construct(PaymentGateway $gateway, Order $order, string $pageFilename)
{
$this->gateway = $gateway;
$this->order = $order;
$this->pageFilename = $pageFilename;
$this->redirector = new PaymentRedirector($pageFilename);
}
/**
* Processes the payment.
*
* @param string $flow
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function process($flow = 'checkout')
{
session()->put('mall.processing_order.id', $this->order->hashId);
session()->put('mall.checkout.flow', $flow);
try {
$result = $this->gateway->process($this->order);
} catch (\Throwable $e) {
$result = new PaymentResult($this->gateway->getActiveProvider(), $this->order);
$result->fail($this->order->toArray(), $e);
}
session()->forget('mall.payment_method.data');
return $this->redirector->handlePaymentResult($result);
}
}