1: | <?php |
2: | |
3: | namespace IPay\Utils; |
4: | |
5: | use IPay\Encryption\Encryptor; |
6: | use Nette\Utils\Json; |
7: | |
8: | |
9: | |
10: | |
11: | final class RequestBodyBuilder implements \Stringable, \JsonSerializable |
12: | { |
13: | |
14: | |
15: | |
16: | private function __construct( |
17: | private array $parameters = [], |
18: | ) { |
19: | } |
20: | |
21: | public static function new(): self |
22: | { |
23: | return new self(); |
24: | } |
25: | |
26: | |
27: | |
28: | |
29: | public function enhance(array $parameters): self |
30: | { |
31: | return new self($parameters); |
32: | } |
33: | |
34: | |
35: | |
36: | |
37: | public function build(array $parameters = []): self |
38: | { |
39: | $data = array_merge($this->parameters, $parameters); |
40: | ksort($data); |
41: | $data['signature'] = md5(http_build_query($data)); |
42: | |
43: | return new self($data); |
44: | } |
45: | |
46: | public function encrypt(): string |
47: | { |
48: | return new self(['encrypted' => Encryptor::encrypt($this)]); |
49: | } |
50: | |
51: | public function __toString(): string |
52: | { |
53: | return Json::encode($this->parameters); |
54: | } |
55: | |
56: | #[\ReturnTypeWillChange] |
57: | public function jsonSerialize() |
58: | { |
59: | return $this->parameters; |
60: | } |
61: | } |
62: | |