-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathServer.php
More file actions
79 lines (68 loc) · 1.98 KB
/
Server.php
File metadata and controls
79 lines (68 loc) · 1.98 KB
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
74
75
76
77
78
79
<?php
namespace Wearesho\Bobra\Platon\Notification;
use Carbon\Carbon;
use Carbon\CarbonTimeZone;
use Wearesho\Bobra\Platon;
class Server
{
protected ConfigProviderInterface $configProvider;
public function __construct(ConfigProviderInterface $configProvider)
{
$this->configProvider = $configProvider;
}
/**
* @param array $data
* @return Payment
* @throws InvalidSignException
* @throws \InvalidArgumentException
*/
public function handle(array $data): Payment
{
$config = $this->validateSign($data);
return new Payment(
$data['id'],
$config->getKey(),
$data['order'],
$data['amount'],
$data['currency'],
$data['status'],
$data['card'],
Carbon::parse($data['date'], new \DateTimeZone('UTC')),
$data['rc_token'] ?? null,
$this->extractPaymentData($data),
$data
);
}
/**
* @param array $data
* @return Platon\ConfigInterface
* @throws InvalidSignException
*/
protected function validateSign(array $data): Platon\ConfigInterface
{
$requiredRequestKeys = ['order', 'card', 'sign',];
foreach ($requiredRequestKeys as $requestKey) {
if (!array_key_exists($requestKey, $data)) {
throw new \InvalidArgumentException("Key `{$requestKey}` is required");
}
}
return $this->configProvider->provide(
$data['order'],
$data['card'],
$data['sign'],
$data['email'] ?? null
);
}
protected function extractPaymentData(array $data): array
{
static $paymentDataPrefix = 'ext';
$paymentData = [];
foreach ($data as $key => $value) {
if (!str_starts_with($key, $paymentDataPrefix)) {
continue;
}
$paymentData[$key] = $value;
}
return $paymentData;
}
}